Запуск OpenCL на оборудовании разных производителей

StackOverflow https://stackoverflow.com/questions/1388371

  •  21-09-2019
  •  | 
  •  

Вопрос

Я экспериментировал с реализацией ATI OpenCL в бета-версии Stream 2.0.OpenCL в текущей бета-версии пока использует только процессор, следующая версия должна поддерживать ядра графического процессора.Я скачал Stream, потому что на моей рабочей машине установлен графический процессор ATI.

Я пишу программное обеспечение, которое получит огромную выгоду от использования графического процессора.Однако это программное обеспечение работает на машинах клиентов, я не могу позволить себе роскошь (как это бывает во многих научных вычислительных средах) выбирать именно то оборудование, для которого нужно разрабатывать, и оптимизировать его.Итак, мой вопрос: если я буду распространять реализацию ATI OpenCL вместе со своим приложением, будет ли это означать, что оно никогда не сможет использовать, например,Видеокарты Нвидиа?А если я использую NVidia OpenCL SDK, он никогда не будет оптимально работать на чипах AMD (учитывая связь ATI/AMD)?

Другими словами, кто в конечном итоге несет ответственность за реализацию OpenCL?Смогут ли пользователи, например,установить «драйвер» OpenCL для своей видеокарты NVidia вместе с «драйвером», который обеспечивает оптимальную производительность процессора AMD?

Кстати, есть ли какие-нибудь хорошие/активные форумы поддержки OpenCL, кроме досок объявлений Khronos, или туда стоит обратиться?Я видел, что у ATI есть плата, а у NVidia, предположительно, есть своя, где тусуется сообщество пользователей/разработчиков OpenCL?Оно уже консолидировалось в одном месте?

Это было полезно?

Решение

В конечном итоге OpenCL будет работать так же, как OpenGL.То есть пользователи будут устанавливать текущие драйверы от своих поставщиков оборудования (ATI, NVIDIA, Intel).Вы, как разработчик, просто будете использовать библиотеку OpenCL при создании своих приложений.Когда пользователи запускают ваше приложение, оно будет перенаправляться на библиотеки соответствующего поставщика, предоставляемые драйверами.

Так оно и будет работать, но пока это не работает таким образом.

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

Другие советы

Я знаю, что это старый вопрос со старыми ответами выше.Думаю, я бы обновил его, добавив актуальный ответ.

Да, одна реализация ядер и кода OpenCL сегодня будет работать на самых разных устройствах с правильно написанным кодом перечисления платформ и устройств.Написать правильный код перечисления платформ и устройств довольно легко, сложная часть — выбрать платформу или устройство.Вероятно, вам следует представить в своем приложении параметр конфигурации, где пользователь может выбрать один, или запустить микротест для каждого из них, динамически выбрать один и кэшировать результаты тестирования.

Люди могут и будут иметь более одной платформы.Например, в моей системе установлена ​​GTX 580 SLI, поэтому в ней есть два устройства на платформе NVidia.Он также оснащен Intel OpenCL SDK, поэтому мой процессор CoreI7 990x Extreme также выступает в качестве устройства на платформе Intel.

Да, двоичный файл, разработанный и собранный с использованием, например, NVidia OpenCL SDK, будет работать на ATI или Intel OpenCL, и наоборот.Больше не нужно об этом беспокоиться.

Очевидно, что у конечного пользователя может вообще не быть OpenCL, поэтому вам может потребоваться отложенная загрузка или загрузка библиотеки opencl.dll и динамическая ссылка.

Я настоятельно рекомендую протестировать ваш код с помощью Intel OpenCL SDK, на графических процессорах NVidia И на графических процессорах AMD.Вероятно, вы обнаружите ошибки, которые вызывают проблемы на одной платформе, но отлично работают на других.Вы также, вероятно, обнаружите, что абсолютно хороший код загадочным образом не дает правильных результатов на одной из этих платформ из-за ошибок в драйверах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top