ComBioLaw.De » Blog » FORTRAN

C/C++ vs. Fortran in Scientific Programming

image ประเด็นการเปรียบเทียบภาษาเขียนโปรแกรม เป็นประเด็นที่ผมเขียนค่อนข้างบ่อย ส่วนมากผมจะเอาภาษาต่าง ๆ มาเปรียบเทียบกัน เพราะเป็นเรื่องที่ผมเองสนใจ ไม่ได้มีเหตุผลอะไรเป็นพิเศษ แต่ครั้งนี้ผมต้องเอาสองภาษาเขียนโปรแกรม ซึ่งเป็นภาษาโบราณทั้งคู่ มาเทียบเคียงกัน เพราะมีเรืื่องของงานเข้ามาเกี่ยวข้องครับ

งานที่ว่านี้เป็นงานวิจัยเกี่ยวกับ Signal Processing ในตัวรับศัญญาณเคเบิลใยแก้นำแสง ที่คณะผมรับมาจากบริษัทเอกชนแห่งหนึ่ง Signal Processing ทั้งหมดจะเป็น Off-line Processing กล่าวคือ สัญญาณรูปแบบต่าง ๆ ที่ออกจากเคเบิลใยแก้วนำแสง จะถูกวัดด้วยตัววัดสัญญาณ แล้วจะถูกเซพไว้ในไฟล์ต่าง ๆ จากนั้นพวกผมจะนำไฟล์เหล่านี้มาใช้ในงานวิจัยเกี่ยวกับ Signal Processing โดยใช้โปรแกรมที่ทำงานบนเครื่งคอมพิวเตอร์ตั้งโต๊ะธรรมดานี่แหละครับ

ที่ต้องทำวิจัยกันแบบ Off-line Processing ก็เพราะว่าช่วยประหยัดงบประมาณไปได้เยอะครับ ไม่ต้องมานั่งวัดสัญญาณใหม่ทุกครั้งที่ต้องทำการทดลอง ทางคณะเองก็ไม่ต้องมีห้องทดลองเป็นของตัวเอง ใช้วิธียืมข้อมูลของคนอื่นเอา ที่สำคัญที่สุด ไม่ต้องต่อวงจร Hardware ใหม่ทุกครั้งที่มีไอเดียใหม่ เอาไว้หากทุกอย่างลงตัว ทำงานได้จริง ถึงจะมีการสร้าง Hardware กัน

ปกติแล้วเพื่อน ๆ ผมจะใช้ MATLAB ในการเขียนโปรแกรมเพื่อทดสอบไอเดียก่อน หากใช้ได้จึงค่อยเขียนเป็น FORTRAN77 อีกที ส่วนผมใช้ Python + f2py (Fortran 95) เพราะไม่อยากเขียนสองรอบ (แต่แปลกดีที่ทำงานกันได้) แต่คราวนี้ บริษัทที่ให้งบวิจัยมาต้องการโปรแกรมเป็นภาษา C++ เพราะต้องทำงานร่วมกับหน่วยงานวิจัยของมหาวิทยาลัยอื่น ๆ ด้วย แต่ไม่ได้บอกพวกผมตั้งแต่แรก ว่าอยากได้ C++ สรุปตอนนี้โปรแกรมที่ว่ามีให้เลือกใช้สี่ภาษาคือ MATLAB, Python, Fortran, C++ (มันส์มากครับ ขอบอก)

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

เขียนโปรแกรม เขียนโปรแกรม

01 Dec 07 | by bow_der_kleine | tags เขียนโปรแกรม C C++ Fortran Scientific-Programming

read 5786 comments 9 read more

Numerical Programming

