เมื่อ Multi-core เบ่งบาน

by javaboom
23 August 2008 - 15:35

เป็นสมการง่ายๆ ที่ว่าโปรแกรมที่มี thread เดียว (single thread application) เมื่อนำไปรันบนโปรเซสเซอร์แบบ multi-core แล้วจะให้ผลลัพธ์ไม่ต่างไปจากนำโปรแกรมไปรันบนโปรเซสเซอร์ที่มี core เดียว หากอยากใช้สมรรถนะของ multi-core ให้เต็มที่ เราจำต้องออกแบบและพัฒนาโปรแกรมนี้ให้ประมวลผลแบบขนานตามไปด้วย อย่างเช่นการพัฒนาโปรแกรมให้มีมากกว่า 1 thread และให้แต่ละ thread ทำงานแยกจากกันอยู่บน core คนละหน่วย

อย่างไรก็ตาม การพัฒนาโปรแกรมแบบขนานไม่ใช่เรื่องง่าย โดยเฉพาะอย่ายิ่ง หากโปรแกรมถูกแบ่งการทำงานออกเป็นหลายๆ thread อย่างเช่นมีหลายสิบหรือหลายร้อย thread เพื่อรันบนโปรเซสเซอร์ many-core เป็นต้น เมื่อมีจำนวน thread เยอะขึ้นแล้ว การควบคุมและประสานการทำงานระหว่าง thread จนถึงขั้นตอนการดีบั๊กโปรแกรมย่อมมีความยุ่งยากตามมาด้วย และเพื่อลดความยุ่งยากดังกล่าว นักพัฒนาส่วนหนึ่งจึงอาศัยเครื่องมือหรือเฟรมเวิร์คสำหรับพัฒนาโปรแกรม อย่างเช่น OpenMP และ Intel Threading Building Blocks รวมไปถึง Intel Parallel Studio ที่เพิ่งเสนอข่าวไป

อาจจะมีคนตั้งคำถามว่า "Multi-core มีบทบาทสำคัญในงานประเภทไหนบ้าง ?" แหล่งข่าว buildera ได้ยกตัวอย่างผ่านโปรแกรม 3 ประเภทดังนี้

  1. โปรแกรมเซิร์ฟเวอร์ที่ต้องรองรับโปรเซสจำนวนมาก โปรเซสเหล่านี้เกิดจากการติดต่อของโปรแกรมไคลเอนต์​ อย่างเช่น โปรเซส HTTP และโปรเซสที่เข้าถึงฐานข้อมูล เป็นต้น multi-core สามารถรันโปรเซสได้พร้อมกันมากยิ่งขึ้นและทำให้ตอบสนองผลลัพธ์ไปให้โปรแกรมไคลเอนต์ได้เร็วขึ้นด้วย (ในศาสตร์ทางด้าน High Performance Computing เรียกว่าเป็นการเพิ่มผลลัพธ์หรือ throughput ของการประมวลผล)
  2. โปรแกรมจำลองระบบเสมือน (Virtualization) อย่างการรัน Guest OS (หรือ Virtual Machine) บน Host OS (หรือคอมพิวเตอร์จริงๆ) โดย multi-core สามารถลดการแย่งทรัพยากรประมวลผลระหว่าง Host OS กับ Guest OS ได้
  3. เกม เพราะว่าโปรแกรมเกมสามารถแบ่งการทำงานออกเป็นหลายๆหน่วยได้ (เสมือนว่าแบ่งเป็นหลายๆ thread) ตัวอย่างเช่น Game Engine ที่อยู่เบื้องหลังเกม Half Life 2: Episode Two สามารถแบ่งการทำงานของเกมเป็นหน่วยๆตามจำนวน core ของโปรเซสเซอร์ได้ ซึ่งหน่วยการทำงานเหล่านี้ได้แก่ หน่วยคำนวณแสง (lighting) และหน่วยปัญญาประดิษฐ์​ (AI) เป็นต้น โดย Game Engine นี้สามารถแบ่งการประมวลผลออกจากกันได้สูงถึง 32 หน่วย นอกจากนี้แล้ว เราจะพบว่าโปรเซสเซอร์ที่ติดตั้งบนเครื่องเกมคอลโซลอย่าง PlayStation 3 (มี 8 core) และ XBOX360 (มี 3 core) นั้นเล่นบทบาทสำคัญมาก อันส่งผลให้ Game Engine ต้องสนับสนุนการทำงานแบบขนานตามไปด้วย

แหล่งข่าวได้ทิ้งท้ายไว้ว่า หากเครื่องมือพัฒนาโปรแกรมแบบขนานสามารถตัดภาระของการควบคุม thread ออกไปได้ อนาคตตลาดของโปรเซสเซอร์ Multi-core คงเบ่งบานมากกว่านี้

ที่มา - builderau จากแหล่งข่าวมีวิดีโอคลิปบทสัมภาษณ์​ Sun และ Microsoft ถึงการพัฒนาเทคโนโลยีจาวาและ .NET บน Multi-core

Blognone Jobs Premium