openmp并行读写文件怎么提高效率
我的程序有大约300个二进制格式文件需要进行读写,每个文件约1g。为了加快效率,程序采用openmp,也就是不同线程去读取不同的文件,程序的一部分就是这样
//打开ns个文件
for(i=0;i<ns;i++){
sprintf(name,"file%d.dat",i);
fupglist[i]=fopen(name,"wb");
}
//读取这ns个文件
#ifdef _OPENMP
#pragma omp parallel for lastprivate(its,i,j)
#endif
for (is=0; is < ns; is++) {
its=omp_get_thread_num();
for(i=0;i<upgnum[is];i++)fread(&(upglist[its]->order[i]),4,1,fupglist[is]);
for(i=0;i<upgnum[is];i++)
for(j=0;j<2;j++)
fread(&(upglist[its]->update[i][j]),4,1,fupglist[is]);
for(i=0;i<upgnum[is];i++)
for(j=0;j<4;j++)
fread(&(upglist[its]->ww[i][j]),4,1,fupglist[is]);
}
但是测试结果发现程序的效率并不高,虽然开了16个进程,但是cpu利用率却往往不到100……(最高应该是1600,因为16个核)。想问一下大家我这个并行读取的思路有什么问题吗?该怎么提高效率呢?
跪谢!!!