Загрузите двоичный файл SPIR с помощью clBuildProgram в Windows - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь загрузить двоичный файл SPIR, созданный с помощью clang + llvm 6.0.1.

Создано несколько разных файлов с:

clang -target spir-unknown-unknown -cl-std=CL1.2 -c -emit-llvm -Xclang -finclude-default-header OCLkernel.cl  
clang -target amdgcn-amd-amdhsa -cl-std=CL1.2 -c -emit-llvm -Xclang -finclude-default-header OCLkernel.cl  
clang -cc1 -emit-llvm-bc -triple spir-unknown-unknown -cl-std=CL1.2 -include "include\opencl-c.h" OCLkernel.cl

Все это происходит в Windows, установлены драйверы AMD APP SDK 3 и Adrenalin 18.6.1.

После этого я пытаюсь создать программу из двоичного файла:

clCreateProgramWithBinary(context, 1, &device, &programSrcSize, (const unsigned char**)&programSrc, 0 , &status)

Все идет хорошо, здесь я не получаю никаких ошибок, но я делаю это при попытке построить его потом:

clBuildProgram(program, 1, &device, " –x spir -spir-std=1.2", NULL, NULL);

Я получаю ошибку:

Ошибка CL_INVALID_COMPILER_OPTIONS при вызове clBuildProgram

Я тоже пытался без "-x spir ...", но потом я просто получил:

ошибка: недопустимое значение (Производитель: 'LLVM6.0.1' Считыватель: 'LLVM 3.9.0svn')

EDIT:

CL_DEVICE_NAME: gfx900
CL_DEVICE_VERSION: OpenCL 2.0 AMD-APP (2580,6)
CL_DEVICE_OPENCL_C_VERSION: OpenCL C 2.0
CL_DRIVER_VERSION: 2580,6 (PAL, HSAIL)
CL_DEVICE_SPIR_VERSIONS: 1,2

После запуска clCreateProgramWithBinary я запрашиваю устройство с помощью clGetProgramBuildInfo и получаю:
CL_PROGRAM_BINARY_TYPE = [CL_PROGRAM_BINARY_TYPE_INTERMEDIATE]

Так что это должно означать, что двоичный файл распознается, иначе я думаю, что он вернет CL_PROGRAM_BINARY_TYPE_NONE

EDIT2:

Я думаю, что clang не создает «хороший» двоичный файл, но как его создать?

Ценю вашу помощь!

1 Ответ

0 голосов
/ 06 апреля 2019

К сожалению, поддержка SPIR была удалена из драйверов AMD, см. Ответы dipak в этой теме на форуме сообщества AMD:

https://community.amd.com/thread/232093

По поводу вашего второго вопроса: general clang + LLVM(не секретная версия, настроенная AMD и включенная в их проприетарные драйверы) по-прежнему не может создавать двоичные файлы, совместимые с драйверами Windows AMD общего назначения, однако это возможно для Linux: все новые AMD ROCm, AMD PAL и Mesa 3Dпокрытый .

Для меня загадка, почему бэкэнд-разработчики LLVM AMDGPU не отдают приоритет задаче создания двоичных файлов для драйверов Windows, поскольку существует пара проектов ассемблера GCN, которые предоставляют такую ​​функциональность через WindowsИнтерфейс OpenCL, если назвать несколько: CLRadeonExtender , ASM4GCN , HepPas и т. Д. Кроме того, я знаю недокументированный форк clang + LLVM что (как утверждает его автор) создает такие двоичные файлы OpenCL!«На небесах и на земле больше вещей, Горацио, чем в вашей философии мечтали».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...