问题描述
我发现一些 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 (将#修改为@)