Программирование OpenCL и GPU "Дорожная карта"

Мне бы хотелось начать заявлять, что я ничего не знаю о программировании OpenCL/GPU, но я - программист С# (general.Net), не опасаясь С++, и я бы хотел изучить программирование OpenCL/GPU... мой вопрос:... где я начинаю?!? что я должен скачать?!? есть ли способ программирования OpenCL/GPU на Visual Studio (на С#)!?! как... привет всему миру... tks all

Ответ 1

Лучший сайт, который я нашел для четкого ознакомления с тем, как программирование GPU отличается от программирования ЦП, - это сайт:

http://www.macresearch.org/opencl

Несмотря на то, что эти видео сделаны с картами стиля NVIDIA, важные понятия:

  • много потоков, выполняющих одни и те же инструкции в режиме блокировки (даже если некоторый код написан с конструкциями if-else) и

  • доступ к объединенной памяти

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

Ответ 2

http://developer.amd.com/zones/OpenCLZone/pages/default.aspx

Предполагая, что вы хотите сделать opencl, а не cuda, тогда у этого есть целая куча интро-видеоуроков. В NVidia есть аналогичный набор, хотя у них больше данных на основе CUDA.

Если вы хотите сделать GPL-программирование, то получить пример приложения, который может вывести код opencl/cuda в графический процессор, является простой частью. Вы также должны изучить язык opencl/cuda, тогда вам нужно научиться думать об алгоритмах параллельно и как тестировать/измерять результаты.

Нет кнопки "Использовать GPU", которая мгновенно ускоряет ваш код на 100 раз

Ответ 3

Я бы сказал, OpenTK и их привязки С#, чтобы получить подсказку OpenCL. Посмотрите сайт OpenCL, чтобы получить стандартные привязки C или С++.

Изучение OpenCL, там различные ресурсы.. не тонна. Я нашел после этого полезный.

Ответ 4

Прошу прощения за то, что я опаздываю на 7 лет. Но вот библиотека С# с открытым исходным кодом для gpgpu для написания собственных ядер OpenCL:

https://github.com/tugrul512bit/Cekirdekler/wiki/Beginning

и мир привет как традиция:

ClNumberCruncher  gpus= new ClNumberCruncher(
    ClPlatforms.all().devicesAmd().gpus(), @"
         __constant char text[12] = {'h','e','l','l','o',' ','w','o','r','l','d',' '};
         __kernel void hello(__global char * arr)
         {
              printf(text);
         }
    ");
gpus.performanceFeed = true;
ClArray<byte> array = new ClArray<byte>(5,1);
array.compute(gpus, 1, "hello", 5, 1);
array.compute(gpus, 1, "hello", 5, 1);
array.compute(gpus, 1, "hello", 5, 1);

это результат:

hello world
hello world
hello world
hello worldhello world

Compute-ID: 1  ----- Load Distributions:  [40.0%] - [60.0%] -----------------------------------------------------
Device 0(gddr): Oland                              ||| time: 29.47ms, workitems: 2
Device 1(gddr): gfx804                             ||| time: 29.76ms, workitems: 3
-----------------------------------------------------------------------------------------------------------------

hello worldhello world
hello world
hello world
hello world

Compute-ID: 1  ----- Load Distributions:  [40.0%] - [60.0%] -----------------------------------------------------
Device 0(gddr): Oland                              ||| time: 1.64ms, workitems: 2
Device 1(gddr): gfx804                             ||| time: 1.33ms, workitems: 3
-----------------------------------------------------------------------------------------------------------------

hello worldhello world
hello world
hello world
hello world

Compute-ID: 1  ----- Load Distributions:  [40.0%] - [60.0%] -----------------------------------------------------
Device 0(gddr): Oland                              ||| time: 1.08ms, workitems: 2
Device 1(gddr): gfx804                             ||| time: .87ms, workitems: 3
-----------------------------------------------------------------------------------------------------------------

он может выполнять кучу вещей от конвейерной обработки до планирования пула задач.