Мне бы хотелось начать заявлять, что я ничего не знаю о программировании OpenCL/GPU, но я - программист С# (general.Net), не опасаясь С++, и я бы хотел изучить программирование OpenCL/GPU... мой вопрос:... где я начинаю?!? что я должен скачать?!? есть ли способ программирования OpenCL/GPU на Visual Studio (на С#)!?! как... привет всему миру... tks all
Программирование OpenCL и GPU "Дорожная карта"
Ответ 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
-----------------------------------------------------------------------------------------------------------------
он может выполнять кучу вещей от конвейерной обработки до планирования пула задач.