Введение в программирование графического процессора

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

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

-Adam

Ответ 1

Откажитесь от CUDA от NVidia, IMO - это самая простая платформа для программирования GPU. Есть тонны прохладных материалов для чтения. http://www.nvidia.com/object/cuda_home.html

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

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

Ответ 2

  • Вы получаете программируемые вершины и пиксельные шейдеры, которые позволяют выполнять кода непосредственно на GPU манипулировать буферами, которые нарисовать. Эти языки (т. OpenGL GL Shader Lang и High Уровневые шейдеры Lang и DirectX эквиваленты ), являются синтаксисом стиля C и действительно легко использовать. Некоторые примеры HLSL можно найти здесь для игры XNA студия и Direct X. У меня нет любые приличные ссылки GLSL, но я уверен, что вокруг много. Эти шейдерные языки дают огромный количество мощности до манипулировать тем, что нарисовано на вершине или на пиксель, напрямую на графической карте, делая вещи как тени, освещение и цветение действительно легко реализовать.
  • Вторая вещь, которая приходит на ум, - это использовать openCL для кодирования нового линий графического процессора общего назначения. я не знаю, как это использовать, но мой понимание заключается в том, что openCL дает вы начинаете иметь возможность процессоров доступа на обоих графическая карта и обычный процессор. Это еще не основная технология, и, похоже, она управляется Apple.
  • CUDA кажется горячей темой. CUDA - это способ NVIDIA доступа к мощности GPU. Вот несколько закладок

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

CUDA - отличная основа для начала. Он позволяет записывать ядра GPGPU в C. Компилятор будет генерировать микрокод GPU из вашего кода и отправлять все, что работает на CPU, в ваш обычный компилятор. Это NVIDIA только, хотя и работает только на картах 8-й серии или лучше. Вы можете проверить зону CUDA, чтобы узнать, что с ним можно сделать. В CUDA SDK есть несколько отличных демонстраций. Документация, которая поставляется с SDK, является хорошей отправной точкой для написания кода. Он проведет вас через написание ядра умножения матрицы, которое станет отличным местом для начала.

Ответ 6

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

Он все еще находится на относительно ранних этапах (1.1 из этого ответа), но приобрел некоторую тягу в отрасли - например, он поддерживается на OS X 10.5 и выше.

Ответ 7

Попробуйте GPU ++ и libSh

Линия LibSh имеет хорошее описание того, как они привязывают язык программирования к графическим примитивам (и, очевидно, самим примитивам), а GPU ++ описывает все, что связано с примерами кода.

Ответ 8

Возможно, вам понравится GPGPU IDE, которая скрывает ненужную сложность для общих экспериментов с GPU. В настоящее время ядра могут быть запрограммированы для шейдеров OpenCL и/или GLSL.

Ответ 9

Еще один простой способ попасть в программирование графического процессора, не входя в 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.

Ответ 10

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

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

Ответ 11

Мне также интересна эта тема и параллельное программирование. И я нашел ссылку , пожалуйста, посмотрите Udacity.com!