OpenCL 1.1,使用Cloo 0.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));
我正在使用上面的技巧来避免分支。它在除了一种情况之外的所有情况下都能正常工作,其中上述情况会在编译时时产生访问冲突。如果我删除条件乘法它是有效的。 E.g。
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
答案 0 :(得分:0)
这是一个编译错误。希望它能在某一天得到修复。现在,我将避免这种特定的优化技巧。