เป็นสมการง่ายๆ ที่ว่าโปรแกรมที่มี 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 ประเภทดังนี้
แหล่งข่าวได้ทิ้งท้ายไว้ว่า หากเครื่องมือพัฒนาโปรแกรมแบบขนานสามารถตัดภาระของการควบคุม thread ออกไปได้ อนาคตตลาดของโปรเซสเซอร์ Multi-core คงเบ่งบานมากกว่านี้
ที่มา - builderau จากแหล่งข่าวมีวิดีโอคลิปบทสัมภาษณ์ Sun และ Microsoft ถึงการพัฒนาเทคโนโลยีจาวาและ .NET บน Multi-core
Comments
อยากทราบว่า AMD ได้ทำการพัฒนาเฟรมเวิร์คสำหรับพัฒนาโปรแกรมสำหรับ สำหรับ Multi-core หรือ Many-core ไหมครับ?
ที่เป็น framework ของ AMD ผมไม่ทราบน่ะครับ
แต่เท่าที่ผมทราบแน่ๆคือ AMD เป็นพาร์ตเนอร์กับ PGI (เจ้าพ่อ compiler ด้าน HPC) ลองไปดูรายละเอียดได้ที่ http://www.pgroup.com มันมีทั้ง compiler และ Debugger (PGDBG) และก็ส่วนทำ analyzer+tuning ชื่อ Profiler (PGPROF) ใช้กับ OpenMP และก็ MPI ได้ครับ
Sivadon Chaisiri (JavaBoom)
http://javaboom.wordpress.com
My Blog
น่าสนใจครับ
ไม่ค่อยรู้เรื่องงานด้านนี้ แต่อยากรู้ว่าถ้า CPU แบบ Heterogenous core อย่าง Fusion ออกมานี่ ความยุ่งยากในการเขียนโปรแกรมจะยากขึ้นไหมครับ? เพราะว่ามีทั้งระบบประมวลผลแบบ series และ parallel อยู่ด้วยกัน
ตอบแบบวิเคราห์ด้วยประสบการณ์ส่วนตัวครับ ยากไม่ยากอยู่ที่ SDK เป็นสำคัญครับ แต่โดยความคิดเห็นส่วนตัวเท่าที่เคยใช้ SDK/Framework สำหรับ Multicore (เช่น Cell SDK) ส่วนใหญ่ยังใช้งานยากสำหรับผู้ใช้เบื้องต้นอยู่ครับ โดยเฉพาะยังไม่มีพื้นด้าน parallel
*** ข้อความต่อไปนี้จะอ่านหรือไม่ก็ได้ พอดีคำถามคุณเกี่ยวข้องกับสิ่งที่ผมเพิ่งฟังมาเอง ***
ผมเพิ่งเข้าร่วมโครงการที่เขาวิจัยด้าน heterogeneous multicore เมื่อสัปดาห์ที่ผ่านมานี่เองครับ เขาไม่ได้ระบุแค่ AMD Fusion เท่านั้น แต่เขาพูดรวมๆถึง Processor ที่เป็นแบบ Fusion คือมีหลาย core และมีความสามารถหลายแบบบน package เดียวกัน
ผมฟังรู้เรื่องบ้างไม่รู้เรื่องบ้างนะครับ ภาษาอังกฤษแบบวิชาการและศัพท์แสงมากๆก็เล่นผมงงได้ คนบรรยายชื่อ Dr.Rick Goh Siow Mong ของ iHPC ที่สิงคโปร์ เขาพูดถึงแง่ scheduling โดยการที่โปรแกรมเมอร์ต้องแบ่งโปรแกรมเป็น subtask (เช่น function) จากนั้น scheduler จะตัดสินใจว่าจะนำ subtask ไหน map เข้ากับ Core ไหน (เช่น เป็น Computing core หรือ GPU Core เป็นต้น) จากนั้นก็รันอัลกอเพื่อเลือก Core ID และเลือกช่วงเวลาที่จะเอา subtask เข้าไปรันครับ จริงๆเขาอธิบายละเอียดกว่านี้ครับ อันนี้เป็น concept คร่าวๆ และสิ่งที่ต้องพึ่งพาที่สุดคือ SDK / API ที่ต้องออกแบบมาให้โปรแกรมเมอร์ระบุ subtask ของโปรแกรมว่าเน้น Computing / Graphics / Data รวมไปถึงฟังก์ชันอื่นๆเช่น function สำหรับสร้าง shared memory เพื่อติดต่อสื่อสารหรือแชร์ตัวแปรระหว่าง core และฟังก์ชันทีช่วยประสานงานระหว่าง subtask หรือ synchronization ซึ่งเป็นปัญหาชวนปวดหัวหากไม่มี framework และการออกแบบ logic ดีๆ ครับ
จากนั้นคือขั้นตอน Scheduling มันมี 2 แนวทาง คือ static (จัดการโดย compiler) และ dynamic (จัดการตอนรันไทม์) และนี่คือความยากต่อไปของงานวิจัย
Sivadon Chaisiri (JavaBoom)
http://javaboom.wordpress.com
My Blog