Pengenalan pemrograman GPU [ditutup]

176

Setiap orang memiliki superkomputer paralel besar yang besar ini di desktop mereka dalam bentuk kartu grafis GPU.

  • Apa yang setara dengan "hello world" dari komunitas GPU?
  • Apa yang harus saya lakukan, ke mana saya pergi, untuk memulai pemrograman GPU untuk vendor GPU utama?

-Adam

Adam Davis
sumber
1
Apakah Anda berbicara tentang GPGPU, atau kode grafis?
Menkboy
5
Dia berbicara tentang CUDA (API untuk GPU nVidia) dan teknik lainnya. Menggunakan unit FPU yang tersedia dalam GPU untuk pengkodean non-grafis.
Wedge
1
Sebagai referensi, GeForce 8800 generasi terakhir memiliki prosesor 128 stream yang beroperasi pada ~ 1,3 GHz, GTX 280 yang paling atas memiliki prosesor 240 stream, kinerja teoretis GPU ini adalah 0,5 dan 0,9 TeraFLOPS, masing-masing.
Wedge

Jawaban:

70

Lihat CUDA oleh NVidia, IMO itu platform paling mudah untuk melakukan pemrograman GPU. Ada banyak bahan keren untuk dibaca. http://www.nvidia.com/object/cuda_home.html

Hello world akan melakukan segala jenis perhitungan menggunakan GPU.

Semoga itu bisa membantu.

Nazgob
sumber
17
  1. Anda mendapatkan vertex dan pixel shaders yang dapat diprogram yang memungkinkan eksekusi kode secara langsung pada GPU untuk memanipulasi buffer yang harus ditarik. Bahasa-bahasa ini (yaitu GL Shader Lang OpenGL dan High Level Shader Lang dan DirectX's equivalents), adalah sintaks gaya C, dan sangat mudah digunakan. Beberapa contoh HLSL dapat ditemukan di sini untuk XNA game studio dan Direct X. Saya tidak punya referensi GLSL yang layak, tapi saya yakin ada banyak di sekitar. Bahasa shader ini memberikan kekuatan yang sangat besar untuk memanipulasi apa yang dapat ditarik pada level per-vertex atau per-pixel, langsung pada kartu grafis, membuat hal-hal seperti bayangan, pencahayaan, dan mekar sangat mudah diimplementasikan.
  2. Hal kedua yang terlintas dalam pikiran adalah menggunakan openCL untuk kode untuk baris baru GPU tujuan umum. Saya tidak yakin bagaimana cara menggunakan ini, tetapi pemahaman saya adalah bahwa openCL memberi Anda awal untuk dapat mengakses prosesor pada kartu grafis dan cpu normal. Ini bukan teknologi arus utama, dan tampaknya didorong oleh Apple.
  3. CUDA tampaknya menjadi topik hangat. CUDA adalah cara nVidia mengakses kekuatan GPU. Ini beberapa intro
DavidG
sumber
9

Saya pikir yang lain telah menjawab pertanyaan kedua Anda. Adapun yang pertama, "Hello World" dari CUDA, saya tidak berpikir ada standar yang ditetapkan, tetapi secara pribadi, saya akan merekomendasikan penambah paralel (yaitu program yang menjumlahkan bilangan bulat N).

Jika Anda melihat contoh "reduksi" dalam NVIDIA SDK, tugas dangkal yang sederhana dapat diperluas untuk menunjukkan berbagai pertimbangan CUDA seperti pembacaan gabungan, konflik bank memori, dan loop terbuka.

Lihat presentasi ini untuk info lebih lanjut:

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

biozinc
sumber
7

Lihatlah SDI Stream Computing SDK . Ini didasarkan pada BrookGPU dikembangkan di Stanford.

Di masa depan semua pekerjaan GPU akan distandarisasi menggunakan OpenCL . Ini adalah inisiatif yang disponsori Apple yang akan menjadi vendor kartu grafis netral.

grafik
sumber
7

OpenCL adalah upaya untuk membuat pustaka lintas platform yang mampu memrogram kode yang cocok untuk, antara lain, GPU. Hal ini memungkinkan seseorang untuk menulis kode tanpa mengetahui GPU apa yang akan dijalankan, sehingga membuatnya lebih mudah untuk menggunakan beberapa kekuatan GPU tanpa menargetkan beberapa jenis GPU secara khusus. Saya menduga itu tidak berkinerja seperti kode GPU asli (atau sebagai asli sebagai produsen GPU akan memungkinkan) tetapi tradeoff dapat sia-sia untuk beberapa aplikasi.

Ini masih dalam tahap yang relatif awal (1,1 pada jawaban ini), tetapi telah mendapatkan daya tarik dalam industri - misalnya didukung secara native pada OS X 10.5 dan di atasnya.

Adam Davis
sumber
6

CUDA adalah kerangka kerja yang sangat baik untuk memulai. Ini memungkinkan Anda menulis kernel GPGPU dalam C. Kompiler akan menghasilkan mikrokode GPU dari kode Anda dan mengirimkan semua yang berjalan pada CPU ke kompiler biasa Anda. Ini hanya NVIDIA dan hanya bekerja pada kartu 8-seri atau lebih baik. Anda dapat memeriksa zona CUDA untuk melihat apa yang dapat dilakukan dengannya. Ada beberapa demo hebat di CUDA SDK . Dokumentasi yang disertakan dengan SDK adalah titik awal yang cukup bagus untuk benar-benar menulis kode. Ini akan memandu Anda melalui penulisan kernel multiplikasi matriks, yang merupakan tempat yang bagus untuk memulai.

Jay Conrod
sumber
5

Cara mudah lain untuk masuk ke pemrograman GPU, tanpa masuk ke CUDA atau OpenCL, adalah melakukannya melalui OpenACC .

OpenACC bekerja seperti OpenMP, dengan arahan compiler (seperti #pragma acc kernels) untuk mengirim pekerjaan ke GPU. Misalnya, jika Anda memiliki lingkaran besar (hanya yang lebih besar yang benar-benar diuntungkan):

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

Sunting: sayangnya, hanya kompiler PGI yang benar-benar mendukung OpenACC sekarang, untuk kartu NVIDIA GPU.

Kyle Niemeyer
sumber
3

Coba GPU ++ dan libSh

Tautan LibSh memiliki deskripsi yang baik tentang bagaimana mereka mengikat bahasa pemrograman ke primitif grafis (dan tentu saja, primitif itu sendiri), dan GPU ++ menjelaskan tentang apa semua itu, baik dengan contoh kode.

gbjbaanb
sumber
3

Jika Anda menggunakan MATLAB, menjadi sangat mudah untuk menggunakan GPU untuk komputasi teknis (perhitungan matriks dan penghitungan angka / matematika berat). Saya merasa berguna untuk penggunaan kartu GPU di luar game. Lihat tautan di bawah ini:

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

Chetan Rawal
sumber