首页 > 解决方案 > CudaMalloc 在分配内存时失败

问题描述

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

unsigned long N = 999999999L;

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

我得到的错误消息:

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

标签: c++cuda

解决方案


正如@talonmies 所说,正如cudaMalloc()文档告诉你的那样,调用cudaMalloc()不能触发“非法内存访问”错误——这是关于设备代码的非法访问。(主机端代码进行非法内存访问会导致 Unix 上的 SIGSEGV 信号或 Windows 上的保护错误)。

那么你怎么可能在你之后看到这个错误cudaMalloc()?简单:它发生得更早,而您之前根本没有检查错误;或者您没有同步您的流以执行待处理的内核。

最后,考虑关注@alterIgel 作为评论发布的链接,以阅读有关正确检查 CUDA API 调用的错误。


推荐阅读