11 คะแนน โดย xguru 2024-07-15 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ไลบรารีขนาดเล็กที่ทำให้สามารถทำคอมพิวต์ 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 ความคิดเห็น

 
xguru 2024-07-15

สำหรับคำแนะนำเกี่ยวกับโปรเจกต์ gpu.cpp: portable GPU compute for C++ with WebGPU อธิบายไว้ละเอียดกว่าทางนี้เล็กน้อย