У меня есть относительно небольшая часть кода, которая имеет дело с огромными наборами данных, которые я уже распараллелил с использованием 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 или лучше?
(Прошу прощения, если вышеизложенное немного не по теме, если кто-то считает, что, возможно, они могут указать мне лучший форум, чтобы задать эти вопросы)