คำแนะนำเกี่ยวกับการเขียนโปรแกรม GPU [ปิด]


176

ทุกคนมีซูเปอร์คอมพิวเตอร์ขนาดใหญ่ที่ขนานกันอย่างหนาแน่นบนเดสก์ท็อปในรูปแบบของกราฟิกการ์ด GPU

  • "สวัสดีโลก" เทียบเท่ากับชุมชน GPU คืออะไร?
  • ฉันจะทำอย่างไรฉันจะไปเริ่มต้นเขียนโปรแกรม GPU สำหรับผู้จำหน่าย GPU รายใหญ่ได้อย่างไร

อดัม


1
คุณกำลังพูดถึง GPGPU หรือกราฟิกโค้ด?
Menkboy

5
เขากำลังพูดถึง CUDA (API สำหรับ nVidia GPUs) และเทคนิคอื่น ๆ การใช้หน่วย FPU ที่มีอยู่ใน GPU สำหรับการเข้ารหัสที่ไม่ใช่กราฟิก
Wedge

1
สำหรับการอ้างอิง GeForce 8800 รุ่นล่าสุดมี 128 สตรีมโปรเซสเซอร์ที่ทำงานที่ 1.3 GHz ซึ่งเป็นสุดยอดของ GTX 280 มี 240 สตรีมโปรเซสเซอร์ประสิทธิภาพทางทฤษฎีของ GPU เหล่านี้คือ 0.5 และ 0.9 TeraFLOPS ตามลำดับ
ลิ่ม

คำตอบ:


70

ลองดู CUDA โดย NVidia, IMO มันเป็นแพลตฟอร์มที่ง่ายที่สุดในการเขียนโปรแกรม GPU มีวัสดุดีๆมากมายให้อ่าน http://www.nvidia.com/object/cuda_home.html

สวัสดีชาวโลกจะทำการคำนวณด้วย GPU

หวังว่าจะช่วย


17
  1. คุณได้รับจุดสุดยอดที่ตั้งโปรแกรมได้และตัวแปลงพิกเซลที่อนุญาตให้เรียกใช้โค้ดโดยตรงบน GPU เพื่อจัดการบัฟเฟอร์ที่จะวาด ภาษาเหล่านี้ (เช่น OpenGL ของ GL Shader Lang และเทียบเท่าระดับสูง Shader Lang และ DirectX ของ DirectX) เป็นไวยากรณ์สไตล์ C และใช้งานง่ายมาก ตัวอย่างของ HLSL สามารถพบได้ที่นี่สำหรับสตูดิโอเกม XNA และ Direct X ฉันไม่มีการอ้างอิง GLSL ที่เหมาะสม แต่ฉันแน่ใจว่ามีอยู่มากมาย ภาษา shader เหล่านี้ให้พลังมหาศาลในการจัดการสิ่งที่ถูกวาดในระดับต่อยอดหรือต่อพิกเซลบนการ์ดกราฟิกโดยตรงทำให้สิ่งต่างๆเช่นเงาแสงและบานง่ายต่อการใช้งาน
  2. สิ่งที่สองที่นึกได้คือการใช้ openCLเป็นรหัสสำหรับ GPU แนวใหม่ทั่วไป ฉันไม่แน่ใจว่าจะใช้สิ่งนี้อย่างไร แต่ความเข้าใจของฉันคือ openCL ให้คุณเริ่มต้นใช้งานโปรเซสเซอร์ได้ทั้งกราฟิกการ์ดและซีพียูปกติ นี่ไม่ใช่เทคโนโลยีหลักและดูเหมือนว่าจะถูกขับเคลื่อนโดย Apple
  3. CUDAน่าจะเป็นประเด็นร้อนแรง CUDA เป็นวิธีการเข้าถึงพลัง GPU ของ nVidia นี่คืออินโทรสบางส่วน

9

ฉันคิดว่าคนอื่น ๆ ได้ตอบคำถามที่สองของคุณ สำหรับครั้งแรกที่ "Hello World" ของ CUDA ฉันไม่คิดว่ามีมาตรฐานที่กำหนดไว้ แต่โดยส่วนตัวแล้วฉันขอแนะนำ adder แบบขนาน (เช่นโปรแกรมที่รวมจำนวนเต็ม N)

