Opencl clBuildProgram产生访问冲突(使用Cloo)

Opencl clBuildProgram产生访问冲突(使用Cloo),opencl,cloo,Opencl,Cloo,OpenCL1.1,使用CLOO0.9.1.0 对于某个CL模块,我在以下行中遇到崩溃: program.Build(null, null, null, IntPtr.Zero); Visual Studio 2010告诉我: 类型为“System.AccessViolationException”的未处理异常 发生在Cloo.dll中 其他信息:尝试读取或写入受保护内存。 这通常表示其他内存已损坏 我已将错误跟踪到某一行代码 int offset = 1000000 * (input ==

OpenCL1.1,使用CLOO0.9.1.0

对于某个CL模块,我在以下行中遇到崩溃:

program.Build(null, null, null, IntPtr.Zero);
Visual Studio 2010告诉我:

类型为“System.AccessViolationException”的未处理异常 发生在Cloo.dll中

其他信息:尝试读取或写入受保护内存。 这通常表示其他内存已损坏

我已将错误跟踪到某一行代码

int offset = 1000000 * (input == 0); // This is the culprit!
const sampler_t smp = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP | CLK_FILTER_NEAREST;
int4 pixel = read_imagei(image, smp, (int2)(offset + x, y));
我使用上面的技巧来避免分支。除了在编译时产生访问冲突的一种情况外,它在所有情况下都能完美地工作。如果我去掉条件乘法,它就会工作。例如

int offset = 1000000;
// -or-
int offset = (input != 0 ? 0 : 1000000);
我在这里面临编译器错误吗?如何解决此错误

有关我的图形卡/驱动程序的一些详细信息:

驱动程序打包版本:8.85.7.2-110901a1-125827C-Fujitsu Technology

解决方案提供商:ATI Technologies Inc.2D驱动程序版本:8.01.01.1152


这是一个编译器错误。希望有一天能修好。现在,我只想避免那种特定的优化技巧。

我想你不会用那种代码避免分支,编译后分支仍然会存在。好吧,经验测试表明,使用上述技巧确实要快得多。无论如何,问题不在于代码本身。问题是编译器退出了…您是否尝试过只运行int offset=1000000*input==0;的内核;?如果运行良好,可能你的bug在另一个地方。即使运行良好,也不能保证bug在其他地方。修改代码会生成一个新的代码树,由编译器进行优化,这意味着可以避免潜在的bug。