load balanced main subroutine, processor cumulative performance log, only master print finish message, clean trailing w/s
This commit is contained in:
parent
7db0a2eb32
commit
c6cafed31e
1 changed files with 153 additions and 9 deletions
162
code/post.f90
162
code/post.f90
|
|
@ -8,6 +8,7 @@
|
||||||
IMPLICIT NONE
|
IMPLICIT NONE
|
||||||
PRIVATE
|
PRIVATE
|
||||||
INTEGER :: countnum
|
INTEGER :: countnum
|
||||||
|
INTEGER :: nprogress
|
||||||
INTEGER :: num_, dummyu_ ! hybrid
|
INTEGER :: num_, dummyu_ ! hybrid
|
||||||
REAL :: tnow
|
REAL :: tnow
|
||||||
|
|
||||||
|
|
@ -15,7 +16,7 @@
|
||||||
|
|
||||||
PUBLIC :: main
|
PUBLIC :: main
|
||||||
CONTAINS
|
CONTAINS
|
||||||
|
|
||||||
SUBROUTINE main
|
SUBROUTINE main
|
||||||
INTEGER :: fread,i
|
INTEGER :: fread,i
|
||||||
|
|
||||||
|
|
@ -46,11 +47,11 @@
|
||||||
CALL READ_FILE(fread)
|
CALL READ_FILE(fread)
|
||||||
|
|
||||||
CALL m_terms_calculate_pass1
|
CALL m_terms_calculate_pass1
|
||||||
|
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
ENDDO firstloop
|
ENDDO firstloop
|
||||||
|
|
||||||
write(*,*) '1st loop finished'
|
write(*,*) '1st loop finished'
|
||||||
|
|
@ -84,17 +85,157 @@
|
||||||
ENDDO secondloop
|
ENDDO secondloop
|
||||||
|
|
||||||
CALL m_terms_average_pass2(countnum)
|
CALL m_terms_average_pass2(countnum)
|
||||||
|
|
||||||
if (iammaster) CALL m_terms_write_result
|
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
|
CALL DEALLOCATES_CLOSE
|
||||||
|
|
||||||
|
|
||||||
WRITE(*,*) ' Avergaing RAW data is FINISHED'
|
|
||||||
WRITE(*,*) 'qEdge_X.dat is generated'
|
|
||||||
|
|
||||||
END SUBROUTINE main
|
END SUBROUTINE main
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE main_lb
|
||||||
|
INTEGER :: fread,i
|
||||||
|
|
||||||
|
CALL READ_INTRO
|
||||||
|
|
||||||
|
CALL ALLOCATE_ARRAYS
|
||||||
|
|
||||||
|
if (iammaster) CALL PRINT_BANNER
|
||||||
|
|
||||||
|
|
||||||
|
! PASS 1
|
||||||
|
|
||||||
|
tag = 1
|
||||||
|
countnum = 0
|
||||||
|
nprogress = 0
|
||||||
|
|
||||||
|
if (iammaster) then
|
||||||
|
|
||||||
|
dispatchloop1: 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
|
||||||
|
|
||||||
|
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_INTEGER, 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(-1, 1, MPI_INTEGER, 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_INTEGER, 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
|
||||||
|
|
||||||
|
end do fetchloop1
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
CALL MPI_BCAST(countnum, 1, MPI_INTEGER, master, MPI_COMM_TASK, mpi_err)
|
||||||
|
|
||||||
|
CALL m_terms_average_pass1(countnum)
|
||||||
|
|
||||||
|
if (iammaster) write(*,*) '1st loop finished'
|
||||||
|
|
||||||
|
! PASS 2
|
||||||
|
|
||||||
|
tag = 2
|
||||||
|
nprogress = 0
|
||||||
|
|
||||||
|
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_INTEGER, 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(-1, 1, MPI_INTEGER, 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_INTEGER, 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
|
||||||
|
|
||||||
|
end do fetchloop2
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
CALL m_terms_average_pass2(countnum)
|
||||||
|
|
||||||
|
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_lb
|
||||||
|
|
||||||
!========================================================================================
|
!========================================================================================
|
||||||
! End of main routine
|
! End of main routine
|
||||||
!========================================================================================
|
!========================================================================================
|
||||||
|
|
@ -131,8 +272,11 @@
|
||||||
|
|
||||||
WRITE(*,'(a4,i3,a40,f8.3,a2,i7,a2,i5,a4,i5,a3,i5)') ' p ', myid, ': time / NCYC / fullsavenum = ',tnow,&
|
WRITE(*,'(a4,i3,a40,f8.3,a2,i7,a2,i5,a4,i5,a3,i5)') ' p ', myid, ': time / NCYC / fullsavenum = ',tnow,&
|
||||||
' /',ncyc,' /',num,' || ',(num-startnum+1),' / ',(endnum-startnum+1)
|
' /',ncyc,' /',num,' || ',(num-startnum+1),' / ',(endnum-startnum+1)
|
||||||
|
|
||||||
WRITE(*,*) ' Reading current data file and processing'
|
WRITE(*,*) ' Reading current data file and processing'
|
||||||
|
|
||||||
|
WRITE(*,'(a10,i3,a10,i5,a10)') 'processor ', myid, ' processed ', nprogress, ' files'
|
||||||
|
|
||||||
num_=num
|
num_=num
|
||||||
|
|
||||||
IF(num.le.shiftnum) THEN
|
IF(num.le.shiftnum) THEN
|
||||||
|
|
@ -180,11 +324,11 @@
|
||||||
|
|
||||||
DEALLOCATE(old_scalar)
|
DEALLOCATE(old_scalar)
|
||||||
DEALLOCATE(new_scalar)
|
DEALLOCATE(new_scalar)
|
||||||
|
|
||||||
IF(omitnum.gt.0) DEALLOCATE(omit_t)
|
IF(omitnum.gt.0) DEALLOCATE(omit_t)
|
||||||
|
|
||||||
DEALLOCATE(file_dist)
|
DEALLOCATE(file_dist)
|
||||||
|
|
||||||
END SUBROUTINE DEALLOCATES_CLOSE
|
END SUBROUTINE DEALLOCATES_CLOSE
|
||||||
|
|
||||||
END MODULE post
|
END MODULE post
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue