ซีพียูมัลติคอร์กับแนวโน้มของการพัฒนาซอฟต์แวร์แห่งอนาคต

by putchonguth
6 October 2008 - 17:21

เมื่อหลายปีก่อนนั้น คอมพิวเตอร์มีความเร็วเริ่มที่ 1 เมกะเฮิร์ต (เครื่อง Apple II+) ต่อมาไอบีเอ็มสร้าง PC XT เริ่มที่ 4.77 เมกะเฮิร์ต ในยุคถัดมา PC AT ก็เร็วขึ้นอีกเป็น 6 เมกะเฮิร์ต ขณะนี้ เราใช้เครื่องที่ซีพียูเร็วราว 2-3 กิกะเฮิร์ตกันอยู่ ทุกครั้งที่คอมพิวเตอร์เร็วขึ้นผู้ใช้ก็จะได้ใช้ซอฟต์แวร์ที่รวดเร็วอยู่พักหนึ่งก่อนที่บริษัทจะออกโปรแกรมใหม่ๆ ที่เพิ่มความสามารถ แต่กินแรงเครื่องจนช้าเท่าเดิม อย่างไรก็ตามไม่มีใครห่วงมากนักเพราะสักพัก ซีพียูใหม่ๆก็เพิ่มความเร็วสัญญาณนาฬิกาอีก ทำให้เครื่องเร็วขึ้นเอง ผู้ใช้แค่เก็บเงินไว้เปลี่ยนเครื่องใหม่ๆเป็นระยะก็พอ ในหลายปีที่ผ่านมา วิธีการเพิ่มสัญญาณนาฬิกาแบบเดิมเริ่มไม่ได้ผล ปัญหาที่เกิดขึ้นคือ ความร้อนที่เพิ่มขึ้น ได้กลายเป็นขีดจำกัดที่ยังไม่สามารถหาทางแก้ไขได้ ทำให้ยังไม่มี ซีพียูที่มีความเร็วเกินกว่า 4 กิกะเฮิร์ต ทางเลือกใหม่ที่ทุกบริษัทใช้ คือ เทคโนโลยีมัลติคอร์

เทคโนโลยีที่เรียกว่า มัลติคอร์ (multi-core) หรือ เมนี่คอร์ (many core) คือ การสร้างซีพียูหลายๆ ชุดลงในชิบเดียวและให้ซีพียูเหล่านี้ช่วยกันทำงาน การที่เทคโนโลยีนี้ถูกเลือกให้เป็นทางออกในการออกแบบซีพียูรุ่นใหม่ๆ ของบริษัทอย่างอินเทลและเอเอ็มดี นั้นเป็นเพราะความก้าวหน้าด้านกระบวนการผลิต (process technology) ของสารกึ่งตัวนำยังคงดำเนินต่อไป ทำให้สามารถสร้างวงจรได้ซับซ้อนมากขึ้นในชิปตัวเดียว ทางเลือกนี้จึงชัดเจนและกลายเป็นทางเลือกที่จำเป็น ขณะทางอินเทลมีชิปขนาด 80 คอร์ที่ทำงานได้แล้วอยู่ในแล็บ เป็นที่คาดหมายกันว่าภายใน 10 ปีนี้จะมีชิปกว่า 256 คอร์ออกสู่ตลาดให้ได้ใช้งานกัน แน่นอนว่าโลกของคอมพิวเตอร์ก็จะเกิดการเปลี่ยนแปลงขนานใหญ่

เมื่อใช้มัลติคอร์ซีพียูแล้ว โปรแกรมที่ใช้งานจะเร็วขึ้นโดยอัตโนมัติไหม?

คำตอบ คือ ไม่ใช่

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

ส่วนงานที่ต้องการประมวลผลให้เร็วขึ้นหรือ High Performance Computing นั้นโปรแกรมจะไม่เร็วขึ้นเลยนอกจากจะเขียนโปรแกรมให้รู้จักและใช้งานระบบมัลติคอร์ ให้ได้ อย่างไรก็ตามการที่โปรแกรมจะใช้งานซีพียูแบบมัลติคอร์ให้ได้อย่างดีนั้นนั้น จะต้องเขียนให้ประมวลผลแบบขนานได้

