Дорожная карта программирования OpenCL и GPU - PullRequest
11 голосов
/ 13 декабря 2010

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

Ответы [ 4 ]

9 голосов
/ 13 декабря 2010

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

http://www.macresearch.org/opencl

Несмотря на то, что в этих видеороликах показаны карты в стиле NVIDIA, важны следующие концепции:

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

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

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

7 голосов
/ 13 декабря 2010

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

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

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

Нет кнопки «использовать графический процессор», которая мгновенно делает ваш код в 100 раз быстрее

4 голосов
/ 28 января 2011

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

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

1 голос
/ 19 июня 2017

Извините за опоздание на 7 лет. Но вот библиотека C # 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
-----------------------------------------------------------------------------------------------------------------

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

...