我正在使用 Quadro K2000M 卡,CUDA 功能 3.0,CUDA 驱动程序 5.5,运行时 5.0,使用 Visual Studio 2010 编程。我的 GPU 算法运行树(常量)的许多并行广度优先搜索 (BFS)。除了从常量数组和树中读取之外,线程是独立的。在每个线程中可以有一些 malloc/free 操作,遵循带有队列的 BFS 算法(无递归)。有N个线程;树叶节点的数量也是 N。我每个块使用 256 个线程,每个网格使用 (N+256-1)/256 个块。
现在的问题是该程序适用于更少的 N=100000 个线程,但失败的不止于此。它也可以在 CPU 或 GPU 中逐个线程地工作。当 N 很大时(例如 >100000),内核崩溃,然后cudaMemcpy
从设备到主机也失败。我试过 Nsight,但它太慢了。
现在我设置cudaDeviceSetLimit(cudaLimitMallocHeapSize, 268435456);
了我也尝试了更大的值,最高1G;cudaDeviceSetLimit
成功了,但问题依然存在。
有谁知道上述问题的一些常见原因?或任何进一步调试的提示?我试着放一些 printf,但有大量的输出。此外,一旦线程崩溃,所有剩余的 printf 都将被丢弃。因此很难确定问题所在。