Лучший способ использовать графический процессор

У меня есть относительно небольшая часть кода, которая имеет дело с огромными наборами данных, которые я уже распараллелил с помощью openmp, и я стремлюсь еще больше повысить производительность с помощью графического процессора. Программа на C++, разработанная под VS2015, работает исключительно на Windows и должна поддерживать 64-битные версии от 7 и выше на самых разнообразных графических процессорах, насколько это возможно. Технологии, которые я изучал до сих пор, включают AMP, OpenCL, HLSL и CUDA. Уже заданные вопросы, такие как этот с информативным ответом Эде Миллер, заставляют меня задаться вопросом, является ли AMP подходом, хотя это выглядит как самый простой вариант. Я отказываюсь от CUDA, так как это ограничивает меня в плане поддерживаемого оборудования, и я склоняюсь к OpenCL, в настоящее время прорабатывая следующую книгу. Таким образом, у меня есть следующие вопросы;

Является ли OpenCL хорошим подходом здесь, поскольку другие посты предполагают, что он также может быть на выходе?

Если я выберу OpenCL, желая поддерживать самый широкий спектр графических процессоров, лучше ли мне использовать версию OpenCL 1.x? Причина, по которой я спрашиваю это, заключается в том, что OpenCL.DLL, загруженная с последней версией CUDA SDK, составляет 1.9. Мне пришлось скачать Intel SDK для OpenCL, чтобы получить версию 2.x.

Если я перейду с OpenCL, что мне нужно распространять вместе с моим приложением (как минимум с OpenCL.DLL) и есть ли какие-либо проблемы с лицензированием? Будут ли драйверы по умолчанию для большинства карт поддерживать OpenCL и, если да, то какие версии?

Что касается вышесказанного, действительно ли я лучше с AMP, так как он работает с чем-нибудь, что имеет DirectX 11 или лучше?

(Извинения, если вышеупомянутое немного не по теме, если кто-то считает, что, возможно, они могли бы указать мне на лучший форум, чтобы задать эти вопросы)

1 ответ

Является ли OpenCL хорошим подходом здесь, поскольку другие посты предполагают, что он также может быть на выходе?

OpenCL, похоже, является наиболее широко поддерживаемой вычислительной платформой на GPU. Поддерживается nVidia, AMD и Intel. Работает также на большинстве мобильных платформ. Также доступен большой набор библиотек: ViennaCL, clBLast, clBlast, Boost-Compute и так далее.

Если я выберу OpenCL, желая поддерживать самый широкий спектр графических процессоров, лучше ли мне использовать версию OpenCL 1.x?

Да, в настоящее время самым безопасным является придерживаться 1.2 - и на самом деле этого более чем достаточно.

Все основные производители настольных GPU (Intel, AMD, nVidia) поддерживают как минимум OpenCL 1.2. Фактически, только nVidia не выпустила официальную поддержку 2.0 - она ​​все еще находится в стадии бета-тестирования.

Также обратите внимание, что некоторые старые графические процессоры будут поддерживать только OpenCL 1.2.

Другие вопросы по тегам