หากคุณดูตัวอย่าง "การลด" ใน NVIDIA SDK งานง่าย ๆ อย่างยิ่งสามารถขยายออกไปเพื่อแสดงให้เห็นถึงสิ่งที่ต้องพิจารณาใน CUDA เช่นการอ่านแบบรวมกันความขัดแย้งของหน่วยความจำของธนาคาร

ดูการนำเสนอนี้สำหรับข้อมูลเพิ่มเติม:

http://www.gpgpu.org/sc2007/SC07_CUDA_5_Optimization_Harris.pdf


7

ลองดูที่ที่SDK ATI สตรีมคอมพิวเตอร์ มันขึ้นอยู่กับBrookGPUพัฒนาที่ Stanford

ในอนาคตการทำงานทั้งหมด GPU จะเป็นมาตรฐานที่ใช้OpenCL มันเป็นความคิดริเริ่มที่ได้รับการสนับสนุนจาก Apple ซึ่งจะทำให้ผู้จำหน่ายการ์ดกราฟิกเป็นกลาง


7

OpenCLเป็นความพยายามในการสร้างห้องสมุดข้ามแพลตฟอร์มที่มีความสามารถในการเขียนโปรแกรมรหัสที่เหมาะสมสำหรับเหนือสิ่งอื่นใด GPUs ช่วยให้ผู้ใช้สามารถเขียนโค้ดโดยไม่ทราบว่าจะใช้ GPU ตัวใดจึงทำให้ง่ายต่อการใช้พลังของ GPU โดยไม่กำหนดเป้าหมายของ GPU หลายประเภทโดยเฉพาะ ฉันสงสัยว่ามันไม่ได้มีประสิทธิภาพเหมือนรหัส GPU พื้นเมือง (หรือเป็นเจ้าของโดยผู้ผลิต GPU จะอนุญาต) แต่ข้อดีของมันก็คุ้มค่าสำหรับแอพพลิเคชั่นบางตัว

มันยังอยู่ในช่วงเริ่มต้นค่อนข้าง (1.1 คำตอบนี้) แต่ได้รับแรงฉุดในอุตสาหกรรม - ตัวอย่างเช่นมันได้รับการสนับสนุนใน OS X 10.5 ขึ้นไป


6

CUDA เป็นกรอบงานที่ยอดเยี่ยมในการเริ่มต้น มันช่วยให้คุณเขียนเคอร์เนล GPGPU ใน C คอมไพเลอร์จะผลิตไมโครโค้ด GPU จากรหัสของคุณและส่งทุกอย่างที่ทำงานบน CPU ไปยังคอมไพเลอร์ปกติของคุณ มันเป็น NVIDIA เท่านั้นและใช้ได้กับการ์ดซีรีส์ 8 หรือดีกว่าเท่านั้น คุณสามารถตรวจสอบโซน CUDAเพื่อดูว่าสามารถทำอะไรได้บ้าง มีบางสาธิตที่ดีในการที่มีCUDA SDK เอกสารที่มาพร้อมกับ SDK นั้นเป็นจุดเริ่มต้นที่ดีมากสำหรับการเขียนโค้ด มันจะแนะนำคุณเกี่ยวกับการเขียนเคอร์เนลการคูณเมทริกซ์ซึ่งเป็นจุดเริ่มต้นที่ดี


5

อีกวิธีที่ง่ายที่จะได้รับในการเขียนโปรแกรม 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


3

ลองใช้GPU ++และlibSh

ลิงก์ LibSh มีคำอธิบายที่ดีเกี่ยวกับวิธีการเชื่อมโยงภาษาการเขียนโปรแกรมกับกราฟิกแบบดั้งเดิม (และชัดเจน, แบบดั้งเดิม) และ GPU ++ อธิบายสิ่งที่เกี่ยวกับทั้งสองด้วยตัวอย่างรหัส


3

ถ้าคุณใช้ MATLAB มันค่อนข้างง่ายที่จะใช้ GPU สำหรับการคำนวณทางเทคนิค (การคำนวณเมทริกซ์และการคำนวณทางคณิตศาสตร์ / ตัวเลขจำนวนมาก) ฉันคิดว่ามันมีประโยชน์สำหรับการใช้การ์ด GPU นอกเกม ตรวจสอบลิงค์ด้านล่าง:

http://www.mathworks.com/discovery/matlab-gpu.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.