2008-10-20 91 views
138

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

  • Tương đương "hello world" của cộng đồng GPU là gì?
  • Tôi phải làm gì, tôi sẽ đ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 hoặc mã hóa đồ họa? – Menkboy

+4

Anh ấy đang nói về CUDA (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 đồ họa. – Wedge

+0

Để tham khảo, GeForce 8800 thế hệ trước có 128 bộ xử lý dòng hoạt động ở mức 1,3 GHz, một đầu GTX 280 có 240 bộ xử lý dòng, hiệu suất lý thuyết của các GPU này là 0,5 và 0,9 TeraFLOPS. – Wedge

Trả lời

56

Check-out CUDA của NVIDIA, IMO đó là nền tảng dễ nhất để làm lập trình GPU. Có rất nhiều tài liệu thú vị để đọc. http://www.nvidia.com/object/cuda_home.html

Xin chào thế giới sẽ làm bất kỳ loại phép tính nào bằng GPU.

Hy vọng điều đó sẽ hữu ích.

13
  1. Bạn nhận được đỉnh có thể lập trình và pixel shaders cho phép thực hiện mã trực tiếp trên GPU để thao tác các bộ đệm mà là để được rút ra. Các ngôn ngữ này (ví dụ: GL Shader Lang của OpenGL và Cao Cấp độ Shader Lang và tương đương của DirectX ), 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 here cho trò chơi XNA studio và Direct X. Tôi không có bất kỳ tham chiếu GLSL nào, nhưng tôi là chắc chắn có rất nhiều thứ xung quanh. Những ngôn ngữ shader đưa ra một số tiền khổng lồ năng lượng để thao tác gì được rút ra ở mức độ 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 tối, ánh sáng, và nở thực sự dễ dàng để triển khai thực hiện.
  2. Điều thứ hai mà bạn nghĩ đến là sử dụng openCL để mã cho các dòng mới của mục đích chung là . Tôi là không chắc chắn cách sử dụng tính năng này, nhưng sự hiểu biết của tôi là openCL cung cấp cho bạn bạn có thể bắt đầu sử dụng bộ vi xử lý trên cả hai card đồ họa và cpu thông thường. Đây không phải là công nghệ chủ đạo, và dường như được thúc đẩy bởi Apple.
  3. CUDA có vẻ là một chủ đề nóng. CUDA là cách truy cập GPU của nVidia. Here là một số intros
3

Hãy thử GPU++libSh

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

7

Hãy xem ATI Stream Computing SDK. Nó dựa trên BrookGPU được phát triển tại Stanford.

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

6

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

8

Tôi nghĩ những người khác đã trả lời câu hỏi thứ hai của bạn. Đối với lần đầu tiên, "Hello World" của CUDA, tôi không nghĩ rằng 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 adder song song (tức là một chương trình tổng N số nguyên).

Nếu bạn nhìn vào ví dụ "giảm" trong SDK NVIDIA, nhiệm vụ đơn giản bề ngoài có thể được mở rộng để chứng minh nhiều cân nhắc CUDA như đọc đồng bộ, xung đột ngân hàng bộ nhớ và bỏ vòng lặp.

Xem bài trình bày này cho biết thêm:

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

3

Có lẽ bạn sẽ thích GPGPU IDE này, mà giấu sự phức tạp không cần thiết cho thí nghiệm GPU nói chung. Hiện tại các hạt nhân có thể được lập trình cho các trình đổ bóng OpenCL và/hoặc GLSL.

+0

Liên kết của bạn bị hỏng. – user

+0

Liên kết đã được sửa ngay bây giờ –

5

OpenCL là một nỗ lực để làm cho 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 người ta viết mã mà không biết GPU nào sẽ chạy, do đó làm cho việc sử dụng một số sức mạnh của GPU dễ dàng hơn mà không cần nhắm mục tiêu một số loại GPU cụ thể. Tôi nghi ngờ nó không phải là biểu diễn như mã GPU gốc (hoặc như bản địa như các nhà sản xuất GPU sẽ cho phép) nhưng sự cân bằng có thể được giá trị nó cho một số ứng dụng.

Nó vẫn còn trong giai đoạn tương đối 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ợ nguyên bản trên OS X 10.5 trở lên.

3

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

OpenACC hoạt động như OpenMP, với 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ó vòng lặp lớn (chỉ những vòng lặp lớn 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: không may, chỉ trình biên dịch PGI thực sự hỗ trợ OpenACC ngay bây giờ, cho thẻ NVIDIA GPU.

3

Nếu bạn sử dụng MATLAB, nó trở nên khá đơn giản để sử dụng GPU cho máy tính kỹ thuật (tính toán ma trận và toán học/số crunching 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

1

Tôi cũng quan tâm đến chủ đề này và lập trình song song. Và tôi đã tìm thấy link sau đây, vui lòng xem tại Udacity.com!

Các vấn đề liên quan