Как распараллелить двойной цикл с MPI с чтением файлов во внутреннем цикле? - PullRequest
0 голосов
/ 08 ноября 2019

Я распараллелил распараллеливание этого фрагмента кода ниже с 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
...