Введение в программирование на GPU [закрыто]

176

У каждого есть этот огромный массивно распараллеленный суперкомпьютер на рабочем столе в виде графического процессора.

  • Что такое «привет мир» эквивалент сообщества GPU?
  • Что мне делать, куда мне пойти, чтобы начать программировать GPU для основных поставщиков GPU?

-Адам

Адам Дэвис
источник
1
Вы говорите о GPGPU или графическом кодировании?
Menkboy
5
Он говорит о CUDA (API для графических процессоров nVidia) и других методах. Использование блоков 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

Привет мир будет делать любые расчеты с использованием графического процессора.

Надеюсь, это поможет.

Nazgob
источник
17
  1. Вы получаете программируемые вершинные и пиксельные шейдеры, которые позволяют выполнять код непосредственно на графическом процессоре, чтобы манипулировать буферами, которые должны быть отрисованы. Эти языки (т. Е. OpenGL GL Shader Lang и High Level Shader Lang и эквиваленты DirectX), являются синтаксисом стиля C и действительно просты в использовании. Некоторые примеры HLSL можно найти здесь для игровой студии XNA и Direct X. У меня нет приличных ссылок на GLSL, но я уверен, что их много. Эти шейдерные языки дают огромные возможности для управления тем, что рисуется на уровне каждой вершины или каждого пикселя, непосредственно на видеокарте, что делает такие вещи, как тени, освещение и цветение, действительно простыми в реализации.
  2. Второе, что приходит на ум, - это использование openCL для кодирования новых линий графических процессоров общего назначения. Я не уверен, как это использовать, но я понимаю, что openCL дает вам возможность получить доступ к процессорам как на видеокарте, так и на обычном процессоре. Это еще не мейнстримная технология, и, похоже, ей движет Apple.
  3. CUDA, кажется, горячая тема. CUDA - это способ доступа nVidia к мощности графического процессора. Вот несколько вступлений
DavidG
источник
9

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

Если вы посмотрите пример «сокращения» в NVIDIA SDK, поверхностно простую задачу можно расширить, чтобы продемонстрировать многочисленные соображения CUDA, такие как объединенное чтение, конфликты в банке памяти и развертывание цикла.

Смотрите эту презентацию для получения дополнительной информации:

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

Биоцинк
источник
7

Взгляните на ATI Stream Computing SDK . Он основан на BrookGPU, разработанном в Стэнфорде.

В будущем вся работа на GPU будет стандартизирована с использованием OpenCL . Это спонсируемая Apple инициатива, которая будет нейтральной в отношении производителей видеокарт.

графика
источник
7

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

Он все еще находится на относительно ранних стадиях (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) для отправки работы в графический процессор. Например, если у вас большой цикл (на самом деле выигрывают только более крупные):

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 ++ описывает суть всего, и с примерами кода.

gbjbaanb
источник
3

Если вы используете MATLAB, становится довольно просто использовать графические процессоры для технических вычислений (матричные вычисления и сложное вычисление математических чисел). Я считаю это полезным для использования графических карт вне игр. Проверьте ссылку ниже:

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

Четан Равал
источник