Запуск OpenCL на оборудовании от смешанных поставщиков

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

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

Иными словами, кто в конечном итоге несет ответственность за реализацию OpenCL? Будут ли пользователи иметь возможность, например, установить драйвер OpenCL для своей видеокарты NVidia вместе с "драйвером", который дает им оптимальную производительность на их процессоре AMD?

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

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

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