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 172dfe2926SJacob Faibussowitsch 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 212dfe2926SJacob Faibussowitsch 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 392dfe2926SJacob Faibussowitsch 402dfe2926SJacob Faibussowitsch ! Own stuff 412dfe2926SJacob Faibussowitsch integer4 :: role ! is this process a BOY, a GIRL or a TEACHER? 422dfe2926SJacob Faibussowitsch integer4 :: i, j 432dfe2926SJacob Faibussowitsch integer4,parameter :: one=1 44*f8402805SBarry Smith 452dfe2926SJacob Faibussowitsch! Initializations 46*f8402805SBarry Smith PetscCallA( PetscInitialize(PETSC_NULL_CHARACTER,ierr)) 47*f8402805SBarry Smith PetscCallMPIA(MPI_Comm_size(PETSC_COMM_WORLD, size,ierr)) 48*f8402805SBarry Smith PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD, rank,ierr)) 492dfe2926SJacob Faibussowitsch 502dfe2926SJacob Faibussowitsch if (rank==0) then 512dfe2926SJacob Faibussowitsch role = TEACHER 522dfe2926SJacob Faibussowitsch else if (rank<0.4*size) then 532dfe2926SJacob Faibussowitsch role = GIRL 542dfe2926SJacob Faibussowitsch else 552dfe2926SJacob Faibussowitsch role = BOY 562dfe2926SJacob Faibussowitsch end if 572dfe2926SJacob Faibussowitsch 582dfe2926SJacob Faibussowitsch allocate(message(msgLen,msglen)) 592dfe2926SJacob Faibussowitsch do i = 1,msgLen 602dfe2926SJacob Faibussowitsch do j = 1,msgLen 612dfe2926SJacob Faibussowitsch message(i,j) = 10.0*j + i*1.0/(rank+one) 622dfe2926SJacob Faibussowitsch end do 632dfe2926SJacob Faibussowitsch end do 642dfe2926SJacob Faibussowitsch! 652dfe2926SJacob Faibussowitsch! Create new user-defined events 662dfe2926SJacob Faibussowitsch classid = 0 67*f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Morning', classid, Morning, ierr)) 68*f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Afternoon', classid, Afternoon, ierr)) 69*f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Play Ball', classid, PlayBall, ierr)) 70*f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Skip Rope', classid, SkipRope, ierr)) 71*f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Tidy Classroom', classid, TidyClass, ierr)) 72*f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Lessons', classid, Lessons, ierr)) 73*f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Correct Homework',classid,CorrectHomework,ierr)) 742dfe2926SJacob Faibussowitsch if (verbose>=1) then 752dfe2926SJacob Faibussowitsch print '(a,i0,a)','[',rank,'] SchoolDay events have been defined' 762dfe2926SJacob Faibussowitsch endif 772dfe2926SJacob Faibussowitsch 782dfe2926SJacob Faibussowitsch! Go through the school day 79*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Morning,ierr)) 802dfe2926SJacob Faibussowitsch 81*f8402805SBarry Smith PetscCallA(PetscLogFlops(190000d0,ierr)) 82*f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second,ierr)) 832dfe2926SJacob Faibussowitsch 84*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 85*f8402805SBarry Smith PetscCallA(PetscLogFlops(23000d0,ierr)) 86*f8402805SBarry Smith PetscCallA(PetscSleep(1*second, ierr)) 872dfe2926SJacob Faibussowitsch if (size>1) then 882dfe2926SJacob Faibussowitsch call MPI_Isend( message, msgLen, MPI_DOUBLE_PRECISION, & 892dfe2926SJacob Faibussowitsch & mod(rank+1,size), & 902dfe2926SJacob Faibussowitsch & tagMsg+rank, PETSC_COMM_WORLD, req, ierr) 912dfe2926SJacob Faibussowitsch call MPI_Recv( message, msgLen, MPI_DOUBLE_PRECISION, & 922dfe2926SJacob Faibussowitsch & mod(rank-1+size,size), & 932dfe2926SJacob Faibussowitsch & tagMsg+mod(rank-1+size,size), PETSC_COMM_WORLD, & 942dfe2926SJacob Faibussowitsch & status, ierr) 95*f8402805SBarry Smith PetscCallMPIA(MPI_Wait(req,MPI_STATUS_IGNORE,ierr)) 962dfe2926SJacob Faibussowitsch end if 97*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 982dfe2926SJacob Faibussowitsch 992dfe2926SJacob Faibussowitsch if (role==TEACHER) then 100*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass,ierr)) 101*f8402805SBarry Smith PetscCallA(PetscLogFlops(600000d0,ierr)) 102*f8402805SBarry Smith PetscCallA(PetscSleep(0.6*second, ierr)) 103*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(CorrectHomework,ierr)) 104*f8402805SBarry Smith PetscCallA(PetscLogFlops(234700d0,ierr)) 105*f8402805SBarry Smith PetscCallA(PetscSleep(0.4*second, ierr)) 106*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(CorrectHomework,ierr)) 107*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass,ierr)) 1082dfe2926SJacob Faibussowitsch else if (role==BOY) then 109*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope,ierr)) 110*f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 111*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope,ierr)) 1122dfe2926SJacob Faibussowitsch else 113*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall,ierr)) 114*f8402805SBarry Smith PetscCallA(PetscSleep(0.9*second, ierr)) 115*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall,ierr)) 1162dfe2926SJacob Faibussowitsch end if 1172dfe2926SJacob Faibussowitsch 118*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 119*f8402805SBarry Smith PetscCallA(PetscLogFlops(120000d0,ierr)) 120*f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 121*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 1222dfe2926SJacob Faibussowitsch 123*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Morning,ierr)) 1242dfe2926SJacob Faibussowitsch 125*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Afternoon,ierr)) 1262dfe2926SJacob Faibussowitsch 1272dfe2926SJacob Faibussowitsch item = rank*(3-rank) 128*f8402805SBarry Smith PetscCallMPIA(MPI_Allreduce(item, maxItem, 1, MPI_INTEGER, MPI_MAX,PETSC_COMM_WORLD, ierr)) 1292dfe2926SJacob Faibussowitsch 1302dfe2926SJacob Faibussowitsch item = rank*(10-rank) 131*f8402805SBarry Smith PetscCallMPIA(MPI_Allreduce(item, maxItem, 1, MPI_INTEGER, MPI_MAX,PETSC_COMM_WORLD, ierr)) 1322dfe2926SJacob Faibussowitsch 133*f8402805SBarry Smith PetscCallA(PetscLogFlops(58988d0,ierr)) 134*f8402805SBarry Smith PetscCallA(PetscSleep(0.6*second,ierr)) 1352dfe2926SJacob Faibussowitsch 136*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 137*f8402805SBarry Smith PetscCallA(PetscLogFlops(123456d0,ierr)) 138*f8402805SBarry Smith PetscCallA(PetscSleep(1*second, ierr)) 139*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 1402dfe2926SJacob Faibussowitsch 1412dfe2926SJacob Faibussowitsch if (role==TEACHER) then 142*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass,ierr)) 143*f8402805SBarry Smith PetscCallA(PetscLogFlops(17800d0,ierr)) 144*f8402805SBarry Smith PetscCallA(PetscSleep(1.1*second, ierr)) 145*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 146*f8402805SBarry Smith PetscCallA(PetscLogFlops(72344d0,ierr)) 147*f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second, ierr)) 148*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 149*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass,ierr)) 1502dfe2926SJacob Faibussowitsch else if (role==GIRL) then 151*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope,ierr)) 152*f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 153*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope,ierr)) 1542dfe2926SJacob Faibussowitsch else 155*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall,ierr)) 156*f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 157*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall,ierr)) 1582dfe2926SJacob Faibussowitsch end if 1592dfe2926SJacob Faibussowitsch 160*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 161*f8402805SBarry Smith PetscCallA(PetscLogFlops(72344d0,ierr)) 162*f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second, ierr)) 163*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 1642dfe2926SJacob Faibussowitsch 165*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Afternoon,ierr)) 1662dfe2926SJacob Faibussowitsch 1672dfe2926SJacob Faibussowitsch if (.false.) then 1682dfe2926SJacob Faibussowitsch continue 1692dfe2926SJacob Faibussowitsch else if (role==TEACHER) then 170*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass,ierr)) 171*f8402805SBarry Smith PetscCallA(PetscLogFlops(612300d0,ierr)) 172*f8402805SBarry Smith PetscCallA(PetscSleep(1.1*second, ierr)) 173*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass,ierr)) 174*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(CorrectHomework,ierr)) 175*f8402805SBarry Smith PetscCallA(PetscLogFlops(234700d0,ierr)) 176*f8402805SBarry Smith PetscCallA(PetscSleep(1.1*second, ierr)) 177*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(CorrectHomework,ierr)) 1782dfe2926SJacob Faibussowitsch else 179*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope,ierr)) 180*f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 181*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope,ierr)) 182*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall,ierr)) 183*f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 184*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall,ierr)) 1852dfe2926SJacob Faibussowitsch end if 1862dfe2926SJacob Faibussowitsch 187*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 188*f8402805SBarry Smith PetscCallA(PetscLogFlops(120000d0,ierr)) 189*f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 190*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 1912dfe2926SJacob Faibussowitsch 192*f8402805SBarry Smith PetscCallA(PetscSleep(0.25*second,ierr)) 1932dfe2926SJacob Faibussowitsch 194*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Morning,ierr)) 1952dfe2926SJacob Faibussowitsch 196*f8402805SBarry Smith PetscCallA(PetscLogFlops(190000d0,ierr)) 197*f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second,ierr)) 1982dfe2926SJacob Faibussowitsch 199*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 200*f8402805SBarry Smith PetscCallA(PetscLogFlops(23000d0,ierr)) 201*f8402805SBarry Smith PetscCallA(PetscSleep(1*second, ierr)) 2022dfe2926SJacob Faibussowitsch if (size>1) then 2032dfe2926SJacob Faibussowitsch call MPI_Isend( message, msgLen, MPI_DOUBLE_PRECISION, & 2042dfe2926SJacob Faibussowitsch & mod(rank+1,size), & 2052dfe2926SJacob Faibussowitsch & tagMsg+rank, PETSC_COMM_WORLD, req, ierr) 2062dfe2926SJacob Faibussowitsch call MPI_Recv( message, msgLen, MPI_DOUBLE_PRECISION, & 2072dfe2926SJacob Faibussowitsch & mod(rank-1+size,size), & 2082dfe2926SJacob Faibussowitsch & tagMsg+mod(rank-1+size,size), PETSC_COMM_WORLD, & 2092dfe2926SJacob Faibussowitsch & status, ierr) 210*f8402805SBarry Smith PetscCallMPIA(MPI_Wait(req,MPI_STATUS_IGNORE,ierr)) 2112dfe2926SJacob Faibussowitsch end if 212*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 2132dfe2926SJacob Faibussowitsch 2142dfe2926SJacob Faibussowitsch if (role==TEACHER) then 215*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass,ierr)) 216*f8402805SBarry Smith PetscCallA(PetscLogFlops(600000d0,ierr)) 217*f8402805SBarry Smith PetscCallA(PetscSleep(1.2*second, ierr)) 218*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass,ierr)) 2192dfe2926SJacob Faibussowitsch else if (role==BOY) then 220*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope,ierr)) 221*f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 222*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope,ierr)) 2232dfe2926SJacob Faibussowitsch else 224*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall,ierr)) 225*f8402805SBarry Smith PetscCallA(PetscSleep(0.9*second, ierr)) 226*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall,ierr)) 2272dfe2926SJacob Faibussowitsch end if 2282dfe2926SJacob Faibussowitsch 229*f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 230*f8402805SBarry Smith PetscCallA(PetscLogFlops(120000d0,ierr)) 231*f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 232*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 2332dfe2926SJacob Faibussowitsch 234*f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Morning,ierr)) 2352dfe2926SJacob Faibussowitsch 2362dfe2926SJacob Faibussowitsch deallocate(message) 2372dfe2926SJacob Faibussowitsch 238*f8402805SBarry Smith PetscCallA(PetscFinalize(ierr)) 2392dfe2926SJacob Faibussowitsch end program SchoolDay 2402dfe2926SJacob Faibussowitsch 2412dfe2926SJacob Faibussowitsch!/*TEST 2422dfe2926SJacob Faibussowitsch! 2432dfe2926SJacob Faibussowitsch! testset: 2442dfe2926SJacob Faibussowitsch! suffix: no_log 2452dfe2926SJacob Faibussowitsch! requires: !defined(PETSC_USE_LOG) 2462dfe2926SJacob Faibussowitsch! test: 2472dfe2926SJacob Faibussowitsch! suffix: ascii 2482dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt 2492dfe2926SJacob Faibussowitsch! test: 2502dfe2926SJacob Faibussowitsch! suffix: detail 2512dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt:ascii_info_detail 2522dfe2926SJacob Faibussowitsch! test: 2532dfe2926SJacob Faibussowitsch! suffix: xml 2542dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.xml:ascii_xml 2552dfe2926SJacob Faibussowitsch! 2562dfe2926SJacob Faibussowitsch! testset: 2572dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt 2582dfe2926SJacob Faibussowitsch! output_file: output/ex3f90.out 2592dfe2926SJacob Faibussowitsch! requires: defined(PETSC_USE_LOG) 2602dfe2926SJacob Faibussowitsch! test: 2612dfe2926SJacob Faibussowitsch! suffix: 1 2622dfe2926SJacob Faibussowitsch! nsize: 1 2632dfe2926SJacob Faibussowitsch! test: 2642dfe2926SJacob Faibussowitsch! suffix: 2 2652dfe2926SJacob Faibussowitsch! nsize: 2 2662dfe2926SJacob Faibussowitsch! test: 2672dfe2926SJacob Faibussowitsch! suffix: 3 2682dfe2926SJacob Faibussowitsch! nsize: 3 2692dfe2926SJacob Faibussowitsch! 2702dfe2926SJacob Faibussowitsch! testset: 2712dfe2926SJacob Faibussowitsch! suffix: detail 2722dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt:ascii_info_detail 2732dfe2926SJacob Faibussowitsch! output_file: output/ex3f90.out 2742dfe2926SJacob Faibussowitsch! requires: defined(PETSC_USE_LOG) 2752dfe2926SJacob Faibussowitsch! test: 2762dfe2926SJacob Faibussowitsch! suffix: 1 2772dfe2926SJacob Faibussowitsch! nsize: 1 2782dfe2926SJacob Faibussowitsch! test: 2792dfe2926SJacob Faibussowitsch! suffix: 2 2802dfe2926SJacob Faibussowitsch! nsize: 2 2812dfe2926SJacob Faibussowitsch! test: 2822dfe2926SJacob Faibussowitsch! suffix: 3 2832dfe2926SJacob Faibussowitsch! nsize: 3 2842dfe2926SJacob Faibussowitsch! 2852dfe2926SJacob Faibussowitsch! testset: 2862dfe2926SJacob Faibussowitsch! suffix: xml 2872dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.xml:ascii_xml 2882dfe2926SJacob Faibussowitsch! output_file: output/ex3f90.out 2892dfe2926SJacob Faibussowitsch! requires: defined(PETSC_USE_LOG) 2902dfe2926SJacob Faibussowitsch! test: 2912dfe2926SJacob Faibussowitsch! suffix: 1 2922dfe2926SJacob Faibussowitsch! nsize: 1 2932dfe2926SJacob Faibussowitsch! test: 2942dfe2926SJacob Faibussowitsch! suffix: 2 2952dfe2926SJacob Faibussowitsch! nsize: 2 2962dfe2926SJacob Faibussowitsch! test: 2972dfe2926SJacob Faibussowitsch! suffix: 3 2982dfe2926SJacob Faibussowitsch! nsize: 3 2992dfe2926SJacob Faibussowitsch! 3002dfe2926SJacob Faibussowitsch!TEST*/ 301