微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cudaMalloc 增加主机内存成本?

如何解决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 举报,一经查实,本站将立刻删除。