Я распараллелил распараллеливание этого фрагмента кода ниже с MPI для первого цикла jh
и с OpenMP для 3-го тройного цикла (iz
, ix
, iy
).
Myпроблема в том, что этот тройной цикл занимает около 25 с, а 2-й цикл может достигать 100000, что делает его довольно длинным.
Есть ли возможность распараллелить 2-й цикл is
также с MPI?
do jh=rank+1,nh,size
! Initializing O
O=0.
do is=1,ns
! Reading file1
call readfile(file1(is),I)
! Reading file2
call readfile(file2(is),H)
!$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(iz,ix,iy,ih) COLLAPSE(3)
do iz=1,nz
do ix=1,nx
do iy=1,ny
ih=H(iz,ix,iy)
if (ih.eq.jh) then
O(iz,ix,iy)=O(iz,ix,iy)+I(iz,ix,iy)
endif
enddo ! iy
enddo ! ix
enddo ! iz
!$OMP END PARALLEL DO
enddo ! isrc
call writefile(out,O)
! Initializing for the next offset
O=0.
no=1
enddo ! jh