แนวคิดการคำนวณแบบขนาน ไม่ใช่เรื่องใหม่
ว่าไปแล้ว ก็เก่าตั้งแต่ยุคแรก ๆ ของคอมพิวเตอร์
ผมจำได้ว่า เมื่อนานมาแล้ว (สมัยยุคอรุโณทัยของแวดวง IT โน่นแน่ะ) ผมเคยไปห้องสมุด ยืมหนังสือ คู่มือการใช้ DOS ควบกับ Parallel Programing in ADA มาอ่าน
จริง ๆ แล้ว การคำนวณแบบขนาน มีมา ก่อนยุคคอมพิวเตอร์ ด้วยซ้ำ ที่เรียกว่า การแบ่งงาน นั่นไง (ลองไปดูได้ ดังตัวอย่าง ที่คุณหุยเขียนถึงเทคนิคการทำงานเป็นทีมอย่างแท้จริง)
คณิตศาสตร์ยุคโบราณที่เรียก บัญญัติไตรยางค์ ที่คนรุ่นก่อนเรียนกัน ก็กล่าวถึงเรื่องนี้
เช่น คนทั้งสังคม รับรู้กันดีว่า
ขนมหนึ่งชิ้น คนหนึ่งคน กินหมดในหนึ่งวัน
ขนมหนึ่งชิ้น คนสองคน กินหมด ในครึ่งวัน
ซึ่งกรณีศึกษาปัจจุบันที่เข้ากับยุคสมัยหน่อย ก็ต้องเป็น
เมื่อมีอุบัติเหตุ มีไทยมุงหนึ่งคน จะมีการยื่นมือช่วยเหลือหนึ่งคน
เมื่อมีอุบัติเหตุ มีไทยมุงสิบคน จะมีการยื่นมือช่วยเหลือหนึ่งในสิบคน
...(อย่าซีเรียสครับ ! ประเด็นนี้ คุณบ่าววีร์ แซวไว้ในคนมากอาสาน้อย คนน้อยอาสามาก? ผมลอกมุขมา)
ก่อนถึงยุคควอนตัมคอมพิวเตอร์ ถ้าจะทำให้เครื่องทำงานเร็ว ต้องพึ่งจิ๊กซอว์หลายตัว
จิ๊กซอว์ชิ้นแรกคือ ระบบคอมพิวเตอร์ที่เป็นพีซีต้องเข้าสู่ระบบ ขนานยิ่งยวด (massively parallelism) เพื่อไม่ให้การขับเคลื่อนเทคโนโลยีชะงักเพราะคอมพิวเตอร์ช้าไป
จตุคอร์์ (quad-core ) เป็นตัวอย่างหนึ่ง ที่แนวคิดการคำนวณแบบขนานฝังตัวมาในฮาร์ดแวร์
ถัดไป ก็เป็น 8-core (อัฏฐะคอร์; octa -core) [ขอบคุณ บ่าววีร์ สำหรับความเอื้อเฟื้อข้อมูล ว่ามีวางตลาดแล้ว]
ถัดไปอีก ก็เป็น 16-core (โสฬสคอร์; hexadeca -core) ที่รอจ่อคิว
และ 32-core (dotriaconta-core; เห็นแล้วเคล็ด-คอร์) ที่คงจะตามมา
สงสัยว่า ต่อไป คนแวดวง IT ต้องเรียนเรื่อง prefix ของ IUPAC ด้วยหรือเปล่า เอาไว้เรียกหมายเลขคอร์...
นอกเหนือจากวิธี พหุ-คอร์ ทางเลือกอื่น ๆ ก็พอมี อย่างเช่น แนวคิดเรื่อง reconfigurable computing ซึ่งใช้ฮาร์ดแวร์ที่สามารถปรับแต่ง logic gate เองในระดับผู้ใช้ เช่น Field-programmable Gate Arrays (FPGAs) ซึ่งฮาร์ดแวร์สามารถแปลงกายข้าม platform กันได้ ซึ่งประมาณกันว่า น่าจะเร่งความเร็วได้ตั้งแต่ 10-100 เท่า เพราะสามารถจูนให้เข้ากับ algorithm ที่ใช้ได้ และยังสามารถแปลงกายให้กลายเป็น processor แบบขนานได้ (อย่างน้อยก็ในทางทฤษฎี...ถ้าสั่งเป็น)
จิ๊กซอว์ชิ้นถัดมา ต้องมีระบบเครือข่าย ระบบปฎิบัติการ compiler & interpreter ที่รองรับเรื่อง massively parallelism
ที่ผ่านมา มี เอกะ-คอร์ ทวิ-คอร์ จตุ-คอร์ ยังถือว่าเห็นไม่ชัดเท่าไหร่ อาจมองว่า มีตัวคำนวณหลายตัว เพื่อใช้จัดการฮาร์ดแวร์ให้เร็วทันใจเท่านั้น แต่ตัวคำนวณหลัก ยังเป็นตัวเดียว
สถานการณ์ เป็นดังภาพในบล็อก เทคนิคการทำงานเป็นทีมอย่างแท้จริง
แต่เมื่อไหร่ มี อัฏฐะคอร์ สิ่งที่เกิดขึ้นก็คือ จะมีตัวคำนวณบางตัวอู้งานได้ ไม่มีใครเข้าถึงตัวมันได้ เพราะไม่มีการสั่งงานหลุดไปถึงด่านนั้น
ถึงตอนนั้น การประสานงานฮาร์ดแวร์คงไม่ใช่เรื่องใหญ่ ใช้ตัวคำนวณไม่กี่ตัวก็รับมือได้หมดแล้ว แต่เรื่องใหญ่จะเป็นว่า จะดึงสมรรถนะที่หลับไหลของตัวคำนวณส่วนเกินมาใช้อย่างไร
ถึงตอนนั้น คำถามเร่งด่วนแบบไฟลนก้น คงเป็นว่า เอ๊ะ ใครใช้ระบบขนานคล่องมั่ง ? เพราะไม่งั้น 8-core กับ 4-core จะไม่ต่างกัน เพราะ software ดึงพวกคอร์ตัวหลัง ๆ มาทำงานไม่ได้
เพราะเมื่อก่อน คนทำคล่อง ก็คือคนที่จับเรื่อง distributed network หรือ supercomputer ซึ่งคงไกลตัวคนทั่วไปสักหน่อย แต่ก็มีระดับหนึ่ง
แต่วันไหน ระบบนี้มาตั้งตรงหน้า บนโต๊ะทำงานของเรา คนที่ต้องใช้งานคำนวณมหาศาล คงเหมือนลูกหมาฟันไม่ขึ้น มีของกินอร่อยแต่แข็งโป๊กวางตรงหน้า คงได้แต่ดูตาปริบ ๆ แล้ว
ระบบพอมีิ แม้จะไม่คุ้นหู และคนทำเป็น ก็มีอยู่ แต่คงมีไม่มาก คนที่คล่อง คงหายาก
ตรงนี้แหละครับ ที่ผมมองว่าคอขวดในแวดวง IT ไม่ได้เกิดปัญหาแต่กับไทย แต่ทั้งโลก คือระบบคิดที่เกี่ยวข้องกับเรื่อง parallel programming โตไม่ทัน parallel hardware
มองให้ดี ๆ นี่เป็นช่องว่างโอกาสการเติบโตของแวดวงวิชาการที่บ่มเพาะ IT ของไทย ที่จะเตรียมรับมือคลื่น massively parallel hardware ที่จะมาในรูปคอมพิวเตอร์สามัญประจำบ้านในอีกไม่กี่ปีนี้
จิ๊กซอว์ชิ้นที่สาม คือ algorithm ที่รองรับ parallel ได้ดี ซึ่งผมมองว่า ส่วนนี้ พอมีคนทำอยู่แล้ว แม้จะโดยไม่ค่อยรู้ตัวก็ตาม (อย่างเช่น ใช้ Genetic algorithm นี่ก็ใช่)
ส่วนที่ขาดตอนนี้คือส่วนที่สองครับ
ใครเตรียมตัวได้ก่อน ก็เท่ากับยึดทำเลยุทธศาสตร์ของวงการได้ อย่างน้อยก็จนกว่าควอนตัวคอมพิวเตอร์เกิดเต็มตัว
คำถามคือ เรากำลังอยู่ที่ไหนในขณะนี้ ?
8-core ของ Intel มาแล้วนะครับ Macpro[1] ใช้แล้ว. อีกตัวนึงคือ Web server ของ Sun ใช้ UltraSparc T1 ก็ 8-core. ผมไม่แน่ว่า Cell นับเป็น 8-core ได้หรือเปล่า. แต่ก็คงใกล้เคียง เพราะมี SPE 8 ชุด.แต่ถ้านับ PPE + SPE อาจจะเรียกได้ว่า Cell มี 9 Core?
เราต้องมาคิดเรื่อง parallel เยอะขึ้นส่วนหนึ่งอาจจะเพราะเราเร่ง clock ของ CPU ไปมากกว่านี้ไม่ไหวแล้ว? ข่าวว่า Power6 จะออก 4.7 GHz. ถ้าจำไม่ผิด.
ผมสงสัยอยู่ว่าขาดจริงหรือเปล่า? มีบริษัทไหนในประเทศไทยต้องการจ้างพนักงานไปทำ parallel programming บ้าง (หมายถึงว่าใช้หลาย core นะครับ. ไม่ใช่คนเดียวทำหลาย project พร้อมกัน :-P)
[1] http://www.apple.com/macpro/
[2] http://en.wikipedia.org/wiki/UltraSPARC_T1
[3] http://en.wikipedia.org/wiki/Cell_microprocessor
ประเด็นที่คุณบ่าววีร์ยกมา ผมเห็นด้วยในส่วน มีบริษัทไหนในประเทศไทยต้องการจ้างพนักงานไปทำ parallel programming บ้าง แต่ประเด็นเรื่องขาดจริงหรือเปล่า ก็คงขึ้นกับว่า ใครใช้
เพราะถ้าคิดว่า เอาไว้ใช้เป็นพิมพ์ดีด กดเครื่องคิดเลข ท่องเน็ต ถ้าเป็นตอนนี้ คงไม่ขาด และอีกสิบปีข้างหน้า ก็คงไม่ขาด
งานทั่วไปหลายอย่าง ก็อาจไม่ขาด ถ้ายังใช้แบบเดิม ๆ เช่น ระบบสต็อก(คลังสินค้า) ถ้าแค่ใช้คอมพิวเตอร์เป็นเทอร์มินอลกรอกข้อมูล นี่ก็คงไม่ขาด แต่ถ้าคิดจะใช้ data mining เมื่อไหร่ แบบนั้น น่าจะขาด แต่รุนแรงไหม ไม่ทราบครับ
แต่จะมีงานรูปแบบเฉพาะ ที่ไม่ใช่งานหลุดโลกด้วย ที่ผมเชื่อว่า มีคนรอใช้ ซึ่งตอนนี้ คนรอใช้เขาไม่คิดขยับมาก เพราะไม่มีงบเยอะ ไม่กล้ายุ่งกับของแพง แต่อีกไม่ช้า ความต้องการจากกลุ่มนี้ จะมีมากขึ้น ใครตอบสนองเขาได้ เขาก็คงเฮไปหา
ผมยกตัวอย่างสักเรื่อง เอาที่ใกล้ตัว เป็นโจทย์ที่ผมเองก็รอมานาน เพราะเครื่องช้าไป
กรณีของการเก็บฐานข้อมูลที่มีชื่อคนอยู่ เป็นหลักพันคนขึ้นไป ปัญหาจุกจิกอย่างหนึ่ง คือการตรวจสอบความซ้ำซ้อนของตัวตน ที่มีอยู่ก่อนในฐาน เพราะพิมพ์ต่างกันหน่อยนึงก็กลายเป็นอื่นแล้ว แบบนี้ต้องใช้ fuzzy check ว่ามีที่ record คล้ายกันหรือเปล่า ซึ่งตอนนี้ ต่อให้ทำได้ แต่คงไม่มีใครอยากทำเท่าไหร่ เพราะเสียเวลารอคำนวณนานนนนน..มาก โดยเฉพาะถ้าต้องจัดการรวดเดียวทั้งฐานข้อมูล แต่เมื่อไหร่มันเร็วพอ คนที่ตอนนี้ไม่อยากทำ ก็อาจทำได้บ่อย ๆ ได้ทุกวัน
ตรงนี้คิดว่า คงต้องดูกันต่อไป ผมแหย่เรื่องนี้ เพื่อเป็นโจทย์ที่ให้คนที่เกี่ยวข้องกับวงการถามตัวเองดู ถ้าเห็นว่าไม่จริง ก็จบ ถ้าเห็นว่ามีส่วนจริง ก็ต้องลองคิดต่อ เพราะผมเป็นแค่ผู้ใช้ธรรมดา มองจากข้างนอกเข้ามา อาจเห็นไม่ค่อยเหมือนคนที่อยู่ในแวดวงเท่าไหร่..