我得到了一个代表金属板表面温度点的二维矩阵。矩阵(板)的边缘保持恒定在 20 摄氏度,并且在一个预定义的点有一个 100 摄氏度的恒定热源。所有其他网格点最初设置为 50 摄氏度。
我的目标是获取所有内部网格点并通过对周围四个网格点(i+1、i-1、j+1、j-1)进行迭代平均来计算其稳态温度,直到我达到收敛(变化迭代之间小于 0.02 摄氏度)。
据我所知,我遍历网格点的顺序无关紧要。
对我来说,这听起来是调用 FortranFORALL
结构并探索并行化乐趣的好时机。
如何确保代码确实被并行化了?
例如,我可以在我的单核 PowerBook G4 上编译它,我预计并行化不会提高速度。但是如果我在双核 AMD Opteron 上编译,我会假设 FORALL 结构可以被利用。
或者,有没有办法衡量程序的有效并行化?
更新
针对 MSB 的问题,这是 gfortran 版本 4.4.0。gfortran 是否支持自动多线程?
值得注意的是,FORALL 结构已经过时了,我想,然后是自动矢量化。
也许这对于一个单独的问题是最好的,但是自动矢量化是如何工作的?编译器是否能够检测到循环中只使用了纯函数或子例程?