12dfe2926SJacob Faibussowitsch! 22dfe2926SJacob Faibussowitsch! 32dfe2926SJacob Faibussowitsch! Description: Demonstrates how users can augment the PETSc profiling by 42dfe2926SJacob Faibussowitsch! inserting their own event logging. 52dfe2926SJacob Faibussowitsch! 62dfe2926SJacob Faibussowitsch 72dfe2926SJacob Faibussowitsch program SchoolDay 82dfe2926SJacob Faibussowitsch#include <petsc/finclude/petscsys.h> 92dfe2926SJacob Faibussowitsch#include <petsc/finclude/petsclog.h> 102dfe2926SJacob Faibussowitsch use petscmpi ! or mpi or mpi_f08 112dfe2926SJacob Faibussowitsch use petscsys 122dfe2926SJacob Faibussowitsch implicit none 132dfe2926SJacob Faibussowitsch 142dfe2926SJacob Faibussowitsch ! Settings: 152dfe2926SJacob Faibussowitsch integer, parameter :: verbose=0 ! 0: silent, >=1 : increasing amount of debugging output 162dfe2926SJacob Faibussowitsch integer, parameter :: msgLen = 30 ! number of reals which is sent with MPI_Isend 17*ccfd86f1SBarry Smith PetscReal, parameter :: second=0.1 ! time is sped up by a factor 10 182dfe2926SJacob Faibussowitsch 192dfe2926SJacob Faibussowitsch ! Codes 202dfe2926SJacob Faibussowitsch integer, parameter :: BOY=1, GIRL=2, TEACHER=0 21*ccfd86f1SBarry Smith PetscMPIInt, parameter :: tagMsg = 1200 222dfe2926SJacob Faibussowitsch 232dfe2926SJacob Faibussowitsch ! Timers 242dfe2926SJacob Faibussowitsch PetscLogEvent :: Morning, Afternoon 252dfe2926SJacob Faibussowitsch PetscLogEvent :: PlayBall, SkipRope 262dfe2926SJacob Faibussowitsch PetscLogEvent :: TidyClass 272dfe2926SJacob Faibussowitsch PetscLogEvent :: Lessons, CorrectHomework 282dfe2926SJacob Faibussowitsch PetscClassId classid 292dfe2926SJacob Faibussowitsch 302dfe2926SJacob Faibussowitsch ! Petsc-stuff 312dfe2926SJacob Faibussowitsch PetscErrorCode :: ierr 322dfe2926SJacob Faibussowitsch 332dfe2926SJacob Faibussowitsch ! MPI-stuff 342dfe2926SJacob Faibussowitsch PetscMPIInt :: rank, size 352dfe2926SJacob Faibussowitsch PetscReal, allocatable :: message(:,:) 362dfe2926SJacob Faibussowitsch integer :: item, maxItem 372dfe2926SJacob Faibussowitsch integer4 :: status(MPI_STATUS_SIZE) 382dfe2926SJacob Faibussowitsch PetscMPIInt req 39cb9ef012SToby Isaac integer(c_int) msgLen_c_int 402dfe2926SJacob Faibussowitsch 412dfe2926SJacob Faibussowitsch ! Own stuff 422dfe2926SJacob Faibussowitsch integer4 :: role ! is this process a BOY, a GIRL or a TEACHER? 432dfe2926SJacob Faibussowitsch integer4 :: i, j 442dfe2926SJacob Faibussowitsch integer4,parameter :: one=1 45f8402805SBarry Smith 462dfe2926SJacob Faibussowitsch! Initializations 47d8606c27SBarry Smith PetscCallA(PetscInitialize(ierr)) 48f8402805SBarry Smith PetscCallMPIA(MPI_Comm_size(PETSC_COMM_WORLD, size,ierr)) 49f8402805SBarry Smith PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD, rank,ierr)) 502dfe2926SJacob Faibussowitsch 512dfe2926SJacob Faibussowitsch if (rank==0) then 522dfe2926SJacob Faibussowitsch role = TEACHER 532dfe2926SJacob Faibussowitsch else if (rank<0.4*size) then 542dfe2926SJacob Faibussowitsch role = GIRL 552dfe2926SJacob Faibussowitsch else 562dfe2926SJacob Faibussowitsch role = BOY 572dfe2926SJacob Faibussowitsch end if 582dfe2926SJacob Faibussowitsch 592dfe2926SJacob Faibussowitsch allocate(message(msgLen,msglen)) 602dfe2926SJacob Faibussowitsch do i = 1,msgLen 612dfe2926SJacob Faibussowitsch do j = 1,msgLen 622dfe2926SJacob Faibussowitsch message(i,j) = 10.0*j + i*1.0/(rank+one) 632dfe2926SJacob Faibussowitsch end do 642dfe2926SJacob Faibussowitsch end do 652dfe2926SJacob Faibussowitsch! 662dfe2926SJacob Faibussowitsch! Create new user-defined events 672dfe2926SJacob Faibussowitsch classid = 0 68f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Morning', classid, Morning, ierr)) 69f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Afternoon', classid, Afternoon, ierr)) 70f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Play Ball', classid, PlayBall, ierr)) 71f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Skip Rope', classid, SkipRope, ierr)) 72f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Tidy Classroom', classid, TidyClass, ierr)) 73f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Lessons', classid, Lessons, ierr)) 74f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Correct Homework',classid,CorrectHomework,ierr)) 752dfe2926SJacob Faibussowitsch if (verbose>=1) then 762dfe2926SJacob Faibussowitsch print '(a,i0,a)','[',rank,'] SchoolDay events have been defined' 772dfe2926SJacob Faibussowitsch endif 782dfe2926SJacob Faibussowitsch 792dfe2926SJacob Faibussowitsch! Go through the school day 80f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Morning,ierr)) 812dfe2926SJacob Faibussowitsch 82f8402805SBarry Smith PetscCallA(PetscLogFlops(190000d0,ierr)) 83f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second,ierr)) 842dfe2926SJacob Faibussowitsch 85f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 86f8402805SBarry Smith PetscCallA(PetscLogFlops(23000d0,ierr)) 87f8402805SBarry Smith PetscCallA(PetscSleep(1*second, ierr)) 882dfe2926SJacob Faibussowitsch if (size>1) then 89d8606c27SBarry Smith PetscCallMPIA(MPI_Isend( message, msgLen, MPI_DOUBLE_PRECISION,mod(rank+1,size),tagMsg+rank, PETSC_COMM_WORLD, req, ierr)) 90d8606c27SBarry Smith PetscCallMPIA(MPI_Recv( message, msgLen, MPI_DOUBLE_PRECISION,mod(rank-1+size,size),tagMsg+mod(rank-1+size,size), PETSC_COMM_WORLD,status, ierr)) 91f8402805SBarry Smith PetscCallMPIA(MPI_Wait(req,MPI_STATUS_IGNORE,ierr)) 92cb9ef012SToby Isaac msgLen_c_int = msgLen 93cb9ef012SToby Isaac ierr = PetscASend(msgLen_c_int, MPI_DOUBLE_PRECISION) 94cb9ef012SToby Isaac ierr = PetscARecv(msgLen_c_int, MPI_DOUBLE_PRECISION) 952dfe2926SJacob Faibussowitsch end if 96f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 972dfe2926SJacob Faibussowitsch 982dfe2926SJacob Faibussowitsch if (role==TEACHER) then 99f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass,ierr)) 100f8402805SBarry Smith PetscCallA(PetscLogFlops(600000d0,ierr)) 101f8402805SBarry Smith PetscCallA(PetscSleep(0.6*second, ierr)) 102f8402805SBarry Smith PetscCallA(PetscLogEventBegin(CorrectHomework,ierr)) 103f8402805SBarry Smith PetscCallA(PetscLogFlops(234700d0,ierr)) 104f8402805SBarry Smith PetscCallA(PetscSleep(0.4*second, ierr)) 105f8402805SBarry Smith PetscCallA(PetscLogEventEnd(CorrectHomework,ierr)) 106f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass,ierr)) 1072dfe2926SJacob Faibussowitsch else if (role==BOY) then 108f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope,ierr)) 109f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 110f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope,ierr)) 1112dfe2926SJacob Faibussowitsch else 112f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall,ierr)) 113f8402805SBarry Smith PetscCallA(PetscSleep(0.9*second, ierr)) 114f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall,ierr)) 1152dfe2926SJacob Faibussowitsch end if 1162dfe2926SJacob Faibussowitsch 117f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 118f8402805SBarry Smith PetscCallA(PetscLogFlops(120000d0,ierr)) 119f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 120f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 1212dfe2926SJacob Faibussowitsch 122f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Morning,ierr)) 1232dfe2926SJacob Faibussowitsch 124f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Afternoon,ierr)) 1252dfe2926SJacob Faibussowitsch 1262dfe2926SJacob Faibussowitsch item = rank*(3-rank) 127f8402805SBarry Smith PetscCallMPIA(MPI_Allreduce(item, maxItem, 1, MPI_INTEGER, MPI_MAX,PETSC_COMM_WORLD, ierr)) 128cb9ef012SToby Isaac ierr = PetscAReduce() 1292dfe2926SJacob Faibussowitsch 1302dfe2926SJacob Faibussowitsch item = rank*(10-rank) 131f8402805SBarry Smith PetscCallMPIA(MPI_Allreduce(item, maxItem, 1, MPI_INTEGER, MPI_MAX,PETSC_COMM_WORLD, ierr)) 132cb9ef012SToby Isaac ierr = PetscAReduce() 1332dfe2926SJacob Faibussowitsch 134f8402805SBarry Smith PetscCallA(PetscLogFlops(58988d0,ierr)) 135f8402805SBarry Smith PetscCallA(PetscSleep(0.6*second,ierr)) 1362dfe2926SJacob Faibussowitsch 137f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 138f8402805SBarry Smith PetscCallA(PetscLogFlops(123456d0,ierr)) 139f8402805SBarry Smith PetscCallA(PetscSleep(1*second, ierr)) 140f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 1412dfe2926SJacob Faibussowitsch 1422dfe2926SJacob Faibussowitsch if (role==TEACHER) then 143f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass,ierr)) 144f8402805SBarry Smith PetscCallA(PetscLogFlops(17800d0,ierr)) 145f8402805SBarry Smith PetscCallA(PetscSleep(1.1*second, ierr)) 146f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 147f8402805SBarry Smith PetscCallA(PetscLogFlops(72344d0,ierr)) 148f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second, ierr)) 149f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 150f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass,ierr)) 1512dfe2926SJacob Faibussowitsch else if (role==GIRL) then 152f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope,ierr)) 153f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 154f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope,ierr)) 1552dfe2926SJacob Faibussowitsch else 156f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall,ierr)) 157f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 158f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall,ierr)) 1592dfe2926SJacob Faibussowitsch end if 1602dfe2926SJacob Faibussowitsch 161f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 162f8402805SBarry Smith PetscCallA(PetscLogFlops(72344d0,ierr)) 163f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second, ierr)) 164f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 1652dfe2926SJacob Faibussowitsch 166f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Afternoon,ierr)) 1672dfe2926SJacob Faibussowitsch 1682dfe2926SJacob Faibussowitsch if (.false.) then 1692dfe2926SJacob Faibussowitsch continue 1702dfe2926SJacob Faibussowitsch else if (role==TEACHER) then 171f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass,ierr)) 172f8402805SBarry Smith PetscCallA(PetscLogFlops(612300d0,ierr)) 173f8402805SBarry Smith PetscCallA(PetscSleep(1.1*second, ierr)) 174f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass,ierr)) 175f8402805SBarry Smith PetscCallA(PetscLogEventBegin(CorrectHomework,ierr)) 176f8402805SBarry Smith PetscCallA(PetscLogFlops(234700d0,ierr)) 177f8402805SBarry Smith PetscCallA(PetscSleep(1.1*second, ierr)) 178f8402805SBarry Smith PetscCallA(PetscLogEventEnd(CorrectHomework,ierr)) 1792dfe2926SJacob Faibussowitsch else 180f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope,ierr)) 181f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 182f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope,ierr)) 183f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall,ierr)) 184f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 185f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall,ierr)) 1862dfe2926SJacob Faibussowitsch end if 1872dfe2926SJacob Faibussowitsch 188f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 189f8402805SBarry Smith PetscCallA(PetscLogFlops(120000d0,ierr)) 190f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 191f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 1922dfe2926SJacob Faibussowitsch 193f8402805SBarry Smith PetscCallA(PetscSleep(0.25*second,ierr)) 1942dfe2926SJacob Faibussowitsch 195f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Morning,ierr)) 1962dfe2926SJacob Faibussowitsch 197f8402805SBarry Smith PetscCallA(PetscLogFlops(190000d0,ierr)) 198f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second,ierr)) 1992dfe2926SJacob Faibussowitsch 200f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 201f8402805SBarry Smith PetscCallA(PetscLogFlops(23000d0,ierr)) 202f8402805SBarry Smith PetscCallA(PetscSleep(1*second, ierr)) 2032dfe2926SJacob Faibussowitsch if (size>1) then 204d8606c27SBarry Smith PetscCallMPIA(MPI_Isend( message, msgLen, MPI_DOUBLE_PRECISION,mod(rank+1,size),tagMsg+rank, PETSC_COMM_WORLD, req, ierr)) 205d8606c27SBarry Smith PetscCallMPIA(MPI_Recv( message, msgLen, MPI_DOUBLE_PRECISION,mod(rank-1+size,size),tagMsg+mod(rank-1+size,size), PETSC_COMM_WORLD,status, ierr)) 206f8402805SBarry Smith PetscCallMPIA(MPI_Wait(req,MPI_STATUS_IGNORE,ierr)) 207cb9ef012SToby Isaac msgLen_c_int = msgLen 208cb9ef012SToby Isaac ierr = PetscASend(msgLen_c_int, MPI_DOUBLE_PRECISION) 209cb9ef012SToby Isaac ierr = PetscARecv(msgLen_c_int, MPI_DOUBLE_PRECISION) 2102dfe2926SJacob Faibussowitsch end if 211f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 2122dfe2926SJacob Faibussowitsch 2132dfe2926SJacob Faibussowitsch if (role==TEACHER) then 214f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass,ierr)) 215f8402805SBarry Smith PetscCallA(PetscLogFlops(600000d0,ierr)) 216f8402805SBarry Smith PetscCallA(PetscSleep(1.2*second, ierr)) 217f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass,ierr)) 2182dfe2926SJacob Faibussowitsch else if (role==BOY) then 219f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope,ierr)) 220f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 221f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope,ierr)) 2222dfe2926SJacob Faibussowitsch else 223f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall,ierr)) 224f8402805SBarry Smith PetscCallA(PetscSleep(0.9*second, ierr)) 225f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall,ierr)) 2262dfe2926SJacob Faibussowitsch end if 2272dfe2926SJacob Faibussowitsch 228f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 229f8402805SBarry Smith PetscCallA(PetscLogFlops(120000d0,ierr)) 230f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 231f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 2322dfe2926SJacob Faibussowitsch 233f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Morning,ierr)) 2342dfe2926SJacob Faibussowitsch 2352dfe2926SJacob Faibussowitsch deallocate(message) 2362dfe2926SJacob Faibussowitsch 237f8402805SBarry Smith PetscCallA(PetscFinalize(ierr)) 2382dfe2926SJacob Faibussowitsch end program SchoolDay 2392dfe2926SJacob Faibussowitsch 2402dfe2926SJacob Faibussowitsch!/*TEST 2412dfe2926SJacob Faibussowitsch! 2422dfe2926SJacob Faibussowitsch! testset: 2432dfe2926SJacob Faibussowitsch! suffix: no_log 2442dfe2926SJacob Faibussowitsch! requires: !defined(PETSC_USE_LOG) 2452dfe2926SJacob Faibussowitsch! test: 2462dfe2926SJacob Faibussowitsch! suffix: ascii 247758f5028SMatthew G. Knepley! args: -log_view ascii:filename.txt -log_all 2482dfe2926SJacob Faibussowitsch! test: 2492dfe2926SJacob Faibussowitsch! suffix: detail 2502dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt:ascii_info_detail 2512dfe2926SJacob Faibussowitsch! test: 2522dfe2926SJacob Faibussowitsch! suffix: xml 2532dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.xml:ascii_xml 2542dfe2926SJacob Faibussowitsch! 2552dfe2926SJacob Faibussowitsch! testset: 2562dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt 2572dfe2926SJacob Faibussowitsch! output_file: output/ex3f90.out 2582dfe2926SJacob Faibussowitsch! requires: defined(PETSC_USE_LOG) 2592dfe2926SJacob Faibussowitsch! test: 2602dfe2926SJacob Faibussowitsch! suffix: 1 2612dfe2926SJacob Faibussowitsch! nsize: 1 2622dfe2926SJacob Faibussowitsch! test: 2632dfe2926SJacob Faibussowitsch! suffix: 2 2642dfe2926SJacob Faibussowitsch! nsize: 2 2652dfe2926SJacob Faibussowitsch! test: 2662dfe2926SJacob Faibussowitsch! suffix: 3 2672dfe2926SJacob Faibussowitsch! nsize: 3 2682dfe2926SJacob Faibussowitsch! 2692dfe2926SJacob Faibussowitsch! testset: 2702dfe2926SJacob Faibussowitsch! suffix: detail 2712dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt:ascii_info_detail 2722dfe2926SJacob Faibussowitsch! output_file: output/ex3f90.out 2732dfe2926SJacob Faibussowitsch! requires: defined(PETSC_USE_LOG) 2742dfe2926SJacob Faibussowitsch! test: 2752dfe2926SJacob Faibussowitsch! suffix: 1 2762dfe2926SJacob Faibussowitsch! nsize: 1 2772dfe2926SJacob Faibussowitsch! test: 2782dfe2926SJacob Faibussowitsch! suffix: 2 2792dfe2926SJacob Faibussowitsch! nsize: 2 2802dfe2926SJacob Faibussowitsch! test: 2812dfe2926SJacob Faibussowitsch! suffix: 3 2822dfe2926SJacob Faibussowitsch! nsize: 3 2832dfe2926SJacob Faibussowitsch! 2842dfe2926SJacob Faibussowitsch! testset: 2852dfe2926SJacob Faibussowitsch! suffix: xml 2862dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.xml:ascii_xml 2872dfe2926SJacob Faibussowitsch! output_file: output/ex3f90.out 2882dfe2926SJacob Faibussowitsch! requires: defined(PETSC_USE_LOG) 2892dfe2926SJacob Faibussowitsch! test: 2902dfe2926SJacob Faibussowitsch! suffix: 1 2912dfe2926SJacob Faibussowitsch! nsize: 1 2922dfe2926SJacob Faibussowitsch! test: 2932dfe2926SJacob Faibussowitsch! suffix: 2 2942dfe2926SJacob Faibussowitsch! nsize: 2 2952dfe2926SJacob Faibussowitsch! test: 2962dfe2926SJacob Faibussowitsch! suffix: 3 2972dfe2926SJacob Faibussowitsch! nsize: 3 2982dfe2926SJacob Faibussowitsch! 2992dfe2926SJacob Faibussowitsch!TEST*/ 300