Я пытаюсь получить больше вычислительной мощности из моей сетки.
Я использую все процессоры / ядра, возможно ли использовать графический процессор с C #.
Кто-нибудь знает какие-либо библиотеки или получил пример кода?
[ Изменить октябрь 2017 года, так как даже этот ответ становится довольно старым ]
Большинство из этих ответов довольно старые, поэтому я решил дать обновленную сводку о том, где, по моему мнению, находится каждый проект:
GPU.Net (TidePowerd) - я попробовал это 6 месяцев назад или около того, и все заработало, хотя потребовалось немного работы. Преобразует код ядра C # в cuda во время компиляции. К сожалению, их веб-сайт не работает, а github не обновлялся в течение нескольких лет, что может указывать на то, что проект мертв ....
Cudafy - с открытым исходным кодом и очень прост в использовании. Преобразует код ядра C # в cuda во время выполнения (с возможностью сериализации и кэширования). Можно легко запустить тот же код ядра на процессоре (в основном для отладки). Поддерживает несколько графических процессоров. Больше примеров доступно, чем другие здесь. Стандартный код, на который ссылаются другие ответы, минимален, и в моем случае, по крайней мере, помог мне понять, как работает код. Только Cuda / Nvidia. К сожалению, похоже, что они тоже не обновляли свои решения в течение нескольких лет (последний коммит в 2015 году - поддержка cuda 7.0).
Hybridizer . Коммерческое решение компиляции C # для CUDA. Предоставляет бесплатную публикацию сообщества на рынке визуальных студий и примеры на github .
AleaGPU Коммерческое решение с бесплатной общественной версией для потребителей GPUS. Смотрите комментарии Даниила для деталей.
Brahma - запускает выражения LINQ через OpenCL (поэтому поддерживает и AMD). Не много документации / примеров. Последнее обновление в 2011 году.
C $ - последняя разработка была более 10 лет назад ...
Microsoft Accelerator - похоже, не похоже, что он активно разрабатывается.
некоторые другие ( C ++ AMP , OpenTK - dead / Cloo ) - многие из них являются просто привязками - то есть позволяют вам вызывать GPU из C #, но код вашего ядра (код, который фактически выполняется на GPU) должен быть написан на C или OpenCL, что означает, что вы должны использовать (и изучать) другой язык.
Как я уже сказал, я бы порекомендовал Cudafy всем остальным - если бы он мог работать как на OpenCL, так и на Cuda, это было бы идеально.
РЕДАКТИРОВАТЬ SEP 2013 Cudafy теперь позволяет вам компилировать как для CUDA, так и для OpenCL, поэтому будет запускать один и тот же код C # на всех графических процессорах. Это звучит фантастически, хотя я еще не тестировал компиляцию OpenCL.
Microsoft Research Accelerator был библиотекой графического процессора .NET GP.
источник
Я нашел Брахму ... У него также есть провайдер GPGPU, который позволяет запускать методы на GPU ... Спасибо за вопрос ... Сегодня узнал что-то новое. :)
источник
Могу ли я порекомендовать XNA Game Studio в качестве возможного пути для исследования? Он явно предназначен для написания игр, но предоставляет вам управляемый доступ к вашей видеокарте и гораздо лучший доступ к функциям перечисления возможностей и разработке шейдеров, чем это было раньше, например, в Managed DirectX. Существуют также способы объединения WinForms и XNA в гибридные приложения:
http://www.ziggyware.com/news.php?readmore=866
Вам придется приложить некоторые усилия для обучения программированию шейдеров (XNA поддерживает HLSL), но это может быть более простой подход, чем изучение решения для конкретного поставщика, такого как nVidia CUDA. Преимущество в том, что вы можете программировать в 100% управляемой среде. Вот некоторые ссылки HLSL:
http://www.ziggyware.com/weblinks.php?cat_id=9
Сайт GPGPU также является рекомендуемым местом для программирования GPU общего назначения:
http://gpgpu.org/
Удачи!
источник
Как насчет http://www.tidepowerd.com/ GPU.NET?
источник
Вот еще один: CUDAfy . Это звучит как GPU.Net, в том, что что-то такое простое, как метод-атрибут, может привести к тому, что весь метод будет запущен на GPU. Но в отличие от GPU.Net, CUDAfy является бесплатным и открытым исходным кодом.
GPU.Net, по-видимому, не требует стандартного кода (согласно их документам, он «внедряется автоматически инструментом сборки») , в то время как CUDAfy делает это.
Вот пример построения приложения с помощью CUDAfy.
источник
Ну, это довольно старый вопрос, и с тех пор, как его спросили, многое изменилось.
Еще один вариант использования .Net для написания кода GPU, о котором никто не упоминал в ответах в Alea GPU . Он охватывает C #, F # и VB.
На официальном сайте F # Alea - первый вариант использования F # в программировании GPGPU.
Чтобы познакомиться с этой структурой, я предлагаю взглянуть на ее исчерпывающий список примеров .
источник
В дополнение к Брахме, взгляните на C $ (произносится «C Bucks»). С их сайта CodePlex :
Он основан на C #, оценивается лениво и нацелен на несколько моделей ускорителей:
источник
В городе появилось новое решение Microsoft - C ++ AMP (введение здесь ).
Использование из C # будет осуществляться через P / Invoke, как показано здесь для настольных приложений и здесь (не называйте это) приложениями Metro.
Изменить: я должен отметить, что C ++ AMP имеет открытую спецификацию , что означает, что это не обязательно только для компилятора MS, или просто для Windows.
Изменить: По-видимому, технология сейчас находится в «режиме обслуживания», то есть они исправляют ошибки, но не активно развиваются.
источник
Управлял DirectX как-то, может работать
источник
Если ваши графические процессоры одного бренда, вы можете получить поддержку GPGPU от поставщика, либо через CvA Nvidia, либо через ATI Stream. AFAIK, они предоставляют библиотеки DLL, которые вы можете использовать через P / Invoke.
источник
Программное обеспечение CenterSpace имеет вычисления на основе графического процессора в своих библиотеках NMath, которые вы можете добавить в проект C #. Это коммерческий продукт.
источник
Если вы собираетесь применять свои собственные алгоритмы, для которых нужны собственные ядра:
Я недавно загрузил свой проект с открытым исходным кодом в этот репозиторий github, который использует OpenCL.
Что он делает (вы можете проверить это на его вики-странице), выбирая несколько устройств с поддержкой OpenCL и строку ядра от пользователя и создавая обертки для массивов C # или C ++, а затем вычисляет с использованием all с помощью автоматического балансировщика нагрузки и pipeliner (чтобы скрыть задержки), чтобы получить хорошую эффективность от ПК.
Вот пример его использования (1024 рабочих элемента, разделенных на все устройства, на каждом из которых выполняется один и тот же код, но используются разные данные и threadId):
когда все больше не используются, они освобождают все ресурсы C ++ со своими деструкторами.
Но это не так уж и дорого, так что не стесняйтесь добавлять любые "проблемы" на вкладке проблем github. Классы, относящиеся к нескольким компьютерным кластерам, не работают и еще не переведены на английский, но могут использовать как минимум все устройства в одном компьютере.
источник
WPF также использует графический процессор, и вы можете добавлять собственные шейдеры, используя HLSL.
источник