|
板凳
楼主 |
发表于 2020-6-9 22:23:12
|
只看该作者
谢谢你的回复。
我写了一个简短的例子,这个例子与我的程序结构是一样的。代码如下。
PROGRAM MAIN
IMPLICIT NONE
INTEGER :: i, j, k
DOUBLE PRECISION :: en,ei,es
DOUBLE PRECISION :: ki(1000,2000), et(200),kn(2000)
OPEN(UNIT=3, FILE='output.dat', STATUS='UNKNOWN')
DO i = 1, 1000, 1
DO j = 1, 2000, 1
ki(j,k) = DBLE(j) + DBLE(k)
END DO
END DO
outer_loop DO i = 1, 200, 1
en = 2.0d0/DBLE(200)*(i-1)-1.0d0
et(i) = en
es = 0.0d0
inner_loop DO j = 1, 1000, 1
kn=ki(j,:)
CALL CAL(en,kn,ei)
es = es + ei
END DO inner_loop
WRITE (UNIT=3, FMT=*) et(i), es
END DO outer_loop
CLOSE(UNIT=3)
STOP
END PROGRAM MAIN
SUBROUTINE CAL (en,kn,ei)
IMPLICIT NONE
INTEGER :: i
DOUBLE PRECISION :: en, ei, gf,p
DOUBLE PRECISION :: kn(2000)
p = 3.14d0
ei = 0.0d0
DO i = 1, 2000, 1
gf = 1.0d0 / (en - kn(i) * p)
ei = ei + gf
END DO
RETURN
END SUBROUTINE CAL
请问要如何区分哪个CPU执行哪个循环(inner_loop和outer_loop)呢?尤其是当使用MPI和OpenMP混合编程的时候,要如何修改这个代码呢?能麻烦你帮我做下简短的修改吗?多谢啦。 |
|