OpenCL内核等待/延迟

时间:2014-06-19 02:17:15

标签: c opencl delay wait data-synchronization

我是OpenCL的新手。如何在不进行循环的情况下延迟OpenCL内核脚本?我有一个代码,在某些情况下需要等待一段时间,然后像这样继续执行

__kernel void test(uint4 value,uint4 delay)
{
    uint id = get_global_id(0);

       //some code
       for(uint i=0;i<delay;i++) { //... do nothing like this? }
}

但我想这个循环会让gpu忙碌起来,有什么我可以像睡眠一样使用内核CL吗?我查阅了sdk文档,但还没找到任何东西。请帮助。

2 个答案:

答案 0 :(得分:3)

OpenCL规范专为数据处理而设计。不是为了等待/睡觉。即使你可能实现它,你也会破坏很多OpenCL的优秀设计规则。

事实上,如果你试图让它们睡觉,很多GPU都会崩溃或终止执行。

请重新考虑您的需求,以及它是否适合并行计算。

答案 1 :(得分:0)

通常不是。如果你在GPU内核中停留太长时间,驱动程序TDR会崩溃。通常,内核不打算睡觉。请参阅this questionthis question

另外,如果你想引入一个循环,你必须小心使代码实际上做一些编译器无法优化的东西(写入缓冲区)。