Giới thiệu về lập trình GPU [đã đóng]


176

Mọi người đều có siêu máy tính song song khổng lồ này trên máy tính để bàn của họ dưới dạng GPU card đồ họa.

  • "Thế giới xin chào" tương đương với cộng đồng GPU là gì?
  • Tôi phải làm gì, đi đâu để bắt đầu lập trình GPU cho các nhà cung cấp GPU chính?

-Adam


1
Bạn đang nói về GPGPU, hay mã hóa đồ họa?
Menkboy

5
Anh ấy đang nói về CUDA (một API cho GPU nVidia) và các kỹ thuật khác. Sử dụng các đơn vị FPU có sẵn trong GPU để mã hóa phi đồ họa.
Nêm

1
Để tham khảo, GeForce 8800 thế hệ cuối có 128 bộ xử lý luồng hoạt động ở tốc độ ~ 1,3 GHz, đỉnh GTX 280 có 240 bộ xử lý luồng, hiệu suất lý thuyết của các GPU này lần lượt là 0,5 và 0,9 TeraFLOPS.
Nêm

Câu trả lời:


70

Hãy xem CUDA của NVidia, IMO là nền tảng dễ nhất để lập trình GPU. Có hàng tấn tài liệu tuyệt vời để đọc. http://www.nvidia.com/object/cuda_home.html

Xin chào thế giới sẽ thực hiện bất kỳ loại tính toán nào bằng GPU.

Mong rằng sẽ giúp.


17
  1. Bạn nhận được các trình tạo bóng đỉnh và pixel có thể lập trình cho phép thực thi mã trực tiếp trên GPU để thao tác các bộ đệm sẽ được vẽ. Các ngôn ngữ này (tức là tương đương GL Shader Lang và High Shader Lang và DirectX của OpenGL), là cú pháp kiểu C và thực sự dễ sử dụng. Một số ví dụ về HLSL có thể được tìm thấy ở đây cho studio trò chơi XNA và Direct X. Tôi không có bất kỳ tài liệu tham khảo GLSL nào, nhưng tôi chắc chắn có rất nhiều xung quanh. Các ngôn ngữ shader này cung cấp một sức mạnh to lớn để điều khiển những gì được vẽ ở mức độ trên mỗi đỉnh hoặc mỗi pixel, trực tiếp trên card đồ họa, làm cho mọi thứ như bóng, ánh sáng và nở hoa thực sự dễ dàng thực hiện.
  2. Điều thứ hai gây chú ý là sử dụng openCL để mã hóa cho các dòng mới của GPU mục đích chung. Tôi không chắc chắn làm thế nào để sử dụng cái này, nhưng sự hiểu biết của tôi là openCL cung cấp cho bạn sự khởi đầu để có thể truy cập bộ xử lý trên cả card đồ họa và cpu thông thường. Đây chưa phải là công nghệ chủ đạo và dường như được thúc đẩy bởi Apple.
  3. CUDA dường như là một chủ đề nóng. CUDA là cách truy cập sức mạnh GPU của nVidia. Dưới đây là một số giới thiệu

9

Tôi nghĩ rằng những người khác đã trả lời câu hỏi thứ hai của bạn. Đối với phần đầu tiên, "Thế giới xin chào" của CUDA, tôi không nghĩ có một tiêu chuẩn được thiết lập, nhưng cá nhân tôi muốn giới thiệu một bộ cộng song song (tức là một chương trình tính tổng N số nguyên).

Nếu bạn xem ví dụ "rút gọn" trong NVIDIA SDK, tác vụ đơn giản bề ngoài có thể được mở rộng để thể hiện nhiều cân nhắc CUDA như đọc kết hợp, xung đột ngân hàng bộ nhớ và không kiểm soát vòng lặp.

Xem bản trình bày này để biết thêm:

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


7

Hãy xem SDK tính toán luồng ATI . Nó dựa trên BrookGPU được phát triển tại Stanford.

Trong tương lai, tất cả các công việc GPU sẽ được chuẩn hóa bằng OpenCL . Đây là một sáng kiến ​​do Apple tài trợ sẽ là nhà cung cấp card đồ họa trung lập.


7

OpenCL là một nỗ lực để tạo ra một thư viện đa nền tảng có khả năng lập trình mã phù hợp, trong số những thứ khác, GPU. Nó cho phép một người viết mã mà không cần biết GPU sẽ chạy trên GPU nào, do đó giúp sử dụng một số sức mạnh của GPU dễ dàng hơn mà không nhắm mục tiêu cụ thể đến một số loại GPU. Tôi nghi ngờ nó không hiệu quả như mã GPU gốc (hoặc bản địa như các nhà sản xuất GPU sẽ cho phép) nhưng sự đánh đổi có thể đáng giá cho một số ứng dụng.

Nó vẫn còn ở giai đoạn khá sớm (1.1 như câu trả lời này), nhưng đã đạt được một số lực kéo trong ngành - ví dụ, nó được hỗ trợ thực sự trên OS X 10.5 trở lên.


6

CUDA là một khuôn khổ tuyệt vời để bắt đầu. Nó cho phép bạn viết các hạt nhân GPGPU bằng C. Trình biên dịch sẽ tạo ra vi mã GPU từ mã của bạn và gửi mọi thứ chạy trên CPU đến trình biên dịch thông thường của bạn. Đó chỉ là NVIDIA và chỉ hoạt động trên thẻ 8-series hoặc tốt hơn. Bạn có thể kiểm tra khu vực CUDA để xem những gì có thể được thực hiện với nó. Có một số bản demo tuyệt vời trong CUDA SDK . Tài liệu đi kèm với SDK là điểm khởi đầu khá tốt để thực sự viết mã. Nó sẽ hướng dẫn bạn thông qua việc viết một nhân nhân ma trận, đây là một nơi tuyệt vời để bắt đầu.


5

Một cách dễ dàng khác để tham gia vào lập trình GPU, mà không cần vào CUDA hoặc OpenCL, là thực hiện thông qua OpenACC .

OpenACC hoạt động như OpenMP, với các chỉ thị của trình biên dịch (như #pragma acc kernels) để gửi công việc tới GPU. Ví dụ: nếu bạn có một vòng lặp lớn (chỉ những vòng lặp lớn hơn mới thực sự có lợi):

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;
}

Chỉnh sửa: thật không may, chỉ có trình biên dịch PGI thực sự hỗ trợ OpenACC ngay bây giờ, cho các thẻ GPU NVIDIA.


3

Hãy thử GPU ++libSh

Liên kết LibSh có một mô tả hay về cách họ liên kết ngôn ngữ lập trình với các nguyên thủy đồ họa (và rõ ràng là chính các nguyên thủy) và GPU ++ mô tả tất cả những gì về nó, cả với các ví dụ mã.


3

Nếu bạn sử dụng MATLAB, việc sử dụng GPU cho tính toán kỹ thuật sẽ trở nên khá đơn giản (tính toán ma trận và tính toán số / số nặng). Tôi thấy nó hữu ích cho việc sử dụng thẻ GPU ngoài chơi game. Kiểm tra các liên kết dưới đây:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.