Как мне использовать cl_amd_offline_devices для компиляции ядра для конкретного c GPU? - PullRequest
1 голос
/ 11 февраля 2020

Я хочу скомпилировать ядро ​​OpenCL для определенного AMD GPU - который не доступен на моей машине - чтобы позже я мог просто загрузить и запустить его, когда этот GPU присутствует.

Я читал этот вопрос здесь на SO:

Автономная компиляция для ядер AMD и NVIDIA OpenCL без установленных карт

И ответ, предлагающий создать контекст OpenCL с помощью CL_CONTEXT_OFFLINE_DEVICES_AMD. Хорошо, я могу это сделать. Но что тогда? В Руководстве пользователя по программированию OpenCL от AMD говорится:

A.8.6 cl_amd_offline_devices Чтобы генерировать двоичные образы в автономном режиме, необходимо получить доступ к компилятору для каждого устройства, которое поддерживает среда выполнения, даже если устройство в данный момент не установлен в системе. Когда во время создания контекста в свойствах контекста передается CL_CONTEXT_OFFLINE_DEVICES_AMD, о всех поддерживаемых устройствах, будь то онлайн или офлайн, сообщается и их можно использовать для создания двоичных изображений OpenCL.

хорошо, но как точно? Я предполагаю, что мне нужно позвонить clCompileProgram() или clBuildProgram(), верно? Как мне установить список устройств для него на устройство, которое мне нравится?

1 Ответ

1 голос
/ 13 марта 2020

Как вы и предполагали, вы начинаете с обычных clCompileProgram() и clBuildProgram().

Далее вы можете использовать clGetProgramInfo() с CL_PROGRAM_BINARY_SIZES, чтобы получить размеры для ваших буферных распределений, и второй раз с CL_PROGRAM_BINARIES, чтобы получить действительные двоичные образы программы.

Это изображение может затем использоваться с clCreateProgramWithBinary() вместо clCreateProgramWithSource().

Надеюсь, что поможет.

...