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

时间:2018-09-14 14:34:22

标签: opencl spir

我正在尝试加载使用clang + llvm 6.0.1创建的SPIR二进制文件。

使用:p创建了一些不同的文件。

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

EDIT2:

我认为clang不是在创建“好”二进制文件,而是如何创建它?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

不幸的是,对SPIR的支持已从AMD驱动程序中悄然删除,请参阅以下AMD社区论坛主题中的dipak答案:

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

关于您的第二个问题:通用clang + LLVM(不是由AMD调整并包含在其专有驱动程序中的秘密版本)仍然无法生成与通用Windows AMD驱动程序兼容的二进制文件,但是对于Linux来说,这是可能的:{{3 }}。

为什么我不知道为什么LLVM AMDGPU后端开发人员不优先考虑为Windows驱动程序生成二进制文件的任务,因为有几个GCN汇编程序项目通过Windows OpenCL接口提供了这种功能,仅举几例: all new AMD’s ROCm, AMD PAL and Mesa 3D runtime are coveredCLRadeonExtenderASM4GCN等。此外,我知道一个HepPas(如其作者所言)会生成此类OpenCL二进制文件! “天堂和地上还有更多东西,霍拉奇,比您的哲学梦想中的还要多。”