Clang 如何在spir-v二进制内核中正确使用clCreateProgramWithIL()?

Clang 如何在spir-v二进制内核中正确使用clCreateProgramWithIL()?,clang,opencl,llvm-clang,spir-v,Clang,Opencl,Llvm Clang,Spir V,我需要创建一个OpenCL应用程序,该应用程序对作为输入接收的OpenCL内核的代码进行插入,以达到一些奇特的评测目的(还没有找到我需要的,所以我需要/想要自己做) 我想把内核编译成一个中间表示(LLVM—IR),用它来(使用LLVM C++绑定),将检测到的代码转换成SIP-V,然后在代码中创建一个内核,其中代码为 CCREATEPATIONIVE() 现在,我只是编译一个简单的OpenCL内核,它添加了2个向量,没有插装: __kernel void vadd( __global

我需要创建一个OpenCL应用程序,该应用程序对作为输入接收的OpenCL内核的代码进行插入,以达到一些奇特的评测目的(还没有找到我需要的,所以我需要/想要自己做)

我想把内核编译成一个中间表示(LLVM—IR),用它来(使用LLVM C++绑定),将检测到的代码转换成SIP-V,然后在代码中创建一个内核,其中代码为<代码> CCREATEPATIONIVE()<<代码> >

现在,我只是编译一个简单的OpenCL内核,它添加了2个向量,没有插装:

__kernel void vadd(
    __global float* a,
    __global float* b,
    __global float* c,
    const unsigned int count)
{
    int i = get_global_id(0);
    if(i < count) c[i] = a[i] + b[i];
}
之后,我使用
llvm spirv
工具()将
vadd.bc
传输到
vadd.spv

最后,我尝试用C主机代码构建内核,如下所示:

...
cl_program program = clCreateProgramWithIL(context, binary_data->data, binary_data->size, &err);
err = clBuildProgram(program, 1, &device_id, NULL, NULL, NULL);
...
运行主机代码后,我从
clBuildProgram
命令接收到上述错误:

CL_BUILD_PROGRAM_FAILURE
error: undefined reference to `get_global_id()'
error: backend compiler failed build.
似乎
vadd.spv
文件没有与OpenCL内核库链接。你知道如何做到这一点吗

CL_BUILD_PROGRAM_FAILURE
error: undefined reference to `get_global_id()'
error: backend compiler failed build.