วันจันทร์ที่ 11 มีนาคม พ.ศ. 2556

CUDA (Compute Unified Device Architecture)



 
CUDA™ ย่อมาจาก Compute Unified Device Architecture เป็นโปรแกรมมิ่งโมเดล พัฒนาโดย NVIDIA® โดยมีจุดประสงค์ให้โปรแกรมเมอร์ สามารถใช้ GPU (หรือการ์ดจอ nVidia นั่นเอง) ในการประมวลผลได้
แล้วทำไมถึงต้องใช้ GPU ให้ยุ่งยากด้วย ก็เอา CPU คำนวณไม่ได้หรือ ? ... 
คำตอบคือ งานคำนวณบางอย่างนั้น เหมาะกับ GPU มากกว่า และอาจเร็วกว่าได้ถึง 10 หรือ 100 เท่าเลยทีเดียว 
  
ภาพที่ 1 ความแตกต่างของ CPU และ GPU โดย GPU จะมีส่วนของการประมวลผลมากกว่า แทนที่จะมีส่วน Control หรือ Cache มากเหมือน CPU

งานที่เหมาะกับ GPU คือ งานที่ต้องคำนวณด้วย โปรแกรมแบบเดียวกัน แต่ต้องทำบนข้อมูลที่ใหญ่ ในทางคอมพิวเตอร์ จะเรียกว่า SIMD (Single Instruction Multiple Data : เคยได้ยินอาจารย์เรียกว่า "ซิมดี้") ยกตัวอย่างงาน SIMD ที่เห็นได้บ่อยๆ เช่น งานประมวลผลภาพ ซึ่งในหนึ่งภาพจะประกอบด้วยจำนวณพิกเซลในหลักล้าน จะเห็นว่า เวลาเราเปิด Photoshop เพื่อใส่เอฟเฟ็คภาพในไฟล์ใหญ่ๆ จะใช้เวลานาน นั่นก็คือ CPU จะต้องคำนวณผลของเอฟเฟคภาพในแต่ละพิกเซล
แต่สำหรับ GPU ซึ่งมีโครงสร้างหน่วยประมวลผล เป็นแบบขนานจำนวนมาก (nVidia เรียกแต่ละท่อว่า Stream Processor ผมเรียกว่า"ท่อ" ) ทำให้เหมาะกับงาน SIMD มาก จินตนาการปัญหาการประมวลผลภาพอีกครั้ง บน GPU ที่มีถึง 112 ท่อพร้อมๆ กัน ... งานนี้จึงเสร็จเร็วขึ้นมาก

 

What is Not Cuda
  • CUDA ไม่ใช่ Physic Engine เพราะ CUDA เป็นเพียงโปรแกรมมิ่งโมเดลเท่านั้น แต่ก็ไ่ม่ใช่ว่าจะไม่เกี่ยวกันเสียทีเดียว เพราะโมเดลการประมวลผลแบบ CUDA นั้น มีความเหมาะสมที่จะใช้ในการจำลอง Physic Engine ซึ่ง nVidia ก็ได้สร้าง Physic Engine ชื่อ Physx ซึ่งใช้ความสามารถของ CUDA ในการจำลองฟิสิกส์อย่างเต็มรูปแบบ
  • CUDA ไม่ใช่เครื่องมือแสดงผล ไม่ใช่สิ่งทีเพิ่มเฟรมเรตให้ทุกเกมในโลก แต่เป็นเครื่องมือคำนวณ ซึ่งจะช่วยให้การคำนวณในเกมมีซับซ้อนขึ้นได้ในเวลาแบบ real-time เหมือนเดิม เพราะปรากฏการณ์ในเกมมีความสมจริงกว่าเดิม 

                 ถึงอย่างไรก็ตาม เทคโนโลยี CUDA เป็นเพียงการจำลอง Thread จากพื้นฐานคำสั่งของภาษา C เท่านั้นครับ ไม่ใช่การที่ มี Thread ของ GPU จริงๆเฉกเช่น CPU ที่มีจำนวนของ Thread จริงๆ ดังนั้นการทำงาน และการประมวลผลของ GPU จะไม่ สามารถมีประสิทธิภาพเทียบเท่ากับ CPU ที่มีหลายๆ Thread ได้จริง  ขอให้เข้าใจตรงนี้ด้วยครับ และอีกหนึ่งความสามารถของตัว CUDA Technology ก็คือ มันมีสมองชั่วคราว เพื่อช่วยในการจดจำข้อมูลที่ถูกคำนวณอยู่บ่อยๆเอาไว้ โดยไม่ต้องอาศัยการทำความ รู้จักกันใหม่ เพื่อความรวดเร็วในการประมวลผลผ่าน GPU โดยตรง ซึ่งไม่จำเป็นจะต้องใช้ Memory ในการจดจำเป็นหลัก เหมือนใน สมัยก่อนอีกต่อไป จึงทำให้ภาระของตัว Memory ลดลงไปด้วย เพื่อการใช้งานในส่วนอื่นๆที่สำคัญกว่าของ Memory นั่นเองครับ


ที่มา 
http://mekpro.exteen.com/20090128/cuda-introduction-to-cuda
http://remixman.net/cuda_tutorial_introduce
http://www.overclockzone.com/NiNe_iZe/Year_2008/07/galaxy-gtx260-280/index.html