cudaMalloc 增加主机内存成本?

问题描述

我发现一些 cuda API 会增加主机内存成本,这是一个示例

float getHostMemCostInMB()
{
    float mem;
    unsigned long size;
    char name[256];
    FILE* fp;
    sprintf(name,"/proc/%d/stat",(int)getpid());
    if((fp=fopen(name,"r")) != NULL){
        int i;
        for(i=0; i<22; i++)
            fscanf(fp,"%s",name);
        if(fscanf(fp,"%lu",&size) == 1)
            mem = size/1024./1024.;
        fclose(fp);
    }
    return mem;
}

void testDevMemAlloc()
{
    printf("mem at begining: %.2f MB\n",getHostMemCostInMB());
    cudaSetDevice(0);
    printf("mem after setdev: %.2f MB\n",getHostMemCostInMB());
    float* d_a = NULL;
    cudamalloc((void **)&d_a,sizeof(float)*1024*1024*1024);//alloc 4GB on dev
    printf("mem after mallocdev: %.2f MB\n",getHostMemCostInMB());
    cudaFree(d_a);
    printf("mem after freedev: %.2f MB\n",getHostMemCostInMB());
}

它将输出为:

开头的内存:19.73 MB setdev 后的内存:16789.95 MB mallocdev 后的内存:21482.75 MB freedev 之后的内存:17386.75 MB

这意味着:主机端的 cudaSetDevice 成本为 16.7GB,cudamalloc 成本为 4.6GB。

我猜函数 cudaSetDevice 会保留一些内存以备不时之需。至于cudamalloc,它真的在host端预留了相同的大小吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)