Intel

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

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

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

ellevoid Tue, 07/10/2008 - 17:03

อยากกลับไปเรียนใหม่จัง
ว่าแต่มันจะมีสอนไหมเนี่ย วิชา ออกแบบอัลกอริธึมแบบขนานๆ ><

pawinpawin Tue, 07/10/2008 - 17:35

ผมว่าคงปรับลำบากทีเดียว.. เพราะคนเรามีหัวเดียว แค่คิดแทนหัวเดียวก็ปวดหัวแล้ว นี่ต้องคิดแทนสองหัวอีก อิอิ

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

เห็นด้วย

คนเดี๋ยวนี้โดยเฉพาะเด็กรุ่นใหม่ชอบทำอะไรหลาย ๆ อย่างพร้อมกัน

ทั้งเดินขึ้นรถไฟฟ้าพร้อมฟังเพลงจาก MP3 Player

ทั้งกินข้าวไป คุยโทรศัพท์ไป เขย่าขาไป

นั่งเรียนแล็ปไป ดู Hi 5 ไป (พร้อมกับอีกหลายเว็บ - ก็มีแท็ปแล้วนี่) แล้วยังออน M แถมหันไปคุยกับเพื่อนอีก (ยังไม่นับนั่งฟังอาจารย์กับโค้ดตามโจทย์แล็ปนะเนี่ย (-_-'))

เหมาะกับเทคโนโลยีสมัยหน้าจริง ๆ

นี่ผมก็พิมพ์ไป ฟังข่าวสลายม็อบทางโทรทัศน์ไปอยู่เหมือนกัน (^___^)

putchonguth Wed, 08/10/2008 - 00:51

In reply to by xcession

อือม ก็จริงครับ แต่ Windows 3.1 ทำงานแบบ cooperative scheduling คือ ทุกโปรแกรมต้องร่วมมือในการทำงาน เมื่อโปรแกรมไหนทำงานเสร็จต้องคืนการควบคุมให้ระบบปฏิบัติการเอง ถ้าพลาดก็จะแฮงค์ได้ แต่ Windows รุ่นใหม่ๆใช้ Preemptive scheduling ซึ่งใช้ Hardware Timer Interrupt ทำให้ระบบปฏิบัติการแย่งโปรเซสเซอร์คืนได้ ระบบใหม่ๆนี้จึงทำ multitasking ได้เต็มรูปแบบกว่า Windows 3.1 ซึ่งเป็น multitasking แบบไม่สมบูรณ์ครับ

anu Tue, 07/10/2008 - 21:44

เห็นเค้าเขียนกัน many-core หรือ manycore นะครับ
ถ้าแยกกันก็ควรจะเป็น Many Cores

ให้ความหมายถึง Multi-Core ที่มีจำนวนมากๆ (หลายสิบหรือเป็นร้อย) เห็นบอกว่าปัจจุบันก็เริ่มต้นเรียก Manycore ที่ 16 Core ในเครื่องเดียว

javaboom Tue, 07/10/2008 - 23:55

การเขียนโปรแกรมแบบขนานแบบหนึ่งที่เริ่มต้นได้ไม่ยาก คือ Multithreading อย่างที่อาจารย์ภุชงค์กล่าวไว้ในบทความ

มีมหาลัยต่างประเทศสอนวิชา Concurrency ไปแล้วครับ แต่ (น่า) จะเป็นวิชาเลือกอยู่ ซึ่งก็เป็นวิชาว่าด้วยเรื่องการออกแบบโปรแกรมแบบ Multithreading และ Multiprocess ให้มีประสิทธิภาพ รวมถึงป้องกันปัญหาที่เกิดขึ้น เช่น Deadlock กับ Racing อย่างที่อาจารย์กล่าวไว้ในบทความ เนื้อหาที่เกี่ยวข้องกับ Concurrency มีเยอะมาก ถ้าท่านใดนึกไม่ออกว่า Concurrency เป็นอย่างไร ลองนึกวิชา OS ที่กล่าวถึง Process Synchronization ครับ ส่วนวิชา Concurrency เขาจะเอาเรื่อง Synchronization มาแบ่งเป็นหัวข้อย่อยๆมากมายครับ

สำหรับผู้เริ่มต้น ที่รู้วิธีการเขียน thread แล้ว จะศึกษาการเขียนโปรแกรม multithreading แบบง่ายๆ ลองวิธี Master-Worker หรือ Master-Slave ดูก็ได้ครับ คือ Thread หลักเป็น Master และมี thread ลูกๆเรียกว่าเป็น Worker คอยทำงานแยกจากกันเด็ดขาด ดังนั้น จะมี Master อยู่ตัวเดียว และมี Worker มากกว่า 1

ตัว Master ทำหน้าที่ประสานงานระหว่าง Worker โดยการรับผลลัพธ์จาก Worker จากนั้น Master จะทำหน้าที่รวมผลจาก Worker หรือแม้แต่ส่งผลลัพธ์จาก worker ตัวหนึ่งไปให้อีกตัวทำ ก็ตามแต่ตรรกะหรือ logic ของโปรแกรมครับ วิธีการนี้ควบคุม Concurrency หรือ Synchronization ได้ง่ายกว่าวิธีพวก Message Passing แต่ก็เสียเวลาหรือมี overhead ที่ Master แหละครับ แต่ถ้าจะเริ่มเขียนโปรแกรมแบบ Multithreading ง่ายๆ ผมชอบวิธีนี้แหละครับ พวกโปรแกรมแบบที่ thread เป็นอิสระจากกันมากๆ (independency) วิธีการนี้เหมาะมากครับ เช่น rendering โดยให้ Master ส่ง frame ของ animation จ่ายไปให้ Worker ที่มีฟังก์ชันการทำงานเหมือนกัน (คือ render) ผลลัพธ์ที่ได้ก็ส่งกลับมารวมที่ Master ครับ วิธีนี้สามารถไปประยุกต์ใช้กับ Cell SDK บน Cell Processor ได้ด้วยครับ

ถ้าผมมีเวลาว่างคงจะได้กล่าวเรื่องนี้มากขึ้นในส่วน hpc ของ blognone (ไม่แน่ใจว่าเปิดตัวเป็นทางการหรือยัง) หรือพี่ๆน้องๆท่านใดทราบวิธีนี้จะเริ่มแนะนำไปเลยก็ได้นะครับ

JavaBoom (Boom is not Java, but Java was boom)
http://javaboom.wordpress.com

Vithan Wed, 08/10/2008 - 03:18

เออ แต่ทำไมคุ้นๆว่าสมัยที่เรียนวศ.คอมอยู่ มันมี project ให้เขียน parallel processing อะไรทำนองนี้ว้าาาา จำรายละเอียดไม่ได้ คุ้นๆๆแค่ว่าเขียนเสร็จแล้วเบลอไปหลายวันอยู่

javaboom Wed, 08/10/2008 - 12:37

In reply to by Vithan

Parallel Processing / Programming เริ่มใหม่ๆก็มึนหัวและเบลอไปตามๆกันน่ะครับ ไม่ทราบว่าเฒ่าทารกในมังกรหยกผู้ฝึกวิชาแบ่งแยกประสาทจะชำนาญเรื่องนี้หรือเปล่า ^_^

บางมหาวิทยาลัยในไทยจะมีสอนวิชา Parallel Processing และ/หรือ Parallel Algorithms ในระดับปริญญาตรี แต่ (น่า) จะยังคงเป็นวิชาเลือกอยู่ครับ ส่วนในปริญญาโท/เอก มีเปิดไว้อยู่แล้วครับ แต่มีอาจารย์สอนให้ได้หรือเปล่าก็เปิดไว้ก่อนครับ

สำหรับวิชา Concurrency จะเน้นเนื้อหาไปที่ Multithreading เป็นส่วนใหญ่ และมีอีกวิชาที่ใกล้เคียงกันก็คือ Distributed Systems

JavaBoom (Boom is not Java, but Java was boom)
http://javaboom.wordpress.com

วิชาของเฒ่าทารกใช้สองมือสู้กันเองในสมองต้องเป็น มัลติเทรดครับ แต่สมองเป็นมัลติคอร์หรือเปล่าไม่แน่ใจครับ