imageหลังจากห่างหายจากการเขียนบล็อกไปนานพอสมควร เนื่องจากอาทิตย์ที่ผ่านมา ผมได้ไปเปิดหูเปิดตา ในโลกไฟเบอร์ออพติก (การส่งสัญาณผ่านใยแก้นำแสง) ด้วยการไปประชุม ECOC07 ที่เบอร์ลินมา เป็นงานประชุมวิชาการระดับโลกครั้งแรกในชีวิต ได้เจอนักวิจัยที่ผมเคยอ่านผลงานของเขาหลาย ๆ คน ชนิดแบบตัวเป็น ๆ แต่ก็ไม่ได้คุยอะไรมาก เนื่องจากความอ่อนแอทางด้านภาษาอังกฤษ และได้แลกเปลี่ยนความคิดเห็น กับคนที่ทำหัวข้อใกล้ ๆ กัน ผมไม่รู้จะดีใจ หรือเสียใจดี ที่เรื่องที่ผมทำอยู่ มีคนสนใจน้อย ดีใจที่จะได้ไม่ซ้ำใครมาก เสียใจที่พอมีปัญหาก็ไม่รู้จะถามใครดี แล้ววันหลังจะเขียนเรื่องราวเกี่ยวกับไฟเบอร์ออพติกให้อ่านกันครับ แต่วันนี้ผมขอเอาประสบการณ์การเขียนโปรแกรม ที่ได้จากการทำงานมาเล่าให้อ่านกันก่อน

เรื่องที่ผมจะเขียนถึงคือ Numerical Programming จากเท่าที่ได้ลอง ๆ ค้นข้อมูล ยังไม่ค่อยมีคนเขียนถึงเท่าไร ผมไม่รู้ว่าการเขียนโปรแกรมเชิง Numerical จะจัดเป็น Arithmetic แบบนึง เช่นเดียวกับ Procedure, Modular, OOP หรือ Functional ได้หรือไม่ แต่หลังจากที่ใช้ Numpy และ MATLAB มาเป็นเวลาเกือบสองปี (ส่วนมากจะใช้ Numpy ) ผมก็เริ่มรู้สึกว่า การเขียนโปรแกรมแบบ Numerical นั้น ต้องคิดต่างจาก Arithmetic อื่น ๆ พอสมควร ตอนเขียนแรก ๆ อาจจะคิดว่าคล้าย ๆ Procedure แต่พอเขียนไปนาน ๆ จะรู้ว่าต่างกันค่อนข้างมาก

ก่อนอื่น ผมต้องอธิบายก่อนว่า Numerical Arithmetic ในความเข้าใจของผมคืออะไร ...

เขียนโปรแกรม เขียนโปรแกรม

24 Sep 07 | by bow_der_kleine | tags เขียนโปรแกรม Numeric Arithmetic Python Numpy MATLAB FORTRAN

read 3722 comments 5 read more

ภาษาเขียนโปรแกรมสมัยใหม่

introPicหลังจากที่ผมเคยเขียนเรื่องราว ประวัติศาสตร์ และที่มาของภาษาเขียนโปรแกรม ภาษาต่าง ๆ มาแล้วในบลอกเรื่อง ประวัติศาสตร์ ภาษาเขียนโปรแกรม ซึ่งได้รับเสียงตอบรับแบบเกินคาด (ผมเองก็ยัง งง ๆ อยู่เลยครับ)

ผมจึงอยากเขียนเรื่องราวต่อเนื่อง ในเรื่องที่เกี่ยวข้องกับภาษาเขียนโปรแกรม โดยครั้งนี้ผมจะเน้นเฉพาะภาษาเขียนโปรแกรมสมัยใหม่ที่ได้รับความนิยม มีอนาคตที่น่าจับตา และไม่เน้นประวัติศาสตร์ที่มาที่ไปมากนัก แต่จะเน้นที่คุณสมบัติที่น่าสนใจแทน ในความคิดเห็นของผมน่าจะเป็น ประโยชน์สำหรับคนที่กำลังหัดเขียนโปรแกรม (สำหรับคนที่เป็นนักเขียนโปรแกรม มืออาชีพ อ่านแล้วผมขอคำแนะนำเพิ่มเติมด้วยครับ ยิ้มกว้าง) ในการตัดสินใจเลือก ภาษาเขียนโปรแกรมให้ถูกกับงานต่อไปครับ

เขียนโปรแกรม เขียนโปรแกรม

