我正在尝试使用cudaMalloc在GPU上分配大量内存:cudaMalloc((void**)&count_d, N*sizeof(long));


unsigned long N = 999999999L;


我在那个地方收到一条错误消息,所以问题是我分配的内存过多还是在做其他错误的事情。

错误消息我得到了什么:

CUDA error : an illegal memory access was encountered (77)

最佳答案

正如@talonmies所说的那样,作为cudaMalloc() documentation tells you,调用cudaMalloc()不能触发“非法内存访问”错误-这是关于通过设备代码的非法访问。 (主机端代码进行非法内存访问会在Unix上导致SIGSEGV信号,在Windows上导致保护错误)。

那么,在cudaMalloc()之后如何看到此错误?简单:它发生得更早了,您之前根本就没有检查过错误;或者您没有同步流以执行未决的内核。

最后,考虑跟随以评论形式发布的@alterIgel链接,以了解有关CUDA API调用的正确错误检查。

关于c++ - CudaMalloc在分配内存时失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52462249/

10-11 12:29