有什么方法可以阻止 OpenCL 内核执行? 例如,我启动内核,进行一些计算,然后在满足某些条件时停止它,否则,我等到它完成:
clEnqueueNDRange(queue, ...); // start kernel function
// do other stuff...
// ...
if (some condition met) {
stopKernel();
} else {
clFinish(queue);
}
谢谢你的帮助
最佳答案
没有。将内核加入队列后,它将运行至完成。
完成上述事情的一种方法是这样做:
while ( data_left_to_process ) {
clEnqueueNDRangeKernel( ..., NDRange for a portion of the data, ... )
// other work
if (condition) {
break;
}
// adjust NDRange for next execution to processes the next part of your data
}
clFinish(queue);
这使您可以避免处理所有数据,但明显的权衡是您现在以较小的 block 提交工作,这可能会对性能产生影响。
关于c++ - 有什么方法可以阻止 OpenCL 内核执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9039155/