最近,我编写了使用AMD GPU的OpenCL程序,但是,由于这是我的新手,我无法直接检测到的一些问题会导致启动的内核死机,而clinfo在这种情况下也不会显示任何内容。是否有任何方法可以杀死AMD GPU上正在运行的内核?每次内核死机时,重新启动是我目前修复它所依赖的。
答案 0 :(得分:0)
没有停止已开始执行的内核的标准方法。您应该编写内核,以使它们可预测地停止-即,不要使用无限循环,而只需反复从主机将内核排队。
答案 1 :(得分:0)
我知道可以挂起某些AMD GPU的一件事是有一个障碍,只能由工作组的一些工作项目执行。请注意,这不是GPU中的错误,OpenCL规范明确说明了关于barrier()的这一点:
执行内核的工作组中的所有工作项都必须遇到此功能。
因此,所有工作项或所有工作项都不得遇到障碍。如果仅执行某些操作,则您的程序可以挂在GPU上。因此,我将检查OpenCL代码中是否存在以下内容:
if (localmem[i] > 0) {
barrier(CLK_LOCAL_MEM_FENCE);
}
您还可以尝试在代码上使用Oclgrind,这是一个OpenCL GPU模拟器,可用于发现OpenCL代码中的问题。