是否可以通过OpenCL终止AMD GPU上的内核?

时间:2018-10-30 01:35:06

标签: opencl gpgpu amd

最近,我编写了使用AMD GPU的OpenCL程序,但是,由于这是我的新手,我无法直接检测到的一些问题会导致启动的内核死机,而clinfo在这种情况下也不会显示任何内容。是否有任何方法可以杀死AMD GPU上正在运行的内核?每次内核死机时,重新启动是我目前修复它所依赖的。

2 个答案:

答案 0 :(得分:0)

没有停止已开始执行的内核的标准方法。您应该编写内核,以使它们可预测地停止-即,不要使用无限循环,而只需反复从主机将内核排队。

答案 1 :(得分:0)

我知道可以挂起某些AMD GPU的一件事是有一个障碍,只能由工作组的一些工作项目执行。请注意,这不是GPU中的错误,OpenCL规范明确说明了关于barrier()的这一点:

  

执行内核的工作组中的所有工作项都必须遇到此功能。

因此,所有工作项或所有工作项都不得遇到障碍。如果仅执行某些操作,则您的程序可以挂在GPU上。因此,我将检查OpenCL代码中是否存在以下内容:

if (localmem[i] > 0) {
   barrier(CLK_LOCAL_MEM_FENCE);
}

您还可以尝试在代码上使用Oclgrind,这是一个OpenCL GPU模拟器,可用于发现OpenCL代码中的问题。