cudaLaunch在调试器中返回0x9

时间:2012-05-27 17:19:26

标签: cuda

我有一些非常简单的代码来近似统一3D网格上的偏导数。我正在运行科学linux,当我用nvcc编译时,我没有得到任何错误或警告。我检查每次cudaSuccesscudaMalloc()来电都返回cudaMemcpy(),确实一切正常。

当我在没有调试器的情况下运行我的程序时,除了内核实际上似乎没有执行外,一切似乎都能正常工作。我为我的输出分配的数组(初始化为保存全零)在内核启动后仍然全部为零,即使我做了一些愚蠢的事情,比如让每个线程将数组的索引设置为5。

所以当我尝试在这段代码上使用cuda-gdb时,它会说cudaLaunch()返回0x9。我不确定9是什么错误,并且无法通过谷歌搜索快速找到它。所以在我写出代码之前,哪个错误是9号?是否列出了数字如何与特定错误匹配?

是否有关于错误编号如何映射到特定错误的在线列表?

我没有这台机器上的代码,但它类似于:

dim3 dimGrid(1,1,1);
dim3 dimBlock(mx,my,mz);
x_derivative<<<dimGrid,dimBlock>>>(f_d,df_d);

其中(当前)mx=my=mz=64

也许64 ^ 3的线程数太大了?很明显,GPU上没有那么多实际线程(这是特斯拉C2050 fwiw),但我想我可以指定任意数量的线程?值得注意的是,这是算法的“天真”版本,所以我不打算优化性能(还)。

2 个答案:

答案 0 :(得分:1)

每个块的最大线程数为512或1024,具体取决于您的设备。所以是的,64 ^ 3确实太大了。

答案 1 :(得分:0)

仅供参考,如果您在发布后检查了错误代码,那么您可以节省大量时间。由于启动后没有同步,如果检查内核启动的结果,它将只给出内核启动的结果,而不是完整的内核执行本身。