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