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#include <petsc/finclude/petscsys.h> 72dfe2926SJacob Faibussowitsch#include <petsc/finclude/petsclog.h> 8c5e229c2SMartin Diehlprogram SchoolDay 92dfe2926SJacob Faibussowitsch use petscsys 102dfe2926SJacob Faibussowitsch implicit none 112dfe2926SJacob Faibussowitsch 122dfe2926SJacob Faibussowitsch ! Settings: 132dfe2926SJacob Faibussowitsch integer, parameter :: verbose = 0 ! 0: silent, >=1 : increasing amount of debugging output 14*b06eb4cdSBarry Smith integer4, parameter :: msgLen = 30 ! number of reals which is sent with MPI_Isend 15ccfd86f1SBarry Smith PetscReal, parameter :: second = 0.1 ! time is sped up by a factor 10 162dfe2926SJacob Faibussowitsch 172dfe2926SJacob Faibussowitsch ! Codes 182dfe2926SJacob Faibussowitsch integer, parameter :: BOY = 1, GIRL = 2, TEACHER = 0 19ccfd86f1SBarry Smith PetscMPIInt, parameter :: tagMsg = 1200 202dfe2926SJacob Faibussowitsch 212dfe2926SJacob Faibussowitsch ! Timers 222dfe2926SJacob Faibussowitsch PetscLogEvent :: Morning, Afternoon 232dfe2926SJacob Faibussowitsch PetscLogEvent :: PlayBall, SkipRope 242dfe2926SJacob Faibussowitsch PetscLogEvent :: TidyClass 252dfe2926SJacob Faibussowitsch PetscLogEvent :: Lessons, CorrectHomework 262dfe2926SJacob Faibussowitsch PetscClassId classid 272dfe2926SJacob Faibussowitsch 282dfe2926SJacob Faibussowitsch ! Petsc-stuff 292dfe2926SJacob Faibussowitsch PetscErrorCode :: ierr 302dfe2926SJacob Faibussowitsch 312dfe2926SJacob Faibussowitsch ! MPI-stuff 322dfe2926SJacob Faibussowitsch PetscMPIInt :: rank, size 332dfe2926SJacob Faibussowitsch PetscReal, allocatable :: message(:, :) 34*b06eb4cdSBarry Smith integer :: item 35*b06eb4cdSBarry Smith PetscMPIInt :: maxItem 36*b06eb4cdSBarry Smith#if defined(PETSC_USE_MPI_F08) 37*b06eb4cdSBarry Smith MPIU_Status :: status 38*b06eb4cdSBarry Smith#else 39*b06eb4cdSBarry Smith MPIU_Status :: status(MPI_STATUS_SIZE) 40*b06eb4cdSBarry Smith#endif 41*b06eb4cdSBarry Smith MPIU_Request req 422dfe2926SJacob Faibussowitsch 432dfe2926SJacob Faibussowitsch ! Own stuff 442dfe2926SJacob Faibussowitsch integer4 :: role ! is this process a BOY, a GIRL or a TEACHER? 452dfe2926SJacob Faibussowitsch integer4 :: i, j 46f8402805SBarry Smith 472dfe2926SJacob Faibussowitsch! Initializations 48d8606c27SBarry Smith PetscCallA(PetscInitialize(ierr)) 49f8402805SBarry Smith PetscCallMPIA(MPI_Comm_size(PETSC_COMM_WORLD, size, ierr)) 50f8402805SBarry Smith PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD, rank, ierr)) 512dfe2926SJacob Faibussowitsch 522dfe2926SJacob Faibussowitsch if (rank == 0) then 532dfe2926SJacob Faibussowitsch role = TEACHER 54*b06eb4cdSBarry Smith else if (rank < 0.4_PETSC_REAL_KIND*size) then 552dfe2926SJacob Faibussowitsch role = GIRL 562dfe2926SJacob Faibussowitsch else 572dfe2926SJacob Faibussowitsch role = BOY 582dfe2926SJacob Faibussowitsch end if 592dfe2926SJacob Faibussowitsch 602dfe2926SJacob Faibussowitsch allocate (message(msgLen, msglen)) 612dfe2926SJacob Faibussowitsch do i = 1, msgLen 622dfe2926SJacob Faibussowitsch do j = 1, msgLen 63*b06eb4cdSBarry Smith message(i, j) = 10.0_PETSC_REAL_KIND*j + i*1.0_PETSC_REAL_KIND/(rank + 1_PETSC_MPIINT_KIND) 642dfe2926SJacob Faibussowitsch end do 652dfe2926SJacob Faibussowitsch end do 662dfe2926SJacob Faibussowitsch! 672dfe2926SJacob Faibussowitsch! Create new user-defined events 682dfe2926SJacob Faibussowitsch classid = 0 69f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Morning', classid, Morning, ierr)) 70f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Afternoon', classid, Afternoon, ierr)) 71f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Play Ball', classid, PlayBall, ierr)) 72f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Skip Rope', classid, SkipRope, ierr)) 73f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Tidy Classroom', classid, TidyClass, ierr)) 74f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Lessons', classid, Lessons, ierr)) 75f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Correct Homework', classid, CorrectHomework, ierr)) 762dfe2926SJacob Faibussowitsch if (verbose >= 1) then 772dfe2926SJacob Faibussowitsch print '(a,i0,a)', '[', rank, '] SchoolDay events have been defined' 782dfe2926SJacob Faibussowitsch end if 792dfe2926SJacob Faibussowitsch 802dfe2926SJacob Faibussowitsch! Go through the school day 81f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Morning, ierr)) 822dfe2926SJacob Faibussowitsch 83f8402805SBarry Smith PetscCallA(PetscLogFlops(190000d0, ierr)) 84f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second, ierr)) 852dfe2926SJacob Faibussowitsch 86f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons, ierr)) 87f8402805SBarry Smith PetscCallA(PetscLogFlops(23000d0, ierr)) 88f8402805SBarry Smith PetscCallA(PetscSleep(1*second, ierr)) 892dfe2926SJacob Faibussowitsch if (size > 1) then 90*b06eb4cdSBarry Smith PetscCallMPIA(MPI_Isend(message, msgLen, MPIU_REAL, mod(rank + 1_PETSC_MPIINT_KIND, size), tagMsg + rank, PETSC_COMM_WORLD, req, ierr)) 91*b06eb4cdSBarry Smith PetscCallMPIA(MPI_Recv(message, msgLen, MPIU_REAL, mod(rank - 1_PETSC_MPIINT_KIND + size, size), tagMsg + mod(rank - 1_PETSC_MPIINT_KIND + size, size), PETSC_COMM_WORLD, status, ierr)) 92f8402805SBarry Smith PetscCallMPIA(MPI_Wait(req, MPI_STATUS_IGNORE, ierr)) 932dfe2926SJacob Faibussowitsch end if 94f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons, ierr)) 952dfe2926SJacob Faibussowitsch 962dfe2926SJacob Faibussowitsch if (role == TEACHER) then 97f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass, ierr)) 98f8402805SBarry Smith PetscCallA(PetscLogFlops(600000d0, ierr)) 99f8402805SBarry Smith PetscCallA(PetscSleep(0.6*second, ierr)) 100f8402805SBarry Smith PetscCallA(PetscLogEventBegin(CorrectHomework, ierr)) 101f8402805SBarry Smith PetscCallA(PetscLogFlops(234700d0, ierr)) 102f8402805SBarry Smith PetscCallA(PetscSleep(0.4*second, ierr)) 103f8402805SBarry Smith PetscCallA(PetscLogEventEnd(CorrectHomework, ierr)) 104f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass, ierr)) 1052dfe2926SJacob Faibussowitsch else if (role == BOY) then 106f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope, ierr)) 107f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 108f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope, ierr)) 1092dfe2926SJacob Faibussowitsch else 110f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall, ierr)) 111f8402805SBarry Smith PetscCallA(PetscSleep(0.9*second, ierr)) 112f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall, ierr)) 1132dfe2926SJacob Faibussowitsch end if 1142dfe2926SJacob Faibussowitsch 115f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons, ierr)) 116f8402805SBarry Smith PetscCallA(PetscLogFlops(120000d0, ierr)) 117f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 118f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons, ierr)) 1192dfe2926SJacob Faibussowitsch 120f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Morning, ierr)) 1212dfe2926SJacob Faibussowitsch 122f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Afternoon, ierr)) 1232dfe2926SJacob Faibussowitsch 1242dfe2926SJacob Faibussowitsch item = rank*(3 - rank) 125*b06eb4cdSBarry Smith PetscCallMPIA(MPI_Allreduce(item, maxItem, 1_PETSC_MPIINT_KIND, MPI_INTEGER, MPI_MAX, PETSC_COMM_WORLD, ierr)) 1262dfe2926SJacob Faibussowitsch 1272dfe2926SJacob Faibussowitsch item = rank*(10 - rank) 128*b06eb4cdSBarry Smith PetscCallMPIA(MPI_Allreduce(item, maxItem, 1_PETSC_MPIINT_KIND, MPI_INTEGER, MPI_MAX, PETSC_COMM_WORLD, ierr)) 1292dfe2926SJacob Faibussowitsch 130f8402805SBarry Smith PetscCallA(PetscLogFlops(58988d0, ierr)) 131f8402805SBarry Smith PetscCallA(PetscSleep(0.6*second, ierr)) 1322dfe2926SJacob Faibussowitsch 133f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons, ierr)) 134f8402805SBarry Smith PetscCallA(PetscLogFlops(123456d0, ierr)) 135f8402805SBarry Smith PetscCallA(PetscSleep(1*second, ierr)) 136f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons, ierr)) 1372dfe2926SJacob Faibussowitsch 1382dfe2926SJacob Faibussowitsch if (role == TEACHER) then 139f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass, ierr)) 140f8402805SBarry Smith PetscCallA(PetscLogFlops(17800d0, ierr)) 141f8402805SBarry Smith PetscCallA(PetscSleep(1.1*second, ierr)) 142f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons, ierr)) 143f8402805SBarry Smith PetscCallA(PetscLogFlops(72344d0, ierr)) 144f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second, ierr)) 145f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons, ierr)) 146f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass, ierr)) 1472dfe2926SJacob Faibussowitsch else if (role == GIRL) then 148f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope, ierr)) 149f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 150f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope, ierr)) 1512dfe2926SJacob Faibussowitsch else 152f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall, ierr)) 153f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 154f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall, ierr)) 1552dfe2926SJacob Faibussowitsch end if 1562dfe2926SJacob Faibussowitsch 157f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons, ierr)) 158f8402805SBarry Smith PetscCallA(PetscLogFlops(72344d0, ierr)) 159f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second, ierr)) 160f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons, ierr)) 1612dfe2926SJacob Faibussowitsch 162f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Afternoon, ierr)) 1632dfe2926SJacob Faibussowitsch 1642dfe2926SJacob Faibussowitsch if (.false.) then 1652dfe2926SJacob Faibussowitsch continue 1662dfe2926SJacob Faibussowitsch else if (role == TEACHER) then 167f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass, ierr)) 168f8402805SBarry Smith PetscCallA(PetscLogFlops(612300d0, ierr)) 169f8402805SBarry Smith PetscCallA(PetscSleep(1.1*second, ierr)) 170f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass, ierr)) 171f8402805SBarry Smith PetscCallA(PetscLogEventBegin(CorrectHomework, ierr)) 172f8402805SBarry Smith PetscCallA(PetscLogFlops(234700d0, ierr)) 173f8402805SBarry Smith PetscCallA(PetscSleep(1.1*second, ierr)) 174f8402805SBarry Smith PetscCallA(PetscLogEventEnd(CorrectHomework, ierr)) 1752dfe2926SJacob Faibussowitsch else 176f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope, ierr)) 177f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 178f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope, ierr)) 179f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall, ierr)) 180f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 181f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall, ierr)) 1822dfe2926SJacob Faibussowitsch end if 1832dfe2926SJacob Faibussowitsch 184f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons, ierr)) 185f8402805SBarry Smith PetscCallA(PetscLogFlops(120000d0, ierr)) 186f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 187f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons, ierr)) 1882dfe2926SJacob Faibussowitsch 189f8402805SBarry Smith PetscCallA(PetscSleep(0.25*second, ierr)) 1902dfe2926SJacob Faibussowitsch 191f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Morning, ierr)) 1922dfe2926SJacob Faibussowitsch 193f8402805SBarry Smith PetscCallA(PetscLogFlops(190000d0, ierr)) 194f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second, ierr)) 1952dfe2926SJacob Faibussowitsch 196f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons, ierr)) 197f8402805SBarry Smith PetscCallA(PetscLogFlops(23000d0, ierr)) 198f8402805SBarry Smith PetscCallA(PetscSleep(1*second, ierr)) 1992dfe2926SJacob Faibussowitsch if (size > 1) then 200*b06eb4cdSBarry Smith PetscCallMPIA(MPI_Isend(message, msgLen, MPIU_REAL, mod(rank + 1_PETSC_MPIINT_KIND, size), tagMsg + rank, PETSC_COMM_WORLD, req, ierr)) 201*b06eb4cdSBarry Smith PetscCallMPIA(MPI_Recv(message, msgLen, MPIU_REAL, mod(rank - 1_PETSC_MPIINT_KIND + size, size), tagMsg + mod(rank - 1_PETSC_MPIINT_KIND + size, size), PETSC_COMM_WORLD, status, ierr)) 202f8402805SBarry Smith PetscCallMPIA(MPI_Wait(req, MPI_STATUS_IGNORE, ierr)) 2032dfe2926SJacob Faibussowitsch end if 204f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons, ierr)) 2052dfe2926SJacob Faibussowitsch 2062dfe2926SJacob Faibussowitsch if (role == TEACHER) then 207f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass, ierr)) 208f8402805SBarry Smith PetscCallA(PetscLogFlops(600000d0, ierr)) 209f8402805SBarry Smith PetscCallA(PetscSleep(1.2*second, ierr)) 210f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass, ierr)) 2112dfe2926SJacob Faibussowitsch else if (role == BOY) then 212f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope, ierr)) 213f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 214f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope, ierr)) 2152dfe2926SJacob Faibussowitsch else 216f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall, ierr)) 217f8402805SBarry Smith PetscCallA(PetscSleep(0.9*second, ierr)) 218f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall, ierr)) 2192dfe2926SJacob Faibussowitsch end if 2202dfe2926SJacob Faibussowitsch 221f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons, ierr)) 222f8402805SBarry Smith PetscCallA(PetscLogFlops(120000d0, ierr)) 223f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 224f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons, ierr)) 2252dfe2926SJacob Faibussowitsch 226f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Morning, ierr)) 2272dfe2926SJacob Faibussowitsch 2282dfe2926SJacob Faibussowitsch deallocate (message) 2292dfe2926SJacob Faibussowitsch 230f8402805SBarry Smith PetscCallA(PetscFinalize(ierr)) 2312dfe2926SJacob Faibussowitschend program SchoolDay 2322dfe2926SJacob Faibussowitsch 2332dfe2926SJacob Faibussowitsch!/*TEST 2342dfe2926SJacob Faibussowitsch! 2352dfe2926SJacob Faibussowitsch! testset: 2362dfe2926SJacob Faibussowitsch! suffix: no_log 2372dfe2926SJacob Faibussowitsch! requires: !defined(PETSC_USE_LOG) 2382dfe2926SJacob Faibussowitsch! test: 2392dfe2926SJacob Faibussowitsch! suffix: ascii 240758f5028SMatthew G. Knepley! args: -log_view ascii:filename.txt -log_all 2412dfe2926SJacob Faibussowitsch! test: 2422dfe2926SJacob Faibussowitsch! suffix: detail 2432dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt:ascii_info_detail 2442dfe2926SJacob Faibussowitsch! test: 2452dfe2926SJacob Faibussowitsch! suffix: xml 2462dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.xml:ascii_xml 2472dfe2926SJacob Faibussowitsch! 2482dfe2926SJacob Faibussowitsch! testset: 2492dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt 2503886731fSPierre Jolivet! output_file: output/empty.out 2512dfe2926SJacob Faibussowitsch! requires: defined(PETSC_USE_LOG) 2522dfe2926SJacob Faibussowitsch! test: 2532dfe2926SJacob Faibussowitsch! suffix: 1 2542dfe2926SJacob Faibussowitsch! nsize: 1 2552dfe2926SJacob Faibussowitsch! test: 2562dfe2926SJacob Faibussowitsch! suffix: 2 2572dfe2926SJacob Faibussowitsch! nsize: 2 2582dfe2926SJacob Faibussowitsch! test: 2592dfe2926SJacob Faibussowitsch! suffix: 3 2602dfe2926SJacob Faibussowitsch! nsize: 3 2612dfe2926SJacob Faibussowitsch! 2622dfe2926SJacob Faibussowitsch! testset: 2632dfe2926SJacob Faibussowitsch! suffix: detail 2642dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt:ascii_info_detail 2653886731fSPierre Jolivet! output_file: output/empty.out 2662dfe2926SJacob Faibussowitsch! requires: defined(PETSC_USE_LOG) 2672dfe2926SJacob Faibussowitsch! test: 2682dfe2926SJacob Faibussowitsch! suffix: 1 2692dfe2926SJacob Faibussowitsch! nsize: 1 2702dfe2926SJacob Faibussowitsch! test: 2712dfe2926SJacob Faibussowitsch! suffix: 2 2722dfe2926SJacob Faibussowitsch! nsize: 2 2732dfe2926SJacob Faibussowitsch! test: 2742dfe2926SJacob Faibussowitsch! suffix: 3 2752dfe2926SJacob Faibussowitsch! nsize: 3 2762dfe2926SJacob Faibussowitsch! 2772dfe2926SJacob Faibussowitsch! testset: 2782dfe2926SJacob Faibussowitsch! suffix: xml 2792dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.xml:ascii_xml 2803886731fSPierre Jolivet! output_file: output/empty.out 2812dfe2926SJacob Faibussowitsch! requires: defined(PETSC_USE_LOG) 2822dfe2926SJacob Faibussowitsch! test: 2832dfe2926SJacob Faibussowitsch! suffix: 1 2842dfe2926SJacob Faibussowitsch! nsize: 1 2852dfe2926SJacob Faibussowitsch! test: 2862dfe2926SJacob Faibussowitsch! suffix: 2 2872dfe2926SJacob Faibussowitsch! nsize: 2 2882dfe2926SJacob Faibussowitsch! test: 2892dfe2926SJacob Faibussowitsch! suffix: 3 2902dfe2926SJacob Faibussowitsch! nsize: 3 2912dfe2926SJacob Faibussowitsch! 2922dfe2926SJacob Faibussowitsch!TEST*/ 293