ถึงยุคที่การประมวลผลแบบขนานเป็นสิ่งจำเป็น

tags:

เดวิด เคิร์ค (David Kirk) หัวหน้านักวิทยาศาสตร์ของ NVIDIA Corporation บริษัทผู้ผลิตหน่วยประมวลผลกราฟฟิกส์รายใหญ่ได้กล่าวว่า "การประมวลผลแบบขนานกำลังมีบทบาทสำคัญยิ่งในยุคนี้" โดยโปรเซสเซอร์ประเภท GPU และ multi-core เป็นเทคโนโลยีที่ต้องการการพัฒนาโปรแกรมให้สามารถประมวลผลแบบขนาน แม้ว่าเราจะสามารถเป็นเจ้าของคอมพิวเตอร์แบบ multi-core ได้แล้วก็ตามที แต่โปรแกรมหลายตัวที่ถูกพัฒนาขึ้นมายังไม่สามารถใช้สมรรถนะจาก multi-core ได้เต็มที่เนื่องจากโปรแกรมยังขาดความสามารถในการทำงานแบบขนานนั่นเอง

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

ที่มา - Nikkei Electronics Asia รายละเอียดของข่าวยาวและก็น่าสนใจมาก

HudchewMan's picture

ถึงยุคที่การประมวลผลแบบขนานเป็น "ส่ิง" จำเป็น
ถึงยุคที่การประมวลผลแบบขนานเป็น "สิ่ง" จำเป็น

ความสามารถของความเร็ว "สัญญา" นาฬิกา
ความสามารถของความเร็ว "สัญญาณ" นาฬิกา

:)


เว็บพจนานุกรม แปลภาษาจีน-ไทย ไทย-จีน

http://www.zhongtai.org

javaboom's picture

ขอบคุณครับ รีบพิมพ์ไปหน่อย

Sivadon Chaisiri (JavaBoom)
http://javaboom.wordpress.com

bow_der_kleine's picture

ช่วงนี้ผมกำลังศึกษาเรื่องนี้อยู่พอดีครับ หากให้ผมประเมิน ผมคิดว่าตอนนี้ทั้ง 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

javaboom's picture

เห็นด้วยครับ

Sivadon Chaisiri (JavaBoom)
http://javaboom.wordpress.com

shikima's picture

ผมว่ายังไง Compiler ต้องฉลาดพอด้วยอ่ะ

P1 : a=1
P2 : a+c
P3 : c=1

ยังไง P3 ก็ต้องรอ P2 เสร็จล่ะครับ


CMDEVHUB

เขียนเอามันส์ ลองเข้าไปดูความมันส์ได้ครับ

javaboom's picture

ครับ อีกวิธีหนึ่งของการประมวลผลแบบขนานคือพึ่ง compiler ที่ฉลาดครับ เช่นยัดเยียดให้เกิดการประมวลผลแบบขนานตั้งแต่ระดับคำสั่งหรือ Instruction Level Parallelism (ILP) สำหรับระดับ circuit หรือ processor เองก็ทำได้อย่างที่คุณ bow_der_kleine อ้างถึง vector processing รวมไปถึง SIMD

Sivadon Chaisiri (JavaBoom)
http://javaboom.wordpress.com

tekkasit's picture

บางที ข้อจำกัดอยู่ที่วิธีการคิดของมนุษย์ทั่วๆไป
ผมว่าคนเราคิดแบบเชิงเส้น จึงไม่น่าแปลกใจที่ภาษาโปรแกรมมิ่ง จะได้ออกมาอย่างนั้น

อย่าลืมนะครับ ถ้ามันยากเกินไป ถึงมนุษย์จะเขียนขึ้นมาได้ แต่มนุษย์เองก็จะสามารถไม่แม้แต่จะดีบักมัน

javaboom's picture

