ทุกคนมีซูเปอร์คอมพิวเตอร์ขนาดใหญ่ที่ขนานกันอย่างหนาแน่นบนเดสก์ท็อปในรูปแบบของกราฟิกการ์ด GPU
- "สวัสดีโลก" เทียบเท่ากับชุมชน GPU คืออะไร?
- ฉันจะทำอย่างไรฉันจะไปเริ่มต้นเขียนโปรแกรม GPU สำหรับผู้จำหน่าย GPU รายใหญ่ได้อย่างไร
อดัม
ทุกคนมีซูเปอร์คอมพิวเตอร์ขนาดใหญ่ที่ขนานกันอย่างหนาแน่นบนเดสก์ท็อปในรูปแบบของกราฟิกการ์ด GPU
อดัม
คำตอบ:
ลองดู CUDA โดย NVidia, IMO มันเป็นแพลตฟอร์มที่ง่ายที่สุดในการเขียนโปรแกรม GPU มีวัสดุดีๆมากมายให้อ่าน
http://www.nvidia.com/object/cuda_home.html
สวัสดีชาวโลกจะทำการคำนวณด้วย GPU
หวังว่าจะช่วย
ฉันคิดว่าคนอื่น ๆ ได้ตอบคำถามที่สองของคุณ สำหรับครั้งแรกที่ "Hello World" ของ CUDA ฉันไม่คิดว่ามีมาตรฐานที่กำหนดไว้ แต่โดยส่วนตัวแล้วฉันขอแนะนำ adder แบบขนาน (เช่นโปรแกรมที่รวมจำนวนเต็ม N)
หากคุณดูตัวอย่าง "การลด" ใน NVIDIA SDK งานง่าย ๆ อย่างยิ่งสามารถขยายออกไปเพื่อแสดงให้เห็นถึงสิ่งที่ต้องพิจารณาใน CUDA เช่นการอ่านแบบรวมกันความขัดแย้งของหน่วยความจำของธนาคาร
ดูการนำเสนอนี้สำหรับข้อมูลเพิ่มเติม:
http://www.gpgpu.org/sc2007/SC07_CUDA_5_Optimization_Harris.pdf
ลองดูที่ที่SDK ATI สตรีมคอมพิวเตอร์ มันขึ้นอยู่กับBrookGPUพัฒนาที่ Stanford
ในอนาคตการทำงานทั้งหมด GPU จะเป็นมาตรฐานที่ใช้OpenCL มันเป็นความคิดริเริ่มที่ได้รับการสนับสนุนจาก Apple ซึ่งจะทำให้ผู้จำหน่ายการ์ดกราฟิกเป็นกลาง
OpenCLเป็นความพยายามในการสร้างห้องสมุดข้ามแพลตฟอร์มที่มีความสามารถในการเขียนโปรแกรมรหัสที่เหมาะสมสำหรับเหนือสิ่งอื่นใด GPUs ช่วยให้ผู้ใช้สามารถเขียนโค้ดโดยไม่ทราบว่าจะใช้ GPU ตัวใดจึงทำให้ง่ายต่อการใช้พลังของ GPU โดยไม่กำหนดเป้าหมายของ GPU หลายประเภทโดยเฉพาะ ฉันสงสัยว่ามันไม่ได้มีประสิทธิภาพเหมือนรหัส GPU พื้นเมือง (หรือเป็นเจ้าของโดยผู้ผลิต GPU จะอนุญาต) แต่ข้อดีของมันก็คุ้มค่าสำหรับแอพพลิเคชั่นบางตัว
มันยังอยู่ในช่วงเริ่มต้นค่อนข้าง (1.1 คำตอบนี้) แต่ได้รับแรงฉุดในอุตสาหกรรม - ตัวอย่างเช่นมันได้รับการสนับสนุนใน OS X 10.5 ขึ้นไป
CUDA เป็นกรอบงานที่ยอดเยี่ยมในการเริ่มต้น มันช่วยให้คุณเขียนเคอร์เนล GPGPU ใน C คอมไพเลอร์จะผลิตไมโครโค้ด GPU จากรหัสของคุณและส่งทุกอย่างที่ทำงานบน CPU ไปยังคอมไพเลอร์ปกติของคุณ มันเป็น NVIDIA เท่านั้นและใช้ได้กับการ์ดซีรีส์ 8 หรือดีกว่าเท่านั้น คุณสามารถตรวจสอบโซน CUDAเพื่อดูว่าสามารถทำอะไรได้บ้าง มีบางสาธิตที่ดีในการที่มีCUDA SDK เอกสารที่มาพร้อมกับ SDK นั้นเป็นจุดเริ่มต้นที่ดีมากสำหรับการเขียนโค้ด มันจะแนะนำคุณเกี่ยวกับการเขียนเคอร์เนลการคูณเมทริกซ์ซึ่งเป็นจุดเริ่มต้นที่ดี
อีกวิธีที่ง่ายที่จะได้รับในการเขียนโปรแกรม GPU โดยไม่ได้รับเข้าสู่ CUDA หรือ OpenCL คือการทำมันผ่านOpenACC
OpenACC ทำงานเหมือน OpenMP พร้อมคอมไพเลอร์คำสั่ง (เหมือน#pragma acc kernels
) เพื่อส่งงานไปยัง GPU ตัวอย่างเช่นหากคุณมีวงขนาดใหญ่ (เฉพาะวงที่ใหญ่กว่าจะได้รับประโยชน์จริงๆ):
int i;
float a = 2.0;
float b[10000];
#pragma acc kernels
for (i = 0; i < 10000; ++i) b[i] = 1.0f;
#pragma acc kernels
for (i = 0; i < 10000; ++i) {
b[i] = b[i] * a;
}
แก้ไข: น่าเสียดายที่มีเพียงคอมไพเลอร์ PGI เท่านั้นที่สนับสนุน OpenACC ในขณะนี้สำหรับการ์ด NVIDIA GPU
ลิงก์ LibSh มีคำอธิบายที่ดีเกี่ยวกับวิธีการเชื่อมโยงภาษาการเขียนโปรแกรมกับกราฟิกแบบดั้งเดิม (และชัดเจน, แบบดั้งเดิม) และ GPU ++ อธิบายสิ่งที่เกี่ยวกับทั้งสองด้วยตัวอย่างรหัส
ถ้าคุณใช้ MATLAB มันค่อนข้างง่ายที่จะใช้ GPU สำหรับการคำนวณทางเทคนิค (การคำนวณเมทริกซ์และการคำนวณทางคณิตศาสตร์ / ตัวเลขจำนวนมาก) ฉันคิดว่ามันมีประโยชน์สำหรับการใช้การ์ด GPU นอกเกม ตรวจสอบลิงค์ด้านล่าง: