小编Val*_*lSe的帖子

遇到CUDA非法内存访问

我在自己的笔记本电脑上编写了一个 CUDA 程序,该笔记本电脑配有 Nvidia GTX 960M。该代码运行没有任何问题。我还实现了错误检查,可以在此线程中找到: What is the canonical way to check for error using the CUDA Runtime API?

并使用 测试了代码cuda-memcheck,报告了 0 个错误。

我想在具有 Nvidia Titan X 的服务器上测试我的代码。但是cudaPeekAtLastError()会抛出错误:

illegal memory access was encountered
Run Code Online (Sandbox Code Playgroud)

对于我的笔记本电脑和服务器,我使用以下堆分配

cudaDeviceSetLimit(cudaLimitMallocHeapSize, 1024 * 1024 * 1024);
Run Code Online (Sandbox Code Playgroud)

并运行以下线程和块:

int blockSize = 128;
int numBlocks = (nPossibilities + blockSize - 1) / blockSize;
Run Code Online (Sandbox Code Playgroud)

GTX 960M 的计算能力为 5,而 Titan X 的计算能力为 6.1,但根据计算能力表(维基百科),两者都最多有 32 个活动块,每个多处理器最多有 2048 个线程。

cuda-memcheck在服务器上运行了,非法内存访问的问题是由于空指针造成的。

为了解决这个问题,我使用以下几行将堆内存大小分配从 1GB 增加到 …

c++ cuda

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×1

cuda ×1