22 Mar 06 | by bow_der_kleine | tags เขียนโปรแกรม OOP Modular C++ Java Fortran Python PHP Perl Mono .NET Ruby

read 6811 comments 0 read more

เพิ่มความเร็วให้ Python ตอน 2

introPicหลังจากพักเรื่อง Python ไว้กว่าหนึ่งอาทิตย์ โดยครั้งก่อนผมได้นำเสนอวิธีการเพิ่มความเร็วให้กับ Python ด้วย ShellScript ไป ซึ่งอันที่จริงไม่ได้เป็นการเพิ่มความเร็วโดยตรง แต่เป็นการบริหาร Memroy แบบง่าย ๆ วิธีหนึ่งเท่านั้น ในครั้งนี้ผมขอนำเสนอวิธีการที่ถือว่าเป็นการเพิ่มความเร็วให้ Python แบบของจริงที่เหลืออีกสองวิธี ซึ่งสองวิธีนี้สามารถใช้งานได้กับโปรแกรมทุกรูปแบบ ไม่จำกัดว่าต้องเป็นโปรแกรมที่ต้องการ Memory จำนวนมาก อย่างการเพิ่มความเร็วด้วย ShellScript เท่านั้น

เรามาดูกันครับว่าวิธีที่ว่านั้นอีกสองวิธีมีอะไรบ้าง ......

เขียนโปรแกรม เขียนโปรแกรม

27 Dec 05 | by bow_der_kleine | tags เขียนโปรแกรม Python Psyco Pyrex Fortran

read 3878 comments 9 read more

เพิ่มความเร็วให้ Python ตอน 1

introPicหลังจากที่หาเครื่องมือมาแทน MATLAB ได้ถูกอกถูกใจแล้ว ซึ่งผมได้เลือกใช้ Python เป็นเครื่องมือแทน MATLAB ผมจึงเริ่มเขียนโปรแกรม Simulator ที่ได้รับมอบหมายจากทางสถาบันที่ผมเขียนงานอยู่ด้วย Python ผลออกมาเป็นที่น่าพอใจมากครับ เพราะระดับความยากของ Python กับ MATLAB ไม่ต่างกันมากนัก (MATLAB อาจง่ายกว่าในบางจุดโดยเฉพาะการคำนวน Matrix) ดังนั้นการเปลี่ยนจาก MATLAB มาเป็น Python จึงไม่มีปัญหาอะไร

เมื่อเริ่มใช้งาน Simulator ที่ผมเขียนขึ้นผมก็เจอปัญหาเดิมๆ ที่ไม่ว่าจะใช้ MATLAB หรือ Python ก็ต้องเจอ นั่นคือ ระยะเวลาในการรอผลการทดลองจากโปรแกรมที่เขียน เพราะในนั้นผมได้จำลองข้อมูลจำนวนมหาศาลลงไป คำนวนโดยคร่าวๆแล้ว โปรแกรมที่เขียนด้วย Python ของผมน่าจะใช้เวลาประมาณ 1 สัปดาห์ ยุ่ง (หากใช้ MATLAB จะใช้เวลานานกว่านี้เล็กน้อยถึงปานกลาง ยิ้มกว้าง ) ในการคำนวนผลการทดลองทั้งหมดออกมา ระยะเวลานานขนาดนั้นผมรอไม่ไหวแน่ๆ ผมจึงได้ลองหาวิธีที่จะช่วยให้โปรแกรมที่ผมเขียนทำงานได้เร็วขึ้น ผมได้พบเครื่องมือต่างๆที่ช่วยให้โปรแกรมที่เขียนด้วย Python ทำงานเร็วขึ้นหลายวิธีด้วยกัน หากใครสนใจเชิญอ่านต่อได้เลยครับ .....

เขียนโปรแกรม เขียนโปรแกรม

23 Dec 05 | by bow_der_kleine | tags เขียนโปรแกรม Python MATLAB Fortran

read 2414 comments 0 read more

Search

Navigation

รวมลิงก์น่าสนใจ

ความเคลื่อนไหว

Login