【发布时间】:2020-09-20 08:55:43
【问题描述】:
我的一个 OpenCL 帮助函数在一个地方写入全局内存运行良好,内核正常执行。尽管如此,当直接从该行之后运行时,它会冻结/崩溃内核,并且我的程序无法运行。
此函数中的值会发生变化(NDRange 为 2^16 的值不同),因此循环也会发生变化,并且由于条件,并非所有线程都可以执行相同的代码。
为什么这是一个问题?我是否错过了某种内存阻塞或其他什么?
void add_world_seeds(yada yada yada...., const uint global_id, __global long* world_seeds)
for (; indexer < (1 << 16); indexer += increment) {
long k = (indexer << 16) + c;
long target2 = (k ^ e) >> 16;
long second_addend = get_partial_addend(k, x, z) & MASK_16;
if (ctz(target2 - second_addend) < mult_trailing_zeroes) { continue; }
long a = (((first_mult_inv * (target2 - second_addend)) >> mult_trailing_zeroes) ^ (J1_MUL >> 32)) & mask;
for (; a < (1 << 16); a += increment) {
world_seeds[global_id] = (a << 32) + k; //WORKS HERE
if (get_population_seed((a << 32) + k, x, z) != population_seed_state) { continue; }
world_seeds[global_id] = (a << 32) + k; //DOES NOT WORK HERE
}
}
for (; a < (1 << 16); a += increment) {
world_seeds[global_id] = (a << 32) + k; //WORKS HERE
if (get_population_seed((a << 32) + k, x, z) != population_seed_state) { continue; }
world_seeds[global_id] = (a << 32) + k; //DOES NOT WORK HERE
}
【问题讨论】:
-
这可能是代码中其他地方的错误(导致未定义的行为)。我认为您没有提供足够的信息来调试此问题。
-
事实证明,它出现在我的代码中的语句之一,而技术上正确的 OpenCL 导致我的硬件出现一个模糊的错误“AMD HSA 代码对象加载失败”
标签: opencl