【问题标题】:cudaMalloc failing After Several Hours几个小时后 cudaMalloc 失败
【发布时间】: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() 的调用次数,那将有所帮助。

标签: memory-management cuda


【解决方案1】:

您可以执行以下操作:

cudaError_t err= cudaMalloc((void **) &arr, sizeof(int)*100);
if(err != cudaSuccess){
     printf("The error is %s", cudaGetErrorString(err));
}

这将打印错误的确切原因。例如。无效的设备指针意味着您正在访问一个不指向任何东西的指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 2023-03-15
    • 2018-04-28
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    相关资源
    最近更新 更多