คิดว่าหลายคนคงจะเคยผ่านหูผ่านตากับคำว่า CUDA กันมาบ้าง ไม่มากก็น้อย ซึ่งวันนี้ผมจะมาแนะนำกันครับว่า CUDA คืออะไร แล้วมันมีประโยชน์ยังไง ทำไมถึงมีหลายคนพูดถึงกันมากเหลือเกิน
เป็นที่รู้กันอยู่แล้วว่าหน่วยประมวลผล หรือว่า CPU ที่เราๆท่านๆใช้กันอยู่ทุกวันเนี่ย มันมีความเร็วมากขึ้นเรื่อยๆไปตามกฎของมัวร์ (Moore's Law) ที่กล่าวไว้ว่า "จำนวนของทรานซิสเตอร์ (Transistors) ในวงจร IC จะเพิ่มเป็นสองเท่าในทุกๆประมาณสองปี" ซึ่งก็อนุมานได้ว่าความเร็วของ CPU นั้นจะเร็วขึ้นเป็นสองเท่าในทุกๆประมาณสองปีเช่นกัน ถึงแม้ว่าปัจจุบันจำนวนทรานซิสเตอร์จะไม่เพิ่มขึ้นแล้วก็ตาม แต่ปัจจุบันก็มีเทคโนโลยี multi-core ที่ยังให้ทำความเร็วของ CPU สูงขึ้นเรื่อยๆอยู่
ทางด้านหน่วยประมวลผลกราฟิก (เรียกแบบหรูๆ) หรือว่าหน่วยประมวลผลในการ์ดจอ (เรียกแบบชาวบ้านๆ แต่ต่อไปนี้ผมขอเรียกว่า GPU นะครับ) ก็ใช้เทคโนโลยี multi-core เช่นกัน แต่ถ้าสังเกตข้อมูลจากกราฟจะพบว่า GPU เนี่ยเร็วกว่า CPU เอามากๆ แถมท่าทางมันยังฟ้องว่ายิ่งนานก็จะยิ่งเร็วกว่าขึ้นเรื่อยๆอีกต่างหาก ทั้งนี้ทั้งนั้นเพราะจำนวน core ใน GPU เมื่อเทียบกับ CPU แล้วมีมากมายกว่าหลายเท่าตัวยิ่งนัก ถึงแม้แต่ละ core จะมีความเร็วในการประมวลผล (Clock speed) ที่ต่ำกว่า แต่ก็เอาชนะไปได้ด้วยจำนวนที่มากกว่าเป็นอย่างมาก แถมยังกินไฟน้อยกว่าอีกต่างหาก
อ่าว! GPU มันเร็วขึ้นแล้วยังไงล่ะ หน้าที่มันมีไว้คำนวนกราฟิกอย่างเดียวนี่นา สุดท้ายก็เอามาช่วยงานประมวลผลของ CPU ที่เป็นงานทั่วไปไม่ได้อยู่ดี ดังนั้นด้วยความว่างงานของ GPU กับความคิดที่จะเอาเจ้า GPU มาใช้งานประมวลผลทั่วไปด้วย จึงเกิดแนวคิดที่เรียกว่า GPGPU ซึ่งย่อมาจาก General-Purpose computation on Graphics Processing Units ซึ่งแปลตรงตัวก็คือเอา GPU มาใช้ในการประมวลผลทั่วไปไม่จำกัดอยู่แค่งานกราฟิกอย่างเดียวอย่างที่บอกไปนั่นแหละครับ
CUDA เป็นส่วนหนึ่งของความพยายามที่จะนำแนวคิดของ GPGPU มาใช้ ซึ่ง CUDA คือสถาปัตยกรรมหนึ่งที่ถูกสร้างขึ้นโดย NVIDIA โดยจะประกอบด้วยตัวกราฟิกการ์ด, Programming Model, คอมไพเลอร์ ที่จะช่วยในการเขียนโปรแกรมแบบขนาน (Parallel Programming) ที่ทำงานบนกราฟิกการ์ดได้ แต่โดยทั่วไปแล้วหลายคนจะเข้าใจกันว่า CUDA เป็นเพียง Programming Model หรือภาษาโปรแกรมหนึ่งเท่านั้น
สรุปแล้ว CUDA ก็มีข้อดีตรงที่ว่าเราจะสามารถเขียนโปรแกรมที่ทำงานบนกราฟิกการ์ดได้ อันจะเป็นการแบ่งเบาภาระของ CPU ลง และโปรแกรมยังทำงานได้เร็วขึ้นกว่าเดิมอีกต่างหาก แต่ว่าก็ยังมีข้อเสียอยู่ตรงที่ CUDA นั้นเป็นสถาปัตยกรรมของ NVIDIA ซึ่งกราฟิหการ์ดที่จะใช้ CUDA ได้ก็จะมีแต่ของเจ้าตัวเองเท่านั้น (ATI หมดสิทธิ์) แต่ทว่าก็ยังมีความร่วมมือของ NVIDIA และ ATI ที่สร้างมาตรฐานใหม่ขึ้นมาที่ชื่อว่า OpenCL ที่จะสามารถใช้ได้กับกราฟิกการ์ดทั้งสองเจ้า ซึ่งถ้ามีโอกาสผมจะมานำเสนอเรื่องนี้อีกครั้งครับ
ตอนหน้าเราจะมาเริ่มเตรียม Environment กันครับ ว่าถ้าอยากจะลองเล่น CUDA จะต้องเตรียมอะไรกันบ้าง