ใช่ครับ การดีบั๊ก parallel app มันยากมากๆ ผมเลยอยากทราบว่า Intel Parallel Studio ในส่วนของ Parallel Inspector มันทำได้เยี่ยมแค่ไหน มองโลกแง่ดีผมว่ามันต้องมีจุดเริ่มต้นของยุคสมัยบ้างแหละครับ อย่างน้อยที่สุดก็เริ่มจาก data parallel หรือ embarassingly parallel ก็ยังดีครับ แฮๆๆ :)

Sivadon Chaisiri (JavaBoom)
http://javaboom.wordpress.com

giver's picture

+1 กับความเห็นนี้ครับ

rerngrit's picture

ผมจำได้สมัยเรียนที่ภาคพิเศษที่ ม.บูรพา ช่วงปี 44-45
อ.ภุชงค์ไปบรรยาย แล้วก็มีประโยคเด็ดว่า "dubuging pararell program is hell"
ยังฮาไม่เลิก ถ้าอ่านเจอ กราบสวัสดีด้วยครับ :)


Rerng®IT

runnary's picture

ขั้นเทพคุยกานผมไม่รู้เรื่องอะ ขออ่านผ่านตาแล้วกันครับ

invisibleMind's picture

การประมวลผลแบบขนาน มันน่าที่จะเป็นหน้าที่ของ OS. หน้าที่ของโปรแกรมเมอร์ ควรจะมีหน้าที่เพียงออกแบบ และกำหนด logic การทำงานแค่นั้นนะครับ

javaboom's picture

เห็นด้วยครับว่า ถ้า 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

lew's picture

มีหลายๆ อย่างที่ต้านการเปลี่ยนแปลงจากฝั่งผู้ใช้เหมือนกันนะครับ

ที่ผมเคยเจอก็พวก Lazy Compute ที่อธิบายผู้ใช้ค่อนข้างยากว่าตัวเลขสถิติบางตัวในระบบอาจจะช้ากว่าข้อมูลจริงไปครึ่งวินาที คำถามที่เจอมักจะเป็นประเภทว่า "ทำให้มันพร้อมกันไม่ได้เหรอ?" และสุดท้ายเงื่อนไขพวกนี้กลับไปทำลาย parallelism ของตัวโปรแกรมเอง


LewCPE

javaboom's picture

เห็นด้วยอย่างยิ่งครับ มันเป็น paradigm shift ทำให้คนยากจะเปลี่ยนใจครับ พอๆกับสะใภ้ใหม่จำใจต้องอยู่กับแม่ย่า ดังนั้น นักพัฒนา/อาจารย์/นักวิจัยจึงต้องทำงานหนักครับ มันจะมี 3 สายก็คือ

1. การให้การศึกษาให้คนเข้าใจวิธีเขียนโปรแกรมแบบขนาน (ยากในเชิงปฎิบัติ)

2. พัฒนาเฟรมเวิร์คที่สนับสนุนการเขียนโปรแกรมแบบขนานให้ง่าย (ลดความยากลง แต่ยังต้องเข้าใจหลักการบางอย่างอยู่) ท้ายที่สุดต้องพึ่งข้อ 1 อยู่ดี

3. พัฒนาซอฟต์แวร์/ฮาร์ดแวร์ ให้แปลงโปรแกรมโดยอัตโนมัติเพื่อใช้ความสามารถของโปรเซสเซอร์ได้เต็มที่ เช่น แปลงโปรแกรมแบบ sequential ให้เป็น parallel โดยอัตโนมัติ เป็นต้น (โปรแกรมเมอร์สบาย แต่นักวิจัยทำงานหนัก)

ผมเชื่อในโลกเรายังมีโดเรมอนครับ (หมายถึง มีวิวัฒนาการที่ก้าวหน้าขึ้นไป) ดังนั้น ทุกอย่างเป็นไปได้แต่ต้องใช้เวลา

Sivadon Chaisiri (JavaBoom)
http://javaboom.wordpress.com