c++ - 有什么方法可以阻止 OpenCL 内核执行?

标签 c++ c opencl

有什么方法可以阻止 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/

相关文章:

c++ - 为什么在这种情况下打印错误?

c++ - 将模板类作为参数传递给方法

c - 读取和附加到同一个文件

c - 在 Arduino 运行时向其发送命令

c - openCL 中的字符串扩展

c++ - 'type' 的初始化没有匹配的构造函数

C++:枚举类型作为模板参数 - 全局范围

c - 缩短 double 值 x 数字

opencl - 确定最佳工作组大小和工作组数量的算法是什么

c++ - OpenCL 程序未执行