我正在尝试加载我用 clang+llvm 6.0.1 创建的 SPIR 二进制文件。
创建了几个不同的文件:
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);
我得到的错误是:
调用 clBuildProgram 时出现错误 CL_INVALID_COMPILER_OPTIONS
我也试过没有“-x spir ...”的东西,但后来我得到了:
错误:无效值(生产者:'LLVM6.0.1' 读者:'LLVM 3.9.0svn')
编辑:
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
编辑2:
我认为 clang 并没有创建一个“好的”二进制文件,但是如何创建它呢?
感谢你的帮助!