เดวิด เคิร์ค (David Kirk) หัวหน้านักวิทยาศาสตร์ของ NVIDIA Corporation บริษัทผู้ผลิตหน่วยประมวลผลกราฟฟิกส์รายใหญ่ได้กล่าวว่า "การประมวลผลแบบขนานกำลังมีบทบาทสำคัญยิ่งในยุคนี้" โดยโปรเซสเซอร์ประเภท GPU และ multi-core เป็นเทคโนโลยีที่ต้องการการพัฒนาโปรแกรมให้สามารถประมวลผลแบบขนาน แม้ว่าเราจะสามารถเป็นเจ้าของคอมพิวเตอร์แบบ multi-core ได้แล้วก็ตามที แต่โปรแกรมหลายตัวที่ถูกพัฒนาขึ้นมายังไม่สามารถใช้สมรรถนะจาก multi-core ได้เต็มที่เนื่องจากโปรแกรมยังขาดความสามารถในการทำงานแบบขนานนั่นเอง
เคิร์คได้เล่าว่าหากเรามองย้อนไปเมื่อ 20 ถึง 30 ปีก่อน นักพัฒนาซอฟต์แวร์ไม่มีความจำเป็นต้องศึกษาวิธีการพัฒนาโปรแกรมแบบขนานเพราะในสมัยนั้นเราใช้ความสามารถของความเร็วสัญญาณนาฬิกาของโปรเซสเซอร์ที่สูงขึ้นเรื่อยๆ แต่ปัจจุบันนี้ ผู้ผลิตโปรเซสเซอร์ต่างมุ่งเน้นการออกแบบโปรเซสเซอร์multi-core ซึ่งการประมวลผลแบบขนานกลายเป็นสมมติฐานเบื้องต้นของการออกแบบซอฟต์แวร์ไปด้วย เคิร์กจึงสรุปว่า ถึงเวลาแล้วที่เราจะต้องให้การศึกษาแก่นักพัฒนาโปรแกรมให้เข้าใจหลักการพัฒนาโปรแกรมเพื่อการประมวลผลแบบขนานได้
ที่มา - Nikkei Electronics Asia รายละเอียดของข่าวยาวและก็น่าสนใจมาก
Comments
ถึงยุคที่การประมวลผลแบบขนานเป็น "ส่ิง" จำเป็น
ถึงยุคที่การประมวลผลแบบขนานเป็น "สิ่ง" จำเป็น
ความสามารถของความเร็ว "สัญญา" นาฬิกา
ความสามารถของความเร็ว "สัญญาณ" นาฬิกา
:)
เว็บพจนานุกรม แปลภาษาจีน-ไทย ไทย-จีน
http://www.zhongtai.org
~ HudchewMan's Station & @HudchewMan~
ขอบคุณครับ รีบพิมพ์ไปหน่อย
Sivadon Chaisiri (JavaBoom) http://javaboom.wordpress.com
My Blog
ช่วงนี้ผมกำลังศึกษาเรื่องนี้อยู่พอดีครับ หากให้ผมประเมิน ผมคิดว่าตอนนี้ทั้ง GPU และ multi-cores ยังไม่พร้อมทั้งคู้ครับ คงต้องรอไปสักพักก่อน
เท่าที่ทดสอบ GPU มีปัญหาสามอย่างคือ
1 การส่งข้อมูลไปมาระหว่าง CPU และ GPU บางครั้งการส่งข้อมูลใช้เวลาเยอะกว่าการะประมวลผลด้วยซ้ำ
2 คำนวนแบบ recursive ไม่ได้ เช่น y[n] =x[n]+y[n-1]
3 ตอนนี้มีเพียง CUDA เท่านั้นที่ถูกใช้ในการคำนวนแบบ GPU แต่ CUDA มันมีปัญหากับตัวแปรที่เป็น double precision พอสมควร
ซึ่งปัญหาที่ว่ามาไม่ใช่ปัญหาใหญ่ในงานพวก image processing แต่งานอื่น ๆ อย่างน้อยก็งานที่ผมทำอยู่ ปัญหาที่ว่ามา ทำให้การใช้ GPU ไม่เร็วอย่างที่คิด
ส่วน multi-cores นั้น เน้นการทำงานที่เป็น multi-processing หรือ multi-threading มากกว่า มันไม่ได้คำนวนแบบ vector แบบ GPU
BioLawCom.De
เห็นด้วยครับ
Sivadon Chaisiri (JavaBoom)
http://javaboom.wordpress.com
My Blog
ผมว่ายังไง Compiler ต้องฉลาดพอด้วยอ่ะ
P1 : a=1
P2 : a+c
P3 : c=1
ยังไง P3 ก็ต้องรอ P2 เสร็จล่ะครับ
CMDEVHUB
เขียนเอามันส์ ลองเข้าไปดูความมันส์ได้ครับ
ครับ อีกวิธีหนึ่งของการประมวลผลแบบขนานคือพึ่ง compiler ที่ฉลาดครับ เช่นยัดเยียดให้เกิดการประมวลผลแบบขนานตั้งแต่ระดับคำสั่งหรือ Instruction Level Parallelism (ILP) สำหรับระดับ circuit หรือ processor เองก็ทำได้อย่างที่คุณ bow_der_kleine อ้างถึง vector processing รวมไปถึง SIMD
Sivadon Chaisiri (JavaBoom)
http://javaboom.wordpress.com
My Blog
บางที ข้อจำกัดอยู่ที่วิธีการคิดของมนุษย์ทั่วๆไป
ผมว่าคนเราคิดแบบเชิงเส้น จึงไม่น่าแปลกใจที่ภาษาโปรแกรมมิ่ง จะได้ออกมาอย่างนั้น
อย่าลืมนะครับ ถ้ามันยากเกินไป ถึงมนุษย์จะเขียนขึ้นมาได้ แต่มนุษย์เองก็จะสามารถไม่แม้แต่จะดีบักมัน
ใช่ครับ การดีบั๊ก parallel app มันยากมากๆ ผมเลยอยากทราบว่า Intel Parallel Studio ในส่วนของ Parallel Inspector มันทำได้เยี่ยมแค่ไหน มองโลกแง่ดีผมว่ามันต้องมีจุดเริ่มต้นของยุคสมัยบ้างแหละครับ อย่างน้อยที่สุดก็เริ่มจาก data parallel หรือ embarassingly parallel ก็ยังดีครับ แฮๆๆ :)
Sivadon Chaisiri (JavaBoom)
http://javaboom.wordpress.com
My Blog
+1 กับความเห็นนี้ครับ
ผมจำได้สมัยเรียนที่ภาคพิเศษที่ ม.บูรพา ช่วงปี 44-45
อ.ภุชงค์ไปบรรยาย แล้วก็มีประโยคเด็ดว่า "dubuging pararell program is hell"
ยังฮาไม่เลิก ถ้าอ่านเจอ กราบสวัสดีด้วยครับ :)
Rerng®IT
ขั้นเทพคุยกานผมไม่รู้เรื่องอะ ขออ่านผ่านตาแล้วกันครับ
การประมวลผลแบบขนาน มันน่าที่จะเป็นหน้าที่ของ OS. หน้าที่ของโปรแกรมเมอร์ ควรจะมีหน้าที่เพียงออกแบบ และกำหนด logic การทำงานแค่นั้นนะครับ
เห็นด้วยครับว่า ถ้า OS ทำให้ได้ก็คงเป็นเรื่องดีมากๆ ถือว่าเป็นงานวิจัยที่ยากมากๆในฟิลด์ HPC เลยแหละครับที่จะทำให้ parallelism ถูกซ่อนไปจากโปรแกรมเมอร์ให้มากที่สุดหรือการแปลงโปรแกรมแบบ sequential ให้เป็น parallel โดยอัตโนมัติ มันเป็นศาสตร์ AI แฝงมาด้วยน่ะครับ เพราะ OS จะรู้ได้อย่างไรว่าโปรแกรม single thread ที่กำลังจะรันต้องถูกแบ่งเป็นกี่ thread และแต่ละ thread จะพูดคุยกันอย่างไร
ตอนนี้ทำได้แค่ระดับ ILP - VLWI แต่ก็พึ่งพา Processor และ Compiler เป็นหลักครับ
จะเห็นได้ว่า Intel พยายามส่งเสริมให้โปรแกรมเมอร์หันมาให้ความสำคัญกับการเขียนโปแกรมแบบแบ่ง thread หรือ concurrency มากขึ้น อย่างเว็บ go-parallel.com
จากไอเดียของคุณเป็นเรื่องที่ดีมากๆ มีงานวิจัยบางงานใช้หลักการ Workflow เพื่อให้โปรแกรมเมอร์หรือ SA กำหนด logic ของโปรแกรมหรือแม้แต่ใช้ UML เข้ามาออกแบบร่วม และจากนั้นก็ให้ compiler แปลงโค้ดพร้อมกับ workflow ให้เป็นโปรแกรมแบบขนานครับ
Sivadon Chaisiri (JavaBoom)
http://javaboom.wordpress.com
My Blog
มีหลายๆ อย่างที่ต้านการเปลี่ยนแปลงจากฝั่งผู้ใช้เหมือนกันนะครับ
ที่ผมเคยเจอก็พวก Lazy Compute ที่อธิบายผู้ใช้ค่อนข้างยากว่าตัวเลขสถิติบางตัวในระบบอาจจะช้ากว่าข้อมูลจริงไปครึ่งวินาที คำถามที่เจอมักจะเป็นประเภทว่า "ทำให้มันพร้อมกันไม่ได้เหรอ?" และสุดท้ายเงื่อนไขพวกนี้กลับไปทำลาย parallelism ของตัวโปรแกรมเอง
LewCPE
lewcpe.com, @wasonliw
เห็นด้วยอย่างยิ่งครับ มันเป็น paradigm shift ทำให้คนยากจะเปลี่ยนใจครับ พอๆกับสะใภ้ใหม่จำใจต้องอยู่กับแม่ย่า ดังนั้น นักพัฒนา/อาจารย์/นักวิจัยจึงต้องทำงานหนักครับ มันจะมี 3 สายก็คือ 1. การให้การศึกษาให้คนเข้าใจวิธีเขียนโปรแกรมแบบขนาน (ยากในเชิงปฎิบัติ) 2. พัฒนาเฟรมเวิร์คที่สนับสนุนการเขียนโปรแกรมแบบขนานให้ง่าย (ลดความยากลง แต่ยังต้องเข้าใจหลักการบางอย่างอยู่) ท้ายที่สุดต้องพึ่งข้อ 1 อยู่ดี 3. พัฒนาซอฟต์แวร์/ฮาร์ดแวร์ ให้แปลงโปรแกรมโดยอัตโนมัติเพื่อใช้ความสามารถของโปรเซสเซอร์ได้เต็มที่ เช่น แปลงโปรแกรมแบบ sequential ให้เป็น parallel โดยอัตโนมัติ เป็นต้น (โปรแกรมเมอร์สบาย แต่นักวิจัยทำงานหนัก)
ผมเชื่อในโลกเรายังมีโดเรมอนครับ (หมายถึง มีวิวัฒนาการที่ก้าวหน้าขึ้นไป) ดังนั้น ทุกอย่างเป็นไปได้แต่ต้องใช้เวลา
Sivadon Chaisiri (JavaBoom) http://javaboom.wordpress.com
My Blog