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


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

  • что такое" hello world " эквивалент сообщества GPU?
  • что мне делать, куда мне идти, чтобы начать Программирование GPU для основных поставщиков GPU?

Адам

11 153

11 ответов:

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

Hello world будет делать любые вычисления с использованием GPU.

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

  1. вы получаете программируемых вершинных и пиксельные шейдеры, которые позволяют выполнять кода непосредственно на GPU, чтобы управлять буферами, которые быть нарисованным. Эти языки (т. е. Шейдеров в OpenGL по ГЛ Ланг и высокой Уровень шейдера Lang и эквиваленты DirectX ), синтаксис стиля C, и действительно простой в использовании. Некоторые примеры HLSL можно найти здесь для игры XNA студия и прямой X. У меня нет любые приличные ссылки GLSL, но я конечно, есть много вокруг. Эти шейдерный языки дают огромное количество силы манипулируйте тем, что рисуется в каждой вершине или на пиксельный уровень, напрямую на видеокарте, делая вещи как тени, освещение и цветение очень легко реализовать.
  2. второе, что приходит на ум-это использование openCL код для нового линий общего назначения процессора. Я не уверен, как это использовать, но мой понимание заключается в том, что openCL дает вы начинаете быть в состоянии процессоры доступа на обоих графика карта и нормальный процессор. Это еще не основная технология, и, похоже, она управляется Apple.
  3. CUDA кажется, это горячая тема. CUDA-это способ доступа nVidia к мощности GPU. здесь некоторые интро

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

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

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

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

посмотри ATI Stream Computing SDK. Он основан на BrookGPU разработан в Стэнфорде.

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

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

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

Он все еще находится на относительно ранних стадиях (1.1 по состоянию на этот ответ), но приобрел некоторую тягу в отрасли - например, он изначально поддерживается на OS X 10.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;
}

Edit: к сожалению, только компилятор PGI действительно поддерживает OpenACC прямо сейчас, для карт NVIDIA GPU.

попробовать GPU++ и libSh

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

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

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

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

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