我是 OpenMP 的新手,目前无法访问我可以查看详细信息的工作站。在着手进行部分操作之前,有一个快速的问题来设置基础知识。
假设我有一个用 FORTRAN90 编写的串行程序,它通过迭代演化一个映射并在演化后给出变量的最终值,代码如下所示:
call random_number(xi) !! RANDOM INITIALIZATION OF THE VARIABLE
do i=1,50000 !! ITERATION OF THE SYSTEM
xf=4.d0*xi*(1.d0-xi) !! EVOLUTION OF THE SYSTEM
xi=xf
enddo !! END OF SYSTEM ITERATION
print*, xf
我想针对 100 个不同的随机初始条件在集群上运行与独立进程相同的代码,并查看输出如何随初始条件而变化。用于此目的的串行程序如下所示:
do iter=1,100 !! THE INITIAL CONDITION LOOP
call random_number(xi) !! RANDOM INITIALIZATION OF THE VARIABLE
do i=1,50000 !! ITERATION OF THE SYSTEM
xf=4.d0*xi*(1.d0-xi) !! EVOLUTION OF THE SYSTEM
xi=xf
enddo !! END OF SYSTEM ITERATION
print*, xf
我能想到的 OpenMP 实现会起作用吗?我能想出的代码如下:
!$ OMP PARALLEL PRIVATE(xi,xf,i)
!$ OMP DO
do iter=1,100 !! THE INITIAL CONDITION LOOP
call random_number(xi) !! RANDOM INITIALIZATION OF THE VARIABLE
do i=1,50000 !! ITERATION OF THE SYSTEM
xf=4.d0*xi*(1.d0-xi) !! EVOLUTION OF THE SYSTEM
xi=xf
enddo !! END OF SYSTEM ITERATION
print*, xf
!$ OMP ENDDO
!$ OMP END PARALLEL
提前感谢您的任何建议或帮助。