使用OpenCL 1.1,是否可以强制工作项目对其执行进行排序,以便等到优先级较高的项目完成?
我已尝试过各种实现,并且在GPU(Nvidia OpenCL 1.1)上执行内核时似乎总是卡住;虽然在CPU上运行很好。
我最近的尝试将挂在GPU上。我怀疑是GPU正在分裂本地组中的全局工作组,这些组被暂停导致死锁。我通常运行一个全局大小,是我本地大小的几倍,这对于扩大我的计算非常重要。
kernel void ordered_workitem_kernel(
global uint *min_active_id_g
) {
uint i = get_global_id(0);
min_active_id_g[0] = 0;
barrier(CLK_GLOBAL_MEM_FENCE);
while (i >= min_active_id_g[0]) {
// do something interesting here
if (i == min_active_id_g[0])
atomic_inc(&min_active_id_g[0]);
}
}
或许还有更好的方法吗?有什么建议吗?