openmp并行读写文件怎么提高效率

ding529544571 2016-03-01 02:46:49
我的程序有大约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个核)。想问一下大家我这个并行读取的思路有什么问题吗?该怎么提高效率呢?

跪谢!!!
...全文
2138 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluewanderer 2016-03-28
  • 打赏
  • 举报
回复
基本上,只能上SSD了... 不过SSD一般起码是32线程并发,靠openmp有点那个... 还有,即便SSD你顺序读写也是一个线程就能到峰值。多线程是给随机读写用的...
pww71 2016-03-02
  • 打赏
  • 举报
回复
一个硬盘头,并行有什么用。
ding529544571 2016-03-02
  • 打赏
  • 举报
回复
顶起来啊……

2,408

社区成员

发帖
与我相关
我的任务
社区描述
高性能计算
社区管理员
  • 高性能计算社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