最近,我开始扩展一个非常依赖于boost的项目,将CUDA用于其最内层循环。我认为在这里发布一些我曾经看过的奇怪行为是值得的。简单地包含某些boost标题将导致我的第一个cuda调用生成大量内核。
如果编译并调试以下代码: simplestCase.cu
#include <boost/thread.hpp>
int main(int argc, char **argv){
int *myInt;
cudaMalloc(&myInt, sizeof(int));
return 0;
}
我在执行cudaMalloc时得到以下调试消息行(如果我运行我已定义的内核,则会出现相同的行为。似乎任何触发上下文创建的内容都会触发此。):
[Launch of CUDA Kernel 0 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 1 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 2 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 3 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 4 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 5 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 6 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 7 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 8 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
到目前为止,我已经确定了导致问题的两个标头: 升压/ thread.hpp 升压/ mpi.hpp
以下是一些可能有助于复制问题的信息:
项目设置:
我认为这就是一切。
修改
感谢您关注我没有提出问题的事实。我知道我忘记了一些关键的事情。 我的问题是:
我觉得非常具体,包括他们生成的外围内核调用,特别是因为我没有使用那些包含,我不知道它们如何影响我与CUDA的交互。 cuda是否应该为我甚至不使用的代码启动这么多额外的内核?我看到我正在处理的项目中已经启动了100多个内核,当我项目中唯一与CUDA相关的代码是程序入口点的单个cudaMalloc时。
EDIT2:
也发生在特斯拉K20(kepler架构卡上,而我认为GTX 580是费米)。
EDIT3:
将cuda驱动程序更新至版本319.23。我上面提到的行为没有变化,但这确实解决了我在大型程序中遇到的调试器问题。
答案 0 :(得分:0)
嗯,仍然没有因此产生的实际问题,所以我想这只是在后台发生的事情。