cudaMalloc 在几个小时后失败

问题描述 投票:0回答:2

GPU代码运行2-3小时后cudaMalloc分配内存失败有什么原因吗?
我正在使用“Process Explorer”程序来检查全局内存使用情况。尽管 GPU 上的可用全局内存仍然可用,但 cudaMalloc 突然无法分配。

如何查看失败的主要原因?我正在这样做:

if ( cudaSuccess !=cudaMalloc((void **) &arr, sizeof(int)*100)) 
    printf("Cannot Allocate Mem");

有没有更好的方法来打印cuda中失败的实际原因?

memory-management cuda
2个回答
2
投票

您可以执行以下操作:

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

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


0
投票

cudaMalloc
的输出与状态变量
cudaSuccess
进行比较。对于一个最小的工作示例,请参阅下面,请记住环保并释放空间!

// nvcc device_query.cu -o device_query; ./device_query

#include <stdio.h> 

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

由于故意过度分配,这给出了

root@38c6fcde90a4:/home/zkp/cuZK/test# nvcc device_query.cu -o device_query; ./device_query
The error is out of memory

这个示例本质上是一本伟大的书“CUDA by Example”中的一个配方,其中包含 GitHub 上的示例

© www.soinside.com 2019 - 2024. All rights reserved.