【发布时间】:2012-01-27 14:27:50
【问题描述】:
cudaMalloc 运行 gpu 代码 2-3 小时无法分配内存有什么原因吗?
我正在使用“进程资源管理器”程序来检查全局内存使用情况。尽管 gpu 上的可用全局内存仍然可用,但突然 cudaMalloc 无法分配。
如何检查此失败的主要原因?我正在这样做:
if ( cudaSuccess !=cudaMalloc((void **) &arr, sizeof(int)*100))
printf("Cannot Allocate Mem");
有没有更好的方法来打印 cuda 中失败的实际原因?
【问题讨论】:
-
如果你在 GPU 上真的有空闲内存(你怎么知道的?),一种可能的解释是内存碎片。但是,您示例中的分配是如此之小,以至于在分散的情况下会导致失败似乎很奇怪。无论如何,如果您可以重组代码以“保留”分配并减少对 cudaMalloc()/cudaFree() 的调用次数,那将有所帮助。