Thursday, December 6, 2007

C/C++ Performance in Complex Number Computation

จากที่คุณ bow_der_kleine ได้เขียนใน biolawcom.de ไว้ในหัวข้อ C/C++ vs. Fortran in Scientific Programming ทำให้ผมเกิดข้อสงสัยในการเปรียบเทียบความเร็วระหว่าง C/C++/Fortran ในการคำนวณ complex number

ในตัวอย่างนั้นได้ทำการเปรียบเทียบ C++ และ Fortran ในการคำนวณด้าน complex number ไว้ และสรุปว่าภาษา C นั้นช้ากว่าโปรแกรมที่เขียนโดย Fortran มากๆ ในการคำนวณ complex number
ผมค่อนข้างไม่เห็นด้วยกับข้อสรุปนี้ เนื่องจากยังไม่มีการเขียนเปรียบเทียบระหว่างภาษา C (ชัดๆ) และ Fortran เลย

ข้อแตกต่างระหว่าง c/c++ นอกจากความสามารถด้านคลาสแล้วยังรวมถึงไลบรารีต่างๆที่ใช้ด้วย และหนึ่งในนั้นคือไลบรารี complex ซึ่งใน C/C++ นั้นมีรายละเอียดแตกต่างกันค่อนข้างมาก

ผมลองเขียนโค้ดโดยอิงตัวแปรจากคุณ bow เป็นหลัก มาสามโปรแกรมคือ
  1. ภาษา C ที่เรียกใช้ complex.h ซอร์ส
  2. ภาษา C++ ที่เรียกใช้ complex ซอร์ส
  3. ภาษา C ที่ไม่เรียกใช้ complex.h ซอร์ส
และทำการจับเวลาโดยใช้สคริปท์ python

ได้ผลลัพท์คือ (ดูรูปใหญ่)



จะเห็นว่าเวลาที่ได้ระหว่าง C/C++ นั้นมันต่างกันอย่างเห็นได้ชัด โดยมีอัตราการโตของเวลาที่ใช้แตกต่างกัน

จริงๆแล้วอยากเทียบกับ Fortran จังเลย แต่เขียนไม่เป็น

ปล. ระหว่างที่เขียนและรันโปรแกรมได้โหลดบิททอเรนท์อยู่ ผลลัพท์อาจผิดพลาดไปเล็กน้อย

No comments: