1

我有一些非常简单的代码来近似均匀 3D 网格上的偏导数。我在科学 linux 上运行,当我使用 nvcc 编译时,我没有收到任何错误或警告。我检查cudaSuccess每个人的回报cudaMalloc()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 上的实际线程并不多(它是 Tesla C2050 fwiw),但我想我可以指定任意数量的线程?还值得注意的是,这是算法的“幼稚”版本,所以我不打算优化性能(还)。

4

2 回答 2

1

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

于 2012-05-27T18:33:33.777 回答
0

仅供参考,如果您在发布后检查错误代码,您会节省很多时间。由于您在启动后没有同步,因此如果您检查内核启动的结果,它将只为您提供内核启动的结果,而不是完整的内核执行本身。

于 2012-06-19T06:40:30.873 回答