我是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文档,但还没找到任何东西。请帮助。
答案 0 :(得分:3)
OpenCL规范专为数据处理而设计。不是为了等待/睡觉。即使你可能实现它,你也会破坏很多OpenCL的优秀设计规则。
事实上,如果你试图让它们睡觉,很多GPU都会崩溃或终止执行。
请重新考虑您的需求,以及它是否适合并行计算。
答案 1 :(得分:0)
通常不是。如果你在GPU内核中停留太长时间,驱动程序TDR会崩溃。通常,内核不打算睡觉。请参阅this question和this question。
另外,如果你想引入一个循环,你必须小心使代码实际上做一些编译器无法优化的东西(写入缓冲区)。