Программирование GPGPU в .Net - Microsoft Accelerator VS OpenCL.net [VS Others] - PullRequest
4 голосов
/ 13 сентября 2011

Я занимаюсь разработкой программы (в .Net), которая имеет много обработки изображений (например, 2D Convolutions, ...), и я хочу сделать их с GPGPU (параллельная обработка) Итак, у меня есть несколько вариантов: Microsoft Accelerator, OpenCL.Net, ... Какой из них лучше для меня?

Некоторые важные для меня вещи: скорость, совместимость (например, если GPU этого не поддерживает, что происходит?), Простота в освоении, работа с Nvidia и ATI, ...

И я слышал, что могу создать свою собственную функцию в OpenCL и запустить ее для многих ячеек массива, но я не знаю, смогу ли я сделать это в Microsoft Accelerator или мне придется работать с ее функциями ...

Ответы [ 2 ]

2 голосов
/ 13 сентября 2011

Microsoft Accelerator и OpenCL поддерживают как CPU, так и GPU и не зависят от производителя (то есть работают на картах ATI и nVidia).

В случае OpenCL вам придется отдельно установить OpenCL на пользовательские машины (включенные в nVidia (поддерживает gvus от nvidia)) и ATI (поддерживает ati gpus и любые процессоры), загружаемые для Intel (поддержка cpus). Можно было бы просто сохранить AMD OpenCL.dll в комплекте с вашим программным обеспечением для использования в качестве откатного ЦП. OpenCL более развит (больше функций, меньше ошибок): он появился ранее, является кросс-платформенным и основан на существующих технологиях (CUDA, Brook +). OpenCL позволяет точно контролировать то, что вы на самом деле делаете, так что это быстрее, но немного сложнее.

Microsoft Accelerator, как я понял, работает на любом графическом процессоре с поддержкой DirectX (== любой современный графический процессор) и любом 64-разрядном процессоре. Он более плавно интегрируется в существующий код (без дополнительных файлов и множества библиотечных вызовов), но это не сказывается на производительности. MS Accelerator позволит вам быстрее реализовать ваши функции (это выглядит довольно просто), так что может быть хорошим началом. Но если он не показывает отличную производительность, вы все равно должны попробовать OpenCL, он мог бы работать лучше.

Итак, я бы посоветовал вам изучить OpenCL, поскольку: 1) OpenCL ближе к аппаратной архитектуре GPU, поэтому: а) он позволяет вам достигать более высокой производительности, б) вы можете писать более сложный код, в) вы будете учиться как все это работает; 2) Есть больше информации / учебники / хаки в Интернете; 3) Это кроссплатформенный (может быть, не очень хорошая функция в вашем случае, но все же); 4) OpenCL очень похож на CUDA, поэтому вы изучите сразу две технологии, связанные с GPU.

1 голос
/ 03 декабря 2011

Одним из вариантов является C ++ AMP, с которым вы можете легко взаимодействовать из .NET http://www.danielmoth.com/Blog/NET-Access-To-The-GPU-For-Compute-Purposes.aspx

Приветствия

Daniel

...