การประมวลผลแบบขนานนั้นเป็นอย่างไร การทำงานแบบขนานนั้นอัลกอริทึมที่ใช้ต้องพยายามแตกกระจายงานทุกอย่างให้เป็นงานย่อยๆที่ ทำพร้อมกันให้ได้มากที่สุด ตัวอย่างหนึ่งคือการทำ graphics rendering ซึ่งสามารถกระจายภาพแต่ละภาพในหนังแอนิเมชั่นให้ทำงานเรนเดอร์ไปพร้อมๆ กันได้ เนื่องจากแต่ละเฟรมจะไม่ขึ้นต่อกัน

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

การพัฒนาโปรแกมแบบขนานบนซีพียูมัลติคอร์นั้นมีหลายวิธี แต่ที่ใช้กันมากคือการพัฒนาโปรแกรมให้ทำงานแบบมัลติเทรด การทำงานแบบมัลติเทรด คือการเขียนโปรแกรมโดยสร้างส่วนของโปรแกรมที่เรียกว่า "เทรด" ขึ้นมาหลายเทรด เมื่อต้องการประมวลผล ก็จะมีการสร้างเทรดมาอย่างรวดเร็ว โดยในระบบปฏิบัติการหรือระบบโปรแกรมกระจาย เทรดเหล่านี้ไปบนหลายๆ คอร์ทำให้ แต่ละคอร์ช่วยกันทำงานได้ ภาษาสมัยใหม่ เช่น C# หรือ Java จะสนับสนุนการเขียนโปรแกรมแบบนี้ในตัวภาษาเลย

ปัญหาที่ต้องเผชิญคือการเขียนโปรแกรมในลักษณะนี้ไม่ใช่งานง่ายๆ วารสาร Fortune ฉบับเดือนสิงหาคมลงบทความไว้โดยระบุว่า วงการซอฟต์แวร์ทั่วโลกต้องมีการปรับตัวขนานใหญ่ เนื่องจากการพัฒนาซอฟต์แวร์ต้องเปลี่ยนไปมากเนื่องจากเทคโนโลยีมัลติคอร์

ปัญหาที่ท้าทายโปรแกรมเมอร์ในโลกมัลติคอร์คือ

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

สอง เครื่องมือพัฒนาซอฟต์แวร์ที่ใช้กันยังไม่มีประสิทธิภาพเพียงพอในการหาจุดผิดพลาดในโปรแกรมแบบมัลติเทรด การพัฒนาโปรแกรมแบบมัลติเทรดมีความซับซ้อนในกรณีที่มีการใช้ข้อมูลในหน่วยความจำร่วมกันจะต้องล็อคตัวแปรนั้นให้ทีการแก้ไขได้โดยเทรดเดียว มิฉนั้นแล้วจะเกิดการทำงานที่ผิดพลาดเรียกว่า Race Condition หากปราศจากเครื่องมือพัฒนาที่ทรงประสิทธิภาพ โปรแกรมเมอร์ต้องพึ่งสัญชาตญาณและความคิดที่เป็นระบบสูงมากจึงจะพัฒนาโปรแกรมที่เร็วและเสถียรได้ ตอนนี้บริษัททั่วโลก เช่น อินเทล และ ไมโครซอฟต์ กำลังเริ่มสนใจอย่างจริงจังในการพัฒนาซอฟต์แวร์ที่ช่วยตรวจจับความผิดพลาดในการเขียนโปรแกรมแบบมัลติคอร์เพื่อให้การพัฒนาเกิดได้เร็วขึ้น ไมโครซอฟต์เริ่มพัฒนาให้ Visual Studio รุ่นใหม่ๆ ทำงานแบบขนาน ในขณะที่อินเทลก็ปรับเครื่องมือทางซอฟต์แวร์ เช่น Intel Parallel Studio ให้ช่วยเร่งการพัฒนาได้ดีขึ้น

สุดท้ายเราต้องไม่ลืมว่าคอมพิวเตอร์แบบลำดับปกตินั้นหมดไปแล้ว นับแต่นี้คอมพิวเตอร์ใหม่ๆ ทุกเครื่องเป็นคอมพิวเตอร์ที่ซีพียูทำงานแบบขนานหมด ถ้าไม่เร่งพัฒนาขีดความสามารถของอุตสาหกรรมซอฟต์แวร์ไทยแล้ว เราก็จะสร้างได้แต่ซอฟต์แวร์ที่ทำงานช้ากว่าคนอื่นทั่วโลก

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

ข้อมูลเพิ่มเติม

Blognone Jobs Premium