- ไลบรารีขนาดเล็กที่ทำให้สามารถทำคอมพิวต์ GPU แบบอเนกประสงค์ได้อย่างง่ายดายใน C++
- ใช้มาตรฐาน WebGPU เพื่อมอบอินเทอร์เฟซ GPU ระดับล่าง ทำให้สามารถเขียนโค้ดที่ทำงานได้บน GPU หลากหลายประเภท
- กล่าวคือ สามารถแทรกโค้ด GPU เข้าไปในโปรเจ็กต์ C++ เพื่อให้รันได้บน GPU ของ Nvidia, Intel, AMD และอื่น ๆ และใช้โค้ด C++ ชุดเดียวกันเพื่อใช้งาน GPU ได้บนฮาร์ดแวร์ส่วนใหญ่ที่รองรับ Vulkan, Metal, DirectX
เป้าหมายทางเทคนิค: น้ำหนักเบา, วนรอบการพัฒนารวดเร็ว, โค้ด boilerplate น้อย
- มุ่งให้ครอบคลุมทุกอย่างที่จำเป็นสำหรับการคอมพิวต์ GPU ด้วย API ที่น้อยที่สุด
- ทำให้การบิลด์โปรเจ็กต์เกิดขึ้นแทบจะทันที และให้รอบคอมไพล์/รันใช้เวลาน้อยกว่า 5 วินาที
- ลดภาระด้าน dependency และ tooling ให้เหลือน้อยที่สุด นอกเหนือจากคอมไพเลอร์ C++ มาตรฐาน
- มุ่งสู่พื้นผิว API ขนาดเล็กและโค้ด boilerplate ขั้นต่ำ พร้อมลดชั้น abstraction ให้น้อยที่สุด เพื่อให้การแมปกันระหว่างไลบรารี gpu.cpp และ WebGPU API มีความชัดเจน
- ลดเวลาในการคอมไพล์ด้วยการจัดเตรียม pre-built binary ของ Dawn ซึ่งเป็น WebGPU implementation ของ Google
- ขณะนี้รองรับเฉพาะแบ็กเอนด์ Dawn แต่มีแผนจะรองรับ WebGPU implementation อื่น ๆ ในอนาคต
ผู้ใช้เป้าหมายของ gpu.cpp
- โปรเจ็กต์ที่ต้องการการคอมพิวต์ GPU แบบพกพาสูงบนอุปกรณ์คอมพิวต์ส่วนบุคคลเป็นกลุ่มเป้าหมายหลัก
- สามารถนำไปใช้กับการพัฒนาอัลกอริทึม GPU, การลงมือเขียนโมเดลโครงข่ายประสาทด้วยตนเอง, การจำลองฟิสิกส์, แอปพลิเคชันมัลติโหมด, การเรนเดอร์กราฟิกส์แบบออฟไลน์ และเอนจินอนุมานสำหรับแมชชีนเลิร์นนิง
- มีเป้าหมายเพื่อทำให้การคอมพิวต์ GPU ในวงกว้างบนอุปกรณ์ส่วนบุคคลง่ายขึ้น
- ช่วยให้สามารถควบคุมการย้ายข้อมูลอย่างละเอียดและควบคุมโค้ด GPU ได้โดยตรง
สิ่งที่ gpu.cpp ไม่ได้เป็น
- ไม่ใช่เฟรมเวิร์กระดับสูงสำหรับ numerical computing หรือแมชชีนเลิร์นนิง และไม่ใช่ inference engine (แต่สามารถใช้เพื่อรองรับการสร้างสิ่งเหล่านั้นได้)
- สิ่งสำคัญคือ WebGPU ไม่ได้มีอยู่แค่ในเว็บเบราว์เซอร์เท่านั้น แต่ยังมี native implementation ด้วย ("WebGPU is Not Just About the Web")
- มุ่งเน้นที่การคอมพิวต์ GPU แบบอเนกประสงค์มากกว่าการเรนเดอร์/กราฟิกส์
ข้อจำกัดและแผนในอนาคต
- ปรับปรุง API: จะค่อย ๆ พัฒนาดีไซน์ API ผ่านกรณีการใช้งานต่าง ๆ
- มีแผนรองรับการ target เบราว์เซอร์
- ทำเคอร์เนลและเชดเดอร์ให้เป็นไลบรารีที่นำกลับมาใช้ซ้ำได้
- เพิ่มตัวอย่างการใช้งานและการทดสอบให้มากขึ้น
- หนึ่งในเป้าหมายระยะสั้นคือการนำเคอร์เนลของ llm.c มาทำให้ใช้งานได้ด้วย WebGPU
1 ความคิดเห็น
สำหรับคำแนะนำเกี่ยวกับโปรเจกต์ gpu.cpp: portable GPU compute for C++ with WebGPU อธิบายไว้ละเอียดกว่าทางนี้เล็กน้อย