【发布时间】:2013-05-08 19:12:58
【问题描述】:
我有一个简单的 Fortran 程序,其中主要组件是计算点积的 4 核 OpenMP 部分
OMP_NUM_THREADS=4
...
Do 30 k=1,lines
co(k)=0
si(k)=0
co_temp=0
si_temp=0
!$OMP PARALLEL DO PRIVATE(dotprod,Qcur) REDUCTION(+:co_temp,si_temp)
Do 40 i=1,ION_COUNT
dotprod=(rx(k)*x(i)+ry(k)*y(i)+rz(k)*z(i))*((2*3.1415926535)/l)
co_temp=co_temp+COS(dotprod)*26 !Qcur/Qavg
si_temp=si_temp+SIN(dotprod)*26 !Qcur/Qavg
40 continue
!$OMP END PARALLEL DO
co(k)=co_temp
si(k)=si_temp
q(k)= ( co(k),-si(k) )
s(k)= s(k) +( q(k) * conjg(q(k)) )
r(k)=r(k)+q(k)
30 continue
我对 Fortran 或其优化不是很有经验。我正在使用 xlf90_r 文件 -qsmp=omp 编译。使用 4 核时我只获得了大约 1/2 的加速,使用 C 的其他人在执行相同的计算时获得了几乎完美的 1/4 加速。无论 OMP 循环是在 30 还是 40 上,我得到的时间都差不多。此外,我围绕循环 30 以及整个程序进行计时,这个循环占用了 99.x% 的时间,所以我很确定这一点是瓶颈。我在这部分中犯了任何令人震惊的缓慢错误,任何人都可以看到?
【问题讨论】:
-
这个问题的表述有点模糊。你能生成一个重现行为的小型可编译测试(FORTRAN + C)吗?您的目标是哪台 IBM 计算机?只是为了乏味,
1/2加速是2x减速:-) -
这种方法的问题是我不会C,否则我会。 IBM计算机是超级计算机上的4核节点。 PowerPC 970 MP 是页面说它使用的核心。本质上,我只是想知道是否有人看到任何会显着减慢速度的东西。
-
C 代码是否在同一台机器上运行?
-
如果您真的在使用超级计算机,我建议您将问题重定向到用户支持团队。如果没有用户支持团队,那么您就不是在使用超级计算机!
-
C 代码在同一台机器和节点上运行,或者在同一节点上运行。用户支持团队可能不太关心我的问题;可以说我不是他们的第一要务(或第二或第三......)。我正在查看大约 5.5 小时的总迭代时间,内循环约 28,000 次循环,外循环约 650 万次。