Я намагаюся отримати більше процесорних потужностей з моєї сітки.
Я використовую всі процесори / ядра, чи можна використовувати графічний процесор за допомогою C #.
Хтось знає будь-які бібліотеки чи отримав зразок коду?
Я намагаюся отримати більше процесорних потужностей з моєї сітки.
Я використовую всі процесори / ядра, чи можна використовувати графічний процесор за допомогою C #.
Хтось знає будь-які бібліотеки чи отримав зразок коду?
Відповіді:
[ Редагувати OCT 2017, оскільки навіть ця відповідь стає досить старою ]
Більшість із цих відповідей досить старі, тому я подумав, що я б оновлював резюме того, де я думаю, що кожен проект:
GPU.Net (TidePowerd) - я спробував це 6 місяців тому чи так, і він налагодив свою роботу, хоча це зайняло трохи роботи. Перетворює код ядра C # в cuda під час компіляції. На жаль, їх веб-сайт не працює, а їх github не оновлювався протягом кількох років, що може означати, що проект мертвий ....
Cudafy - з відкритим кодом та дуже простий у використанні. Перетворює код ядра C # в cuda під час виконання (з можливістю серіалізації та кешування). Можна легко запустити один і той же код ядра в процесорі (в основному для налагодження). Підтримується кілька графічних процесорів. Тут доступні більше прикладів, ніж інші. Код котла, на який посилаються інші відповіді, мінімальний, і, в моєму випадку, принаймні допоміг мені зрозуміти, як працює код. Тільки Куда / Нвідія. На жаль, схоже, що вони не оновлювали свої рішення також пару років (остання фіксація у 2015 році - підтримка cuda 7.0).
Гібридизатор . Комерційне рішення, що компілює C # на CUDA. Надає безкоштовне видання для спільноти на ринку візуальної студії та зразки на github .
Комерційне рішення AleaGPU з безкоштовним виданням для споживачів GPUS. Деталі див. У коментарях Даніеля.
Brahma - запускає вирази LINQ через OpenCL (тому підтримує також AMD). Не так багато документації / прикладів. Останнє оновлення в 2011 році.
C $ - остання розробка була понад 10 років тому ...
Microsoft Accelerator - подібне схоже, він більше не активно розробляється.
деякі інші ( C ++ AMP , OpenTK - мертвий / Cloo ) - багато з них є лише прив'язкою - тобто дозволяють викликати GPU з C #, але ваш код ядра (код, який насправді запускається на GPU) повинен бути записаний у C або OpenCL, тобто ви повинні використовувати (і вивчати) іншу мову.
Як я вже сказав, я б рекомендував Cudafy над усіма іншими - якби він міг працювати як на OpenCL, так і на Cuda, це було б ідеально.
EDIT SEP 2013 Cudafy тепер дозволяє компілювати як для CUDA, так і для OpenCL, тому буде запускатися однаковий код C # на всіх графічних процесорах. Це звучить фантастично, хоча я ще не перевіряв компіляцію OpenCL.
Microsoft Research Accelerator була бібліотекою GPU .NET GP.
Я знайшов Brahma ... Тут також є постачальник GPGPU, який дозволяє запускати методи на GPU ... Дякую за запитання ... Сьогодні дізнався щось нове. :)
Чи можу я порекомендувати XNA Game Studio як можливий шлях для вивчення? Він, очевидно, орієнтований на написання ігор, але надає вам керований доступ до вашої відеокарти та набагато кращий доступ до функцій перерахування можливостей та розробки шейдерів, ніж раніше, наприклад, в Direct DirectX. Існують також способи комбінування WinForms та XNA в гібридних програмах:
http://www.ziggyware.com/news.php?readmore=866
Вам доведеться докласти певних зусиль для вивчення шейдерного програмування (XNA підтримує HLSL), але це може бути простішим підходом, ніж вивчення конкретного рішення для постачальника, такого як CUDA nVidia. Перевага полягає в тому, що ви можете програмувати в 100% керованому середовищі. Ось кілька посилань HLSL:
http://www.ziggyware.com/weblinks.php?cat_id=9
Сайт GPGPU також є рекомендованим пунктом призначення для програмування GPU загального призначення:
Удачі!
Як щодо http://www.tidepowerd.com/ GPU.NET?
Ось ще один: CUDAfy . Це виглядає як GPU.Net, оскільки щось таке просте, як метод-атрибут може спричинити запуск всього методу на GPU. Але на відміну від GPU.Net, CUDAfy є безкоштовним та відкритим.
Схоже, GPU.Net не вимагає кодової кодової панелі (згідно зі своїми документами, він "вводиться автоматично інструментом збирання") , тоді як CUDAfy робить.
Ось приклад створення програми за допомогою CUDAfy.
Ну це досить давнє запитання, і оскільки його задали, речі сильно змінилися.
Ще один варіант використання .Net для запису коду GPU, про який ніхто не згадував у відповідях у Alea GPU . Він охоплює C #, F # і VB.
Професійне середовище розробки програмного забезпечення для графічних процесорів для .NET та Mono. Воістину крос-платформа
На офіційному сайті F # Alea є першим варіантом використання F # в програмуванні GPGPU.
Для ознайомлення з цією рамкою пропоную ознайомитись із її вичерпним переліком прикладів .
Крім Брахми, погляньте на C $ (вимовляється "C Bucks"). З їх сайту CodePlex :
Метою [C $] є створення єдиної мови та системи для безшовного паралельного програмування на сучасних GPU та процесорах.
Він заснований на C #, оцінюється ліниво і націлений на кілька моделей прискорювачів:
В даний час перелік призначених архітектур включає GPU, багатоядерний процесор, Multi-GPU (SLI, CrossFire) і Multi-GPU + Multi-CPU Hybrid Architecture.
У місті є нове рішення Microsoft - C ++ AMP ( тут представлено ).
Використовувати з C # можна через P / Invoke, як показано тут для настільних додатків, і тут для (не називайте його) програм метро.
Редагувати: Слід зазначити, що C ++ AMP має відкриту специфікацію , це означає, що це не обов'язково лише для компілятора MS або просто для Windows.
Редагувати: Мабуть, технологія зараз перебуває у "режимі обслуговування", тобто вони виправляють помилки, але не активно розвиваються.
Програмне забезпечення CenterSpace має обчислення на основі GPU у своїх бібліотеках NMath, які ви можете додати до проекту C #. Це комерційний продукт.
Якщо ви збираєтеся застосувати власні алгоритми, для яких потрібні власні ядра:
Нещодавно я завантажив мій проект з відкритим кодом у цей сховище github, який використовує OpenCL.
Що це робиться (ви можете перевірити і на його сторінці вікі) - це вибір декількох пристроїв, що підтримують OpenCL, і рядок ядра від користувача, і створити обгортки масивів C # або C ++, а потім обчислити, використовуючи всі, за допомогою автоматичного балансира завантаження та трубопровід (щоб приховати затримки), щоб отримати добру ефективність з ПК.
Ось приклад його використання (1024 робочих теми, розподілені на всі пристрої, кожен з яких працює з одним і тим же кодом, але використовують різні дані та threadId):
// select all GPUs and all CPUs in same pc
ClNumberCruncher gpuCpu = new ClNumberCruncher(AcceleratorType.GPU | AcceleratorType.CPU, @"
__kernel void distributeTanh(__global float * data,__global int * data2)
{
int threadId=get_global_id(0);
data[threadId]=tanh(data[threadId]);
data2[threadId]=threadId;
}
");
// a wrapper that can hold C# or C++ arrays
ClArray<float> data = new ClArray<float>(1024);
ClArray<int> data2 = new int[1024];
// load-balances "distributeTanh" on all devices more fairly
// at each repeatation of this line with same compute-id(1 here)
data.nextParam(data2).compute(gpuCpu, 1, "distributeTanh", 1024);
// threadId in kernel receives unique continuous id value for all work
// either it is in cpu or gpu doesn't matter
// compute method also has parameters to enable pipelining to
// elliminate buffer copy latencies or compute latencies
коли всі більше не використовуються, вони випускають усі ресурси C ++ зі своїми руйнівниками.
Але це не так вже й зріло, тому сміливо додайте будь-яку "проблему" на вкладці випусків github. Класи, що належать до multi-pc-cluster, не працюють і не перекладаються на англійську, але вони можуть використовувати принаймні всі пристрої в одному ПК.
WPF також використовує GPU, і ви можете додавати власні шейдери за допомогою HLSL.