24小时热门版块排行榜    

查看: 1301  |  回复: 4

swordshadow

金虫 (初入文坛)

[求助] 求助:openmp 单节点多核并行效率问题

有个fdtd的程序需要并行,但效率始终不高,程序结构很简单,类似
#pragma omp for collapse(2)       
for (int i = 0; i <= imax; i++ )        {       
      for (int j = 0; j <=jmax; j++ ) {
           for (int k = 0; k <= kmax; k++ )         {
       vx[j][k] += fdc_all[j][0][k]*( tauxx[j][k]-tauxx[i-1][j][k] )  
                 + fdc_all[j][1][k]*( tauxy[j+1][k]-tauxy[j][k])        
                 + fdc_all[j][2][k]*( tauxz[j][k+1]-tauxz[j][k] );
      ..........多个类似vx的结构
      }
   }
  }
程序计算花费时间很少,而内存读取操作花了绝大部分时间,这种情况如何优化程序才能提高并行效率?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

swordshadow

金虫 (初入文坛)

自己顶顶
2楼2012-11-30 15:42:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mhyuan

金虫 (小有名气)


csgt0: 金币+1, 欢迎交流 2012-12-10 10:29:34
你这个是不是没有并行起来啊,是不是在前面的设置部分,应给指出要并行的变量,我用的是Fortran,是这样的,对C不是很了解。
3楼2012-12-07 20:38:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

swordshadow

金虫 (初入文坛)

★ ★
fegg7502: 金币+2, 鼓励交流 2012-12-13 16:06:58
并行起来肯定是有的,但是效率比较奇怪,对于小的计算规模,效率高,扩大计算规模就下降得很快;对于以上的代码,对于(i,j,k)=100*100*100规模的16核,可以达到加速比46,效率293%,但是如果规模是500*500*500,16核加速比就只有14,效率仅89%。
该怎么确定问题所在?比如内存带宽瓶颈?有没有人知道怎么解决?
4楼2012-12-12 15:29:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

john737

新虫 (初入文坛)

【答案】应助回帖

不懂openmp,会不会是并行切换得太频繁,导致cache经常轮空,反而拖慢了?
5楼2012-12-22 23:06:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 swordshadow 的主题更新
信息提示
请填处理意见