我正在尝试使用cudaMalloc在GPU上分配大量内存:cudaMalloc((void**)&count_d, N*sizeof(long));
与
unsigned long N = 999999999L;
我在那个地方收到一条错误消息,所以问题是我分配的内存过多还是在做其他错误的事情。
错误消息我得到了什么:
CUDA error : an illegal memory access was encountered (77)
答案 0 :(得分:0)
就像@talonmies所说的,和cudaMalloc()
documentation tells you一样,调用cudaMalloc()
不会触发“非法内存访问”错误-这与 device 代码的非法访问有关。 (主机端代码进行非法内存访问会在Unix上导致SIGSEGV信号,在Windows上导致保护错误。)
因此,cudaMalloc()
之后如何出现此错误?很简单:它发生得更早了,您之前根本就没有检查过错误。或者您没有同步流以执行待处理的内核。
最后,考虑使用以评论形式发布的链接@alterIgel,以了解有关CUDA API调用的正确错误检查的信息。