Opencl 在Windows上使用clBuildProgram加载SPIR二进制文件

Opencl 在Windows上使用clBuildProgram加载SPIR二进制文件,opencl,spir,Opencl,Spir,我正在尝试加载我用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-defau

我正在尝试加载我用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应用程序SDK 3和肾上腺素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_编译器选项无效

我试着不用-x螺旋。。。也有,但我只得到一个:

错误:无效的值生成器:“LLVM6.0.1”读取器:“LLVM 3.9.0svn”

编辑:

CL_装置名称:gfx900 CL_设备_版本:OpenCL 2.0 AMD-APP 2580.6 CL_设备\u OPENCL_C_版本:OPENCL C 2.0 CL_驱动程序_版本:2580.6 PAL,HSAIL CL_设备_SPIR_版本:1.2

运行clCreateProgramWithBinary后,我使用clGetProgramBuildInfo查询设备并获取: CL\ U程序\二进制\类型=[CL\ U程序\二进制\类型\中间]

这就意味着二进制文件正在被识别,否则我猜它将返回CL_程序\u二进制文件\u类型\u无

编辑2:

我认为clang并没有创建一个“好”的二进制文件,但是如何创建它呢


谢谢你的帮助

不幸的是,对SPIR的支持被悄悄地从AMD驱动程序中删除,请参阅AMD社区论坛的这条线索中的dipak答案:

关于您的第二个问题:general clang+LLVM不是AMD调优的秘密版本,并且包含在其专有驱动程序中,仍然无法生成与通用Windows AMD驱动程序兼容的二进制文件,但是Linux也可以:


对于我来说,这是一个谜,为什么LLVM AMDGPU后端开发人员没有优先考虑为Windows驱动程序生成二进制文件的任务,因为有几个GCN汇编程序项目通过Windows OpenCL接口提供了这样的功能,举几个例子:,,等等。此外,我知道,正如其作者所说,会生成这样的OpenCL二进制文件!霍雷肖,天堂和地球上有比你的哲学所梦想的更多的东西。

你能检查一下CL_device_SPIR_版本的设备信息以确保SPIR得到支持吗?是的,我编辑了我的帖子。我有蔬菜56。谢谢你试过克洛诺斯的叮当声吗?