OpenCL2.0内核在clBuildProgram中给出访问冲突错误

OpenCL2.0内核在clBuildProgram中给出访问冲突错误,opencl,amd,Opencl,Amd,我已经编写了一个简单的内核,它使用了OpenCL2.0的新特性 int multiplier = 7; __kernel void clang_blocks_ocl(__global int* input_array, __global int* output_array) { int global_id = get_global_id(0); int ^MultiplayByConstant(int) = ^int (int num) {return multipli

我已经编写了一个简单的内核,它使用了OpenCL2.0的新特性

int multiplier = 7;

__kernel void clang_blocks_ocl(__global int* input_array, __global int* output_array)

{
    int global_id = get_global_id(0);   
    int ^MultiplayByConstant(int) = ^int (int num) {return multiplier*num;} ;
    output_array[global_id] = MultiplayByConstant(input_array[global_id]);

}
我将输入数组的每个元素传递给block,并将其乘以代码中的某个常量

这是我的配置

  • 操作系统:Win7 64位
  • 显卡:AMD
  • 驱动程序版本:Crimson 15.30

根据调试,应用程序挂起在
clBuildProgram
,应用程序在没有任何返回代码的情况下崩溃。我已经将所有正确的参数传递给了
clBuildProgram
,包括编译选项
“-cl std=CL2.0”
,OpenCL 2.0中引入了用于设备端排队功能的Clang块,它们不能像您尝试的那样用于其他情况


如果您打算使用设备端排队,那么您需要在主机上创建设备端队列并修改内核-请参阅。

您可以发布一个最小且完整的主机代码吗?我正在发布clBuildProgram的代码,因为其他代码适用于其他内核,不会出现任何错误。//设置opencl环境//创建上下文,命令队列//读取内核源代码并将其加载到cl_程序ecode=clBuildProgram(程序,1,设备,“-cl std=CL2.0”,NULL,NULL);应用程序在此点提供访问冲突。正在终止应用程序,但未返回任何错误代码。是。你是对的,这是使用叮当块的方法之一。我指的是以下规格: