debugging - cuda无限内核

标签 debugging cuda infinite

我正在开发一个需要无限期运行 CUDA 内核的应用程序。我有一个 CPU 线程将 stg 写入列表,GPU 读取该列表并重置(至少在启动时)。当我在内核中写入时

while(true)
{
//kernel code
}

系统挂起。我知道 GPU 仍在处理,但当然什么也没有发生。而且我不确定列表中是否会发生重置。

不得不提的是,用于计算的GPU不是用于显示的,所以不存在看门狗问题。

操作系统是Ubuntu 11.10和cuda工具包4.1。 我可以使用任何帮助/示例/链接来成功编写无限内核。

最佳答案

CUDA 编程语言和 CUDA 架构目前不支持无限内核。我建议您考虑罗杰的建议。

如果您想实现这一点,我建议您将以下调试代码添加到内核中:

  1. 每 N 个时钟增加固定内存中的一个变量(可能需要为每个 SM 使用不同的位置),
  2. 定期读取可由 CPU 更新的内存位置,以告诉内核退出。

这是一个软件看门狗。

您可以使用clock()或clock64()来控制执行(1)和(2)的频率。

您可以使用 cuda-gdb 来调试您的问题。

该语言不支持无限循环。编译器可能会剥离代码。您可能需要查看 PTX 和 SASS。如果编译器生成错误代码,您可以通过让编译器认为存在有效的退出条件来伪造它。

关于debugging - cuda无限内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436228/

相关文章:

testing - 发布 Web 应用程序之前应该检查什么?

com - 内存不足错误 - 用于查找经典 ASP 内存泄漏的工具?

c++ - main.obj : fatal error LNK1143: invalid or corrupt file: no symbol for COMDAT section 0x6

cuda - 在一个 GPU 上运行多个 CUDA 应用程序

c - 循环无法正常工作

linux - 如何将 gdb 附加到剥离的 sshd 服务器?

debugging - 使用Glassfish 3.0.1和NetBeans 6.9.1的JPA 2.0(记录和跟踪):

visual-studio-2010 - Cuda 不计算它的预期,只是默默地忽略我的代码

c - 如何循环 select() 以无限轮询数据

C++ 从另一个函数退出函数