--- trunk/OOPSE/libmdtools/mpiSimulation_module.F90 2003/07/17 19:25:51 631 +++ trunk/OOPSE/libmdtools/mpiSimulation_module.F90 2003/08/13 21:20:20 694 @@ -7,7 +7,7 @@ !! !! @author Charles F. Vardeman II !! @author Matthew Meineke -!! @version $Id: mpiSimulation_module.F90,v 1.5 2003-07-17 19:25:51 chuckv Exp $, $Date: 2003-07-17 19:25:51 $, $Name: not supported by cvs2svn $, $Revision: 1.5 $ +!! @version $Id: mpiSimulation_module.F90,v 1.6 2003-08-13 21:20:20 chuckv Exp $, $Date: 2003-08-13 21:20:20 $, $Name: not supported by cvs2svn $, $Revision: 1.6 $ module mpiSimulation use definitions @@ -48,6 +48,8 @@ module mpiSimulation public :: mpi_status_size public :: mpi_any_source + + !! Safety logical to prevent access to ComponetPlan until !! set by C++. logical :: ComponentPlanSet = .false. @@ -56,8 +58,13 @@ module mpiSimulation !! generic mpi error declaration. integer,public :: mpi_err - +#ifdef PROFILE + public :: printCommTime + real(kind = dp ) :: commTime = 0.0_dp + real(kind = dp ) :: commTimeInitial,commTimeFinal +#endif + !! Include mpiComponentPlan type. mpiComponentPlan is a !! dual header file for both c and fortran. #define __FORTRAN90 @@ -504,10 +511,16 @@ contains if (present(status)) status = 0 noffset = this_plan%displs(this_plan%myPlanRank) - +#ifdef PROFILE + commTimeInitial = mpi_wtime() +#endif call mpi_allgatherv(sbuffer,this_plan%gsPlanSize, mpi_double_precision, & rbuffer,this_plan%counts,this_plan%displs,mpi_double_precision, & this_plan%myPlanComm, mpi_err) +#ifdef PROFILE + commTimeFinal = mpi_wtime() + commTime = commTime + commTimeFinal - commTimeInitial +#endif if (mpi_err /= 0) then if (present(status)) status = -1 @@ -528,10 +541,18 @@ contains if (present(status)) status = 0 ! noffset = this_plan%displs(this_plan%me) - +#ifdef PROFILE + commTimeInitial = mpi_wtime() +#endif + call mpi_allgatherv(sbuffer,this_plan%gsPlanSize, mpi_double_precision, & rbuffer,this_plan%counts,this_plan%displs,mpi_double_precision, & this_plan%myPlanComm, mpi_err) + +#ifdef PROFILE + commTimeFinal = mpi_wtime() + commTime = commTime + commTimeFinal - commTimeInitial +#endif if (mpi_err /= 0) then if (present(status)) status = -1 @@ -549,8 +570,15 @@ contains if (present(status)) status = 0 +#ifdef PROFILE + commTimeInitial = mpi_wtime() +#endif call mpi_reduce_scatter(sbuffer,rbuffer, this_plan%counts, & mpi_double_precision, MPI_SUM, this_plan%myPlanComm, mpi_err) +#ifdef PROFILE + commTimeFinal = mpi_wtime() + commTime = commTime + commTimeFinal - commTimeInitial +#endif if (mpi_err /= 0) then if (present(status)) status = -1 @@ -567,8 +595,16 @@ contains external mpi_reduce_scatter if (present(status)) status = 0 +#ifdef PROFILE + commTimeInitial = mpi_wtime() +#endif + call mpi_reduce_scatter(sbuffer,rbuffer, this_plan%counts, & mpi_double_precision, MPI_SUM, this_plan%myPlanComm, mpi_err) +#ifdef PROFILE + commTimeFinal = mpi_wtime() + commTime = commTime + commTimeFinal - commTimeInitial +#endif if (mpi_err /= 0) then if (present(status)) status = -1 @@ -689,6 +725,14 @@ contains myNode = mpiSim%myNode end function getMyNode +#ifdef PROFILE + subroutine printCommTime() + + write(*,*) "MPI communication time is: ", commTime + + end subroutine printCommTime +#endif + #endif // is_mpi end module mpiSimulation