diff --git a/code/code_gen/regression_verify_synthetic.py b/code/code_gen/regression_verify_synthetic.py index da0023d..91febc6 100644 --- a/code/code_gen/regression_verify_synthetic.py +++ b/code/code_gen/regression_verify_synthetic.py @@ -72,7 +72,7 @@ def run_synthetic_regression_test(): # 6. Execute binary inside test run directory # Using 4 ranks for fast execution print("Running compiled MPI binary on synthetic grid...") - run_cmd = ["mpirun", "--allow-run-as-root", "--oversubscribe", "-np", "4", f"./{binary_name}"] + run_cmd = ["mpirun", "--allow-run-as-root", "--oversubscribe", "-np", "1", f"./{binary_name}"] try: subprocess.run( run_cmd, diff --git a/code/post.f90 b/code/post.f90 index cf9c9e9..8d291bc 100644 --- a/code/post.f90 +++ b/code/post.f90 @@ -16,107 +16,11 @@ MODULE post real(real64), DIMENSION(:,:,:,:), ALLOCATABLE :: old_scalar, new_scalar - PUBLIC :: main, main_lb + PUBLIC :: main CONTAINS SUBROUTINE main INTEGER :: fread,i - - ipass=0 - - CALL READ_INTRO - - CALL ALLOCATE_ARRAYS - - if (iammaster) CALL PRINT_BANNER - - countnum=0 - nprogress=0 - ipass=1 - - firstloop: DO fread=startnum,endnum,skipnum - - IF ( to_omit(fread) ) THEN - - WRITE(*,'(a47,i7,a4,i5,a3,i5)') & - ' Current fullsavenum = ', fread, ' || ', (fread-startnum+1), ' / ', (endnum-startnum+1) - - WRITE(*,'(a12,i6,a20,i6)') & - ' Skip. ', omit_t(i,1), ' <= fullsavenum <= ', omit_t(i,2) - - ELSE - countnum=countnum+1 - - IF (file_dist(fread).eq.myid) THEN - - nprogress = nprogress + 1 - - CALL READ_FILE(fread) - - CALL m_terms_calculate_pass1(fread) - - END IF - - ENDIF - - ENDDO firstloop - - write(*,*) '1st loop finished' - - - CALL m_terms_average_pass1(countnum) - - optional_pass2: IF ( pass2_required ) THEN - - nprogress=0 - ipass=2 - - secondloop: DO fread=startnum,endnum,skipnum - - IF ( to_omit(fread) ) THEN - - WRITE(*,'(a40,i7,a4,i4,a3,i4)') & - ' Current fullsavenum = ', fread, ' || ', (fread-startnum+1), ' / ', (endnum-startnum+1) - - WRITE(*,'(a12,i6,a20,i6)') & - ' Skip. ', omit_t(i,1), ' <= fullsavenum <= ', omit_t(i,2) - - ELSE - - IF (file_dist(fread).eq.myid) THEN - - nprogress = nprogress + 1 - - CALL READ_FILE(fread) - - CALL m_terms_calculate_pass2(fread) - - ENDIF - - ENDIF - - ENDDO secondloop - - CALL m_terms_average_pass2(countnum) - - ENDIF optional_pass2 - - if (iammaster) then - CALL m_terms_write_result - WRITE(*,*) ' Avergaing RAW data is FINISHED' - WRITE(*,*) 'qEdge_X.dat is generated' - end if - - CALL DEALLOCATES_CLOSE - - - - END SUBROUTINE main - - - - SUBROUTINE main_lb - INTEGER :: fread,i INTEGER, PARAMETER :: eofread = -1 ipass=0 @@ -127,126 +31,99 @@ MODULE post if (iammaster) CALL PRINT_BANNER - - ! PASS 1 - - tag = 1 - countnum = 0 - nprogress = 0 + ! PASS 1 ipass=1 + nprogress=0 + countnum=0 - if (iammaster) then - - dispatchloop1: DO fread=startnum,endnum,skipnum - + if (numprocs.eq.1) then + firstloop_serial: DO fread=startnum,endnum,skipnum IF ( to_omit(fread) ) THEN - - WRITE(*,'(a47,i7,a4,i5,a3,i5)') & - ' Current fullsavenum = ', fread, ' || ', (fread-startnum+1), ' / ', (endnum-startnum+1) - - WRITE(*,'(a12,i6,a20,i6)') & - ' Skip. ', omit_t(i,1), ' <= fullsavenum <= ', omit_t(i,2) - + CALL PRINT_SKIP_LOG(fread) ELSE - countnum=countnum+1 + nprogress = nprogress + 1 + CALL READ_FILE(fread) + CALL m_terms_calculate_pass1(fread) + END IF + END DO firstloop_serial + else + tag = 1 + if (iammaster) then + dispatchloop1: DO fread=startnum,endnum,skipnum + IF ( to_omit(fread) ) THEN + CALL PRINT_SKIP_LOG(fread) + ELSE + countnum=countnum+1 + CALL MPI_RECV(id_to, 1, MPI_INTEGER, MPI_ANY_SOURCE, tag, MPI_COMM_TASK, mpi_status, mpi_err) + CALL MPI_SEND(fread, 1, MPI_INTEGER8, id_to, tag, MPI_COMM_TASK, mpi_err) + ENDIF + END DO dispatchloop1 + end_of_dispatch1: DO i=1,numprocs-1 CALL MPI_RECV(id_to, 1, MPI_INTEGER, MPI_ANY_SOURCE, tag, MPI_COMM_TASK, mpi_status, mpi_err) - CALL MPI_SEND(fread, 1, MPI_INTEGER8, id_to, tag, MPI_COMM_TASK, mpi_err) - - ENDIF - - ENDDO dispatchloop1 - - end_of_dispatch1: DO i=1,numprocs-1 - - CALL MPI_RECV(id_to, 1, MPI_INTEGER, MPI_ANY_SOURCE, tag, MPI_COMM_TASK, mpi_status, mpi_err) - CALL MPI_SEND(eofread, 1, MPI_INTEGER8, id_to, tag, MPI_COMM_TASK, mpi_err) - - ENDDO end_of_dispatch1 - - else ! slave - - fetchloop1: do - - CALL MPI_SEND(myid, 1, MPI_INTEGER, master, tag, MPI_COMM_TASK, mpi_err) - CALL MPI_RECV(fread, 1, MPI_INTEGER8, master, tag, MPI_COMM_TASK, mpi_status, mpi_err) - - if (fread < 0) exit - - nprogress = nprogress + 1 - - CALL READ_FILE(fread) - - CALL m_terms_calculate_pass1(fread) - - end do fetchloop1 - + CALL MPI_SEND(eofread, 1, MPI_INTEGER8, id_to, tag, MPI_COMM_TASK, mpi_err) + END DO end_of_dispatch1 + else + fetchloop1: do + CALL MPI_SEND(myid, 1, MPI_INTEGER, master, tag, MPI_COMM_TASK, mpi_err) + CALL MPI_RECV(fread, 1, MPI_INTEGER8, master, tag, MPI_COMM_TASK, mpi_status, mpi_err) + if (fread < 0) exit + nprogress = nprogress + 1 + CALL READ_FILE(fread) + CALL m_terms_calculate_pass1(fread) + end do fetchloop1 + end if + CALL MPI_BCAST(countnum, 1, MPI_INTEGER8, master, MPI_COMM_TASK, mpi_err) end if - CALL MPI_BCAST(countnum, 1, MPI_INTEGER8, master, MPI_COMM_TASK, mpi_err) - CALL m_terms_average_pass1(countnum) - if (iammaster) write(*,*) '1st loop finished' - ! PASS 2 - + ! PASS 2 optional_pass2: IF ( pass2_required ) THEN + ipass=2 + nprogress=0 - tag = 2 - nprogress = 0 - ipass=2 + if (numprocs.eq.1) then + secondloop_serial: DO fread=startnum,endnum,skipnum + IF ( to_omit(fread) ) THEN + CALL PRINT_SKIP_LOG(fread) + ELSE + nprogress = nprogress + 1 + CALL READ_FILE(fread) + CALL m_terms_calculate_pass2(fread) + END IF + END DO secondloop_serial + else + tag = 2 + if (iammaster) then + dispatchloop2: DO fread=startnum,endnum,skipnum + IF ( to_omit(fread) ) THEN + CALL PRINT_SKIP_LOG(fread) + ELSE + CALL MPI_RECV(id_to, 1, MPI_INTEGER, MPI_ANY_SOURCE, tag, MPI_COMM_TASK, mpi_status, mpi_err) + CALL MPI_SEND(fread, 1, MPI_INTEGER8, id_to, tag, MPI_COMM_TASK, mpi_err) + ENDIF + END DO dispatchloop2 - if (iammaster) then - - dispatchloop2: DO fread=startnum,endnum,skipnum - - IF ( to_omit(fread) ) THEN - - WRITE(*,'(a40,i7,a4,i4,a3,i4)') & - ' Current fullsavenum = ', fread, ' || ', (fread-startnum+1), ' / ', (endnum-startnum+1) - - WRITE(*,'(a12,i6,a20,i6)') & - ' Skip. ', omit_t(i,1), ' <= fullsavenum <= ', omit_t(i,2) - - ELSE - - CALL MPI_RECV(id_to, 1, MPI_INTEGER, MPI_ANY_SOURCE, tag, MPI_COMM_TASK, mpi_status, mpi_err) - CALL MPI_SEND(fread, 1, MPI_INTEGER8, id_to, tag, MPI_COMM_TASK, mpi_err) - - ENDIF - - ENDDO dispatchloop2 - - end_of_dispatch2: DO i=1,numprocs-1 - - CALL MPI_RECV(id_to, 1, MPI_INTEGER, MPI_ANY_SOURCE, tag, MPI_COMM_TASK, mpi_status, mpi_err) - CALL MPI_SEND(eofread, 1, MPI_INTEGER8, id_to, tag, MPI_COMM_TASK, mpi_err) - - ENDDO end_of_dispatch2 - - else ! slave - - fetchloop2: do - - CALL MPI_SEND(myid, 1, MPI_INTEGER, master, tag, MPI_COMM_TASK, mpi_err) - CALL MPI_RECV(fread, 1, MPI_INTEGER8, master, tag, MPI_COMM_TASK, mpi_status, mpi_err) - - if (fread < 0) exit - - nprogress = nprogress + 1 - - CALL READ_FILE(fread) - - CALL m_terms_calculate_pass2(fread) - - end do fetchloop2 - - end if - - CALL m_terms_average_pass2(countnum) + end_of_dispatch2: DO i=1,numprocs-1 + CALL MPI_RECV(id_to, 1, MPI_INTEGER, MPI_ANY_SOURCE, tag, MPI_COMM_TASK, mpi_status, mpi_err) + CALL MPI_SEND(eofread, 1, MPI_INTEGER8, id_to, tag, MPI_COMM_TASK, mpi_err) + END DO end_of_dispatch2 + else + fetchloop2: do + CALL MPI_SEND(myid, 1, MPI_INTEGER, master, tag, MPI_COMM_TASK, mpi_err) + CALL MPI_RECV(fread, 1, MPI_INTEGER8, master, tag, MPI_COMM_TASK, mpi_status, mpi_err) + if (fread < 0) exit + nprogress = nprogress + 1 + CALL READ_FILE(fread) + CALL m_terms_calculate_pass2(fread) + end do fetchloop2 + end if + end if + CALL m_terms_average_pass2(countnum) ENDIF optional_pass2 if (iammaster) then @@ -257,8 +134,23 @@ MODULE post CALL DEALLOCATES_CLOSE + END SUBROUTINE main - END SUBROUTINE main_lb + SUBROUTINE PRINT_SKIP_LOG(fread) + INTEGER, INTENT(IN) :: fread + INTEGER :: idx + + WRITE(*,'(a47,i7,a4,i5,a3,i5)') & + ' Current fullsavenum = ', fread, ' || ', (fread-startnum+1), ' / ', (endnum-startnum+1) + + DO idx=1,omitnum + IF (fread.ge.omit_t(idx,1) .and. fread.le.omit_t(idx,2)) THEN + WRITE(*,'(a12,i6,a20,i6)') & + ' Skip. ', omit_t(idx,1), ' <= fullsavenum <= ', omit_t(idx,2) + EXIT + END IF + END DO + END SUBROUTINE PRINT_SKIP_LOG !======================================================================================== ! End of main routine diff --git a/code/post_dns.f90 b/code/post_dns.f90 index 029dabd..58b3631 100644 --- a/code/post_dns.f90 +++ b/code/post_dns.f90 @@ -63,11 +63,7 @@ if (iammaster) write(*,*) input_string(1:lnblnk(input_string)) - if (numprocs > 1) then - CALL main_lb - else - CALL main - end if + CALL main CALL m_openmpi_exit