MATLAB; you may see different results on different platforms.


หลายคนอาจจะเจอปัญหานี้ ผลจากการคำนวณของ MATLAB บนเครื่องคอมพิวเตอร์สองเครื่องให้ค่าไม่เหมือนกัน ลูกศิษย์อาจจะบอกว่าที่บ้านผมทำได้ ได้ผลดี แต่ทำไมเครื่องที่มหาวิทยาลัยให้ผลไม่เหมือนกัน ในขณะที่อาจารย์ส่ายหน้าและไม่เชื่อ

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

สมมุติฐานแรกเลย เครื่องโน้ตบุ๊คผมเป็น AMD  รัน windows 7 pro (64 bits) และใช้ MATLAB 2010b ในขณะที่เครื่องที่ทำงานเป็น Intel และรัน windows xp sp3 (32 bits)  และใช้ MATLAB 2010a  เลข 32 กับ 64 บิตนั้นหลอนก่อนเพื่อน  ค้นไปค้นมาก็เลยลง MATLAB 2010b เวอร์ชัน 32 bits ในโน้ตบุ๊คเพิ่มเข้าไป ปรากฏว่าคราวนี้ได้ผลต่างกันสามแบบเลยครับ

ก็เลยเขียนไปถาม Matworks เนื่องจากเราใช้ของถูกกฏหมาย เรามีสิทธิใช้บริการเต็มที่ (เวลาถามเขา เขาจะถามเลขไลเซนต์ และข้อมูลต่าง ๆ นานา ด้วย) แน่นอนต้องแนบโปรแกรมไปให้เขาด้วย ผ่านไปหนึ่งวัน ได้รับคำตอบที่น่ากลัวมาก ๆ คือ ผลที่ได้ไม่เหมือนกันนั้น ถูกต้องแล้ว เพราะ MATLAB โปรแกรมคำนวณพีชคณิตเชิงเส้นที่แตกต่างกันออกไปตามแต่แพลตฟอร์ม ทั้งนี้เพื่อประโยขน์ในการเพิ่มความเร็ว (ไรฟะ) ดังนั้นค่าการคำนวณที่ได้ในแต่ละแพลตฟอร์มจะมีค่าต่างกันเล็กน้อย แต่ในกรณีที่การคำนวณใด ๆ ก็แล้วแต่ใกล้ค่า Singular มาก ๆ มันก็จะมีผลของความแตกต่างค่อนข้างชัดเจน กล่าวคือการจำลองการทำงานบางอันเสถียรบนเครื่องนึง แต่กับอีกเครื่องหนึ่งจะไม่เสถียร

อย่างไรก็ตามวิศวกรก็ได้บอกเฉลยวิธีแก้มาให้คือ ให้ MATLAB ใช้  reference BLAS  ซึ่งทำได้ดังนี้

  1. เข้าไปตั้งตัวแปรของระบบที่  System Properties ดังรูป
  2. ที่ Environment variables ให้เพิ่มตัวแปรใน System Variables โดยที่ตัวแปรที่เพิ่มชื่อ BLAS_VERSION และมีค่าเป็น refblas.dll ซึ่งถ้าเกิดตัวแปรนี้มีอยู่แล้ว ก็แค่แก้ค่าดังกล่าวใส่ลงไป

แน่นอนสิ่งที่ได้คือมั่นใจว่าทุกเครื่องจะให้ผลเหมือนกัน แต่หลาย ๆ ฟังก์ชันจะทำงานช้าลง เท่าที่ลองตอนนี้ผลที่ได้เหมือนกันแล้ว ส่วนเรื่องช้านั้นไม่รู้สึกอะไรมากครับ

ใครมีปัญหานี้ก็ไปลองแก้ไขดูได้ครับ

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s