Я пытаюсь загрузить двоичный файл 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 не создает «хороший» двоичный файл, но как его создать?
Ценю вашу помощь!