ความเข้าใจปัจจุบันของฉันคือสิ่งที่ทำในไฟล์ shader ทำบน GPU และสิ่งที่ทำในโค้ดของฉัน (Java ในกรณีของฉัน) ทำบนซีพียู
นี่เป็นคำอธิบายที่ถูกต้องหรือไม่?
ความเข้าใจปัจจุบันของฉันคือสิ่งที่ทำในไฟล์ shader ทำบน GPU และสิ่งที่ทำในโค้ดของฉัน (Java ในกรณีของฉัน) ทำบนซีพียู
นี่เป็นคำอธิบายที่ถูกต้องหรือไม่?
คำตอบ:
นั่นคือส่วนสำคัญของมัน
โดยหลักการแล้วแพลตฟอร์มสามารถทำสิ่งที่ต้องการได้ อาจจินตนาการได้ว่าระบบปฏิบัติการขั้นสูงทำการแปลรหัสที่คอมไพล์ได้ทันเวลาจากรหัส x86 ถึง GPU ในทำนองเดียวกันไดรเวอร์ OpenGL สามารถเรียกใช้สิ่งที่ต้องการบนโฮสต์ CPU
แต่จริงๆสิ่งที่คุณเพิ่งอธิบายคือสิ่งที่เกิดขึ้น
โดยทั่วไปใช่ Java ถูกใช้เพื่อเขียนโปรแกรมที่รันบน cpu ภาษา Shader (cg, hlsl, et al) ถูกใช้เพื่อเขียนโปรแกรมที่ทำงานบน gpu
ข้อยกเว้นสำหรับกฎนี้คือการใช้API ของบุคคลที่สามซึ่งสามารถเชื่อมช่องว่าง
david van brink ตอบคำถามของคุณโดยทั่วไป
แต่อย่างที่เขาบอกว่าไดรเวอร์ OpenGL สามารถทำงานบน CPU ได้และมันก็เกิดขึ้นมากมาย โดยเฉพาะอย่างยิ่งกับบริบทความเข้ากันได้ซึ่งไม่สามารถใช้งานฟังก์ชั่นแปลก ๆ บางอย่างในกราฟิกการ์ด พวกเขาต้องการการจำลองซอฟต์แวร์ ตัวอย่างเช่นฉันเคยได้ยินมาก่อนว่ามีการดำเนินการ stippling บน CPU คุณสามารถคาดหวังได้ด้วยการเลือก
ความประหลาดใจเหล่านี้สามารถเกิดขึ้นได้มากขึ้นใน MacOS โดยใช้ 2.1 บริบทเนื่องจาก Apple ได้รวมมุมมองของ OpenGL ไว้อย่างดีในช่วงฮาร์ดแวร์ของพวกเขา มันเป็นไปได้จริงที่จะสามารถรันข้อกำหนด ENTIRE OpenGL 2.1 ทั้งหมดบน CPU ได้อย่างสมบูรณ์หากรหัสการสร้างบริบทระบุอุปกรณ์ซอฟต์แวร์อย่างชัดเจน
ในทางกลับกันโค้ดที่ประมวลผลผ่านไลบรารีการคำนวณเช่น vexcl หรือเพิ่มการคำนวณหรือ AMP ของไมโครซอฟท์หรือ nVidia thrust สามารถดำเนินการได้บน GPU หรือ CPU ขึ้นอยู่กับการตั้งค่า API
และสำหรับการสัมผัสที่เสร็จสิ้นภายในซีพียูคุณยังมีสถาปัตยกรรม DSP ที่เป็นส่วนหนึ่งของมันที่เราเรียกว่า SIMD คอมไพเลอร์ ispc ของ Intel ให้ความช่วยเหลือในการสร้างรหัสที่ "มั่นใจ" เพื่อให้ทำงานบนเลน SIMD พร้อมการวินิจฉัยประสิทธิภาพจำนวนมากในเวลารวบรวมเพื่อช่วยให้คุณได้รับประโยชน์สูงสุด เพิ่ม OpenMP ลงไปและคุณสามารถรับ SIMD แบบมัลติเธรดซึ่งเข้าใกล้แนวคิดของ GPU หากคุณมี CPU ระดับไฮเอนด์และ GPU ระดับต่ำสุดสิ่งนี้อาจมีประสิทธิภาพมากกว่า
http://ispc.github.io/