写入全局内存导致OpenCL For循环中的崩溃

写入全局内存导致OpenCL For循环中的崩溃,opencl,Opencl,我的一个OpenCL助手函数在一个位置写入全局内存,运行良好,内核通常执行。但是,当直接从该行之后运行时,它会冻结/崩溃内核,并且我的程序无法运行 此函数中的值会发生变化(NDRange为2^16时的值不同),因此循环也会发生变化,并且由于条件的原因,并非所有线程都可以执行相同的代码 为什么这是一个问题?我是不是错过了某种记忆阻塞之类的东西 void添加世界种子(yada-yada-yada….,consuint global\u id,\uu global long*world\u种子) (

我的一个OpenCL助手函数在一个位置写入全局内存,运行良好,内核通常执行。但是,当直接从该行之后运行时,它会冻结/崩溃内核,并且我的程序无法运行

此函数中的值会发生变化(NDRange为2^16时的值不同),因此循环也会发生变化,并且由于条件的原因,并非所有线程都可以执行相同的代码

为什么这是一个问题?我是不是错过了某种记忆阻塞之类的东西

void添加世界种子(yada-yada-yada….,consuint global\u id,\uu global long*world\u种子)
(;索引器<(1 16; 长第二个加数=获取部分加数(k,x,z)&掩码16; if(ctz(target2-第二个加数)<多个尾随零){continue;} 长a=((第一个多个inv*(target2-第二个加数))>>多个尾随零)^(J1多个>>32))&掩码;
对于(;a<(1),实际上有一个bug导致了代码中未定义的行为,特别是主反转内核在参数中包含了一个名为“increment”的变量,在同一个内核中,我定义了另一个名为increment的变量。它编译得很好,但导致了完全错误的结果和内存崩溃。

这可能是一个bug(导致未定义的行为)我认为你没有提供足够的信息来调试这个问题。事实证明,这似乎是我代码中的一条语句,而技术正确的OpenCL导致我的硬件出现了一个模糊的错误“AMD HSA代码对象加载失败”