Вступ до програмування GPU [закрито]


176

Кожен має на своєму робочому столі цей величезний масово паралельний суперкомп'ютер у вигляді графічної карти GPU.

  • Що таке "привіт світ" еквівалент спільноти GPU?
  • Що робити, куди мені йти, щоб розпочати програмування графічного процесора для великих виробників GPU?

-Адам


1
Ви говорите про GPGPU або графічне кодування?
Менкбой

5
Він говорить про CUDA (API для nVidia GPU) та інші методи. Використання блоків FPU, доступних у графічних процесорах, для кодування не графіки.
Клин

1
Для довідки, останнє покоління GeForce 8800 має 128 потокових процесорів, що працюють на ~ 1,3 ГГц, у верхній частині лінійки GTX 280 є 240 потокових процесорів, теоретична продуктивність цих графічних процесорів становить 0,5 та 0,9 TeraFLOPS відповідно.
Клин

Відповіді:


70

Перегляньте CUDA від NVidia, IMO - це найпростіша платформа для програмування GPU. Є багато тонн класних матеріалів для читання. http://www.nvidia.com/object/cuda_home.html

Привіт світові було б робити будь-які обчислення за допомогою GPU.

Сподіваюся, що це допомагає.


17
  1. Ви отримуєте програмовані шейдери вершин та пікселів, які дозволяють виконувати код безпосередньо на GPU для маніпулювання буферами, які слід намалювати. Ці мови (тобто GL Shader Lang OpenGL та Shader Lang високого рівня та еквіваленти DirectX) є синтаксисом стилю C і дуже прості у використанні. Деякі приклади HLSL можна знайти тут для ігрової студії XNA та Direct X. У мене немає гідних посилань на GLSL, але я впевнений, що їх багато. Ці шейдерські мови дають величезну кількість сил для маніпулювання тим, що малюється на рівні вершини або на піксель, безпосередньо на графічній карті, що робить речі на зразок тіней, освітлення та цвітіння дійсно простими у виконанні.
  2. Друге, що спадає на думку - це використання openCL для кодування нових ліній GPU загального призначення. Я не впевнений, як це використовувати, але я розумію, що openCL дає вам початок доступу до процесорів як на графічній карті, так і на звичайному процесорі. Це ще не основна технологія, і, здається, керує компанія Apple.
  3. CUDA, здається, є гарячою темою. CUDA - це спосіб отримання доступу до потужності GPU від nVidia. Ось кілька вступів

9

Я думаю, що інші відповіли на ваше друге запитання. Щодо першого, "Hello World" CUDA, я не думаю, що існує встановлений стандарт, але особисто я рекомендував би паралельне додавання (тобто програму, яка підсумовує N цілих чисел).

Якщо ви подивитесь на приклад "скорочення" в NVIDIA SDK, поверхово просте завдання може бути розширено, щоб продемонструвати численні міркування CUDA, такі як зв'язані читання, конфлікти в банку пам'яті та розкручування циклу.

Дивіться цю презентацію для отримання додаткової інформації:

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


7

Погляньте на SDK Stream Computing SDK . Він заснований на BrookGPU розробленому в Стенфорді.

Надалі вся робота GPU буде стандартизована за допомогою OpenCL . Це спонсорована Apple організація, яка буде нейтральною для постачальника відеокарт.


7

OpenCL - це спроба зробити бібліотеку між платформами, здатну програмувати код, придатний, серед іншого, для графічних процесорів. Це дозволяє писати код, не знаючи, на якому графічному процесорі він буде працювати, тим самим полегшуючи використання деяких потужностей GPU, не орієнтуючись на декілька типів GPU. Я підозрюю, що він не настільки ефективний, як нативний графічний код GPU (або настільний, як це дозволять виробники GPU), але компроміс може бути вартим для деяких застосувань.

Він все ще знаходиться на досить ранніх стадіях (1,1 станом на цю відповідь), але отримав певну тягу в галузі - наприклад, він підтримується в ОС Windows X 10.5 і вище.


6

CUDA - це відмінна основа для початку. Він дозволяє писати ядра GPGPU в C. Компілятор буде виробляти мікрокод GPU з вашого коду і надсилати все, що працює на процесорі, до вашого звичайного компілятора. Це лише NVIDIA і працює лише на картах 8 серій або вище. Ви можете оглянути зону CUDA, щоб побачити, що можна зробити з нею. У SDK CUDA є кілька великих демонстрацій . Документація, яка постачається разом із 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.


3

Спробуйте GPU ++ та libSh

Посилання LibSh містить хороший опис того, як вони прив’язували мову програмування до графічних примітивів (і, очевидно, самих примітивів), а GPU ++ описує, що це стосується, як із прикладами коду.


3

Якщо ви використовуєте MATLAB, використовувати GPU для технічних обчислень стає досить просто (матричні обчислення та велике скорочення математики / чисел). Я вважаю його корисним для використання графічних карт поза межами ігор. Перевірте посилання нижче:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.