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 44f8402805SBarry Smith 452dfe2926SJacob Faibussowitsch! Initializations 46*d8606c27SBarry Smith PetscCallA( PetscInitialize(ierr)) 47f8402805SBarry Smith PetscCallMPIA(MPI_Comm_size(PETSC_COMM_WORLD, size,ierr)) 48f8402805SBarry 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 67f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Morning', classid, Morning, ierr)) 68f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Afternoon', classid, Afternoon, ierr)) 69f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Play Ball', classid, PlayBall, ierr)) 70f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Skip Rope', classid, SkipRope, ierr)) 71f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Tidy Classroom', classid, TidyClass, ierr)) 72f8402805SBarry Smith PetscCallA(PetscLogEventRegister('Lessons', classid, Lessons, ierr)) 73f8402805SBarry 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 79f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Morning,ierr)) 802dfe2926SJacob Faibussowitsch 81f8402805SBarry Smith PetscCallA(PetscLogFlops(190000d0,ierr)) 82f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second,ierr)) 832dfe2926SJacob Faibussowitsch 84f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 85f8402805SBarry Smith PetscCallA(PetscLogFlops(23000d0,ierr)) 86f8402805SBarry Smith PetscCallA(PetscSleep(1*second, ierr)) 872dfe2926SJacob Faibussowitsch if (size>1) then 88*d8606c27SBarry Smith PetscCallMPIA(MPI_Isend( message, msgLen, MPI_DOUBLE_PRECISION,mod(rank+1,size),tagMsg+rank, PETSC_COMM_WORLD, req, ierr)) 89*d8606c27SBarry 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)) 90f8402805SBarry Smith PetscCallMPIA(MPI_Wait(req,MPI_STATUS_IGNORE,ierr)) 912dfe2926SJacob Faibussowitsch end if 92f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 932dfe2926SJacob Faibussowitsch 942dfe2926SJacob Faibussowitsch if (role==TEACHER) then 95f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass,ierr)) 96f8402805SBarry Smith PetscCallA(PetscLogFlops(600000d0,ierr)) 97f8402805SBarry Smith PetscCallA(PetscSleep(0.6*second, ierr)) 98f8402805SBarry Smith PetscCallA(PetscLogEventBegin(CorrectHomework,ierr)) 99f8402805SBarry Smith PetscCallA(PetscLogFlops(234700d0,ierr)) 100f8402805SBarry Smith PetscCallA(PetscSleep(0.4*second, ierr)) 101f8402805SBarry Smith PetscCallA(PetscLogEventEnd(CorrectHomework,ierr)) 102f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass,ierr)) 1032dfe2926SJacob Faibussowitsch else if (role==BOY) then 104f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope,ierr)) 105f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 106f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope,ierr)) 1072dfe2926SJacob Faibussowitsch else 108f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall,ierr)) 109f8402805SBarry Smith PetscCallA(PetscSleep(0.9*second, ierr)) 110f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall,ierr)) 1112dfe2926SJacob Faibussowitsch end if 1122dfe2926SJacob Faibussowitsch 113f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 114f8402805SBarry Smith PetscCallA(PetscLogFlops(120000d0,ierr)) 115f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 116f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 1172dfe2926SJacob Faibussowitsch 118f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Morning,ierr)) 1192dfe2926SJacob Faibussowitsch 120f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Afternoon,ierr)) 1212dfe2926SJacob Faibussowitsch 1222dfe2926SJacob Faibussowitsch item = rank*(3-rank) 123f8402805SBarry Smith PetscCallMPIA(MPI_Allreduce(item, maxItem, 1, MPI_INTEGER, MPI_MAX,PETSC_COMM_WORLD, ierr)) 1242dfe2926SJacob Faibussowitsch 1252dfe2926SJacob Faibussowitsch item = rank*(10-rank) 126f8402805SBarry Smith PetscCallMPIA(MPI_Allreduce(item, maxItem, 1, MPI_INTEGER, MPI_MAX,PETSC_COMM_WORLD, ierr)) 1272dfe2926SJacob Faibussowitsch 128f8402805SBarry Smith PetscCallA(PetscLogFlops(58988d0,ierr)) 129f8402805SBarry Smith PetscCallA(PetscSleep(0.6*second,ierr)) 1302dfe2926SJacob Faibussowitsch 131f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 132f8402805SBarry Smith PetscCallA(PetscLogFlops(123456d0,ierr)) 133f8402805SBarry Smith PetscCallA(PetscSleep(1*second, ierr)) 134f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 1352dfe2926SJacob Faibussowitsch 1362dfe2926SJacob Faibussowitsch if (role==TEACHER) then 137f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass,ierr)) 138f8402805SBarry Smith PetscCallA(PetscLogFlops(17800d0,ierr)) 139f8402805SBarry Smith PetscCallA(PetscSleep(1.1*second, ierr)) 140f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 141f8402805SBarry Smith PetscCallA(PetscLogFlops(72344d0,ierr)) 142f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second, ierr)) 143f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 144f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass,ierr)) 1452dfe2926SJacob Faibussowitsch else if (role==GIRL) then 146f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope,ierr)) 147f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 148f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope,ierr)) 1492dfe2926SJacob Faibussowitsch else 150f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall,ierr)) 151f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 152f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall,ierr)) 1532dfe2926SJacob Faibussowitsch end if 1542dfe2926SJacob Faibussowitsch 155f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 156f8402805SBarry Smith PetscCallA(PetscLogFlops(72344d0,ierr)) 157f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second, ierr)) 158f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 1592dfe2926SJacob Faibussowitsch 160f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Afternoon,ierr)) 1612dfe2926SJacob Faibussowitsch 1622dfe2926SJacob Faibussowitsch if (.false.) then 1632dfe2926SJacob Faibussowitsch continue 1642dfe2926SJacob Faibussowitsch else if (role==TEACHER) then 165f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass,ierr)) 166f8402805SBarry Smith PetscCallA(PetscLogFlops(612300d0,ierr)) 167f8402805SBarry Smith PetscCallA(PetscSleep(1.1*second, ierr)) 168f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass,ierr)) 169f8402805SBarry Smith PetscCallA(PetscLogEventBegin(CorrectHomework,ierr)) 170f8402805SBarry Smith PetscCallA(PetscLogFlops(234700d0,ierr)) 171f8402805SBarry Smith PetscCallA(PetscSleep(1.1*second, ierr)) 172f8402805SBarry Smith PetscCallA(PetscLogEventEnd(CorrectHomework,ierr)) 1732dfe2926SJacob Faibussowitsch else 174f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope,ierr)) 175f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 176f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope,ierr)) 177f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall,ierr)) 178f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 179f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall,ierr)) 1802dfe2926SJacob Faibussowitsch end if 1812dfe2926SJacob Faibussowitsch 182f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 183f8402805SBarry Smith PetscCallA(PetscLogFlops(120000d0,ierr)) 184f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 185f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 1862dfe2926SJacob Faibussowitsch 187f8402805SBarry Smith PetscCallA(PetscSleep(0.25*second,ierr)) 1882dfe2926SJacob Faibussowitsch 189f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Morning,ierr)) 1902dfe2926SJacob Faibussowitsch 191f8402805SBarry Smith PetscCallA(PetscLogFlops(190000d0,ierr)) 192f8402805SBarry Smith PetscCallA(PetscSleep(0.5*second,ierr)) 1932dfe2926SJacob Faibussowitsch 194f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 195f8402805SBarry Smith PetscCallA(PetscLogFlops(23000d0,ierr)) 196f8402805SBarry Smith PetscCallA(PetscSleep(1*second, ierr)) 1972dfe2926SJacob Faibussowitsch if (size>1) then 198*d8606c27SBarry Smith PetscCallMPIA(MPI_Isend( message, msgLen, MPI_DOUBLE_PRECISION,mod(rank+1,size),tagMsg+rank, PETSC_COMM_WORLD, req, ierr)) 199*d8606c27SBarry 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)) 200f8402805SBarry Smith PetscCallMPIA(MPI_Wait(req,MPI_STATUS_IGNORE,ierr)) 2012dfe2926SJacob Faibussowitsch end if 202f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 2032dfe2926SJacob Faibussowitsch 2042dfe2926SJacob Faibussowitsch if (role==TEACHER) then 205f8402805SBarry Smith PetscCallA(PetscLogEventBegin(TidyClass,ierr)) 206f8402805SBarry Smith PetscCallA(PetscLogFlops(600000d0,ierr)) 207f8402805SBarry Smith PetscCallA(PetscSleep(1.2*second, ierr)) 208f8402805SBarry Smith PetscCallA(PetscLogEventEnd(TidyClass,ierr)) 2092dfe2926SJacob Faibussowitsch else if (role==BOY) then 210f8402805SBarry Smith PetscCallA(PetscLogEventBegin(SkipRope,ierr)) 211f8402805SBarry Smith PetscCallA(PetscSleep(0.8*second, ierr)) 212f8402805SBarry Smith PetscCallA(PetscLogEventEnd(SkipRope,ierr)) 2132dfe2926SJacob Faibussowitsch else 214f8402805SBarry Smith PetscCallA(PetscLogEventBegin(PlayBall,ierr)) 215f8402805SBarry Smith PetscCallA(PetscSleep(0.9*second, ierr)) 216f8402805SBarry Smith PetscCallA(PetscLogEventEnd(PlayBall,ierr)) 2172dfe2926SJacob Faibussowitsch end if 2182dfe2926SJacob Faibussowitsch 219f8402805SBarry Smith PetscCallA(PetscLogEventBegin(Lessons,ierr)) 220f8402805SBarry Smith PetscCallA(PetscLogFlops(120000d0,ierr)) 221f8402805SBarry Smith PetscCallA(PetscSleep(0.7*second, ierr)) 222f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Lessons,ierr)) 2232dfe2926SJacob Faibussowitsch 224f8402805SBarry Smith PetscCallA(PetscLogEventEnd(Morning,ierr)) 2252dfe2926SJacob Faibussowitsch 2262dfe2926SJacob Faibussowitsch deallocate(message) 2272dfe2926SJacob Faibussowitsch 228f8402805SBarry Smith PetscCallA(PetscFinalize(ierr)) 2292dfe2926SJacob Faibussowitsch end program SchoolDay 2302dfe2926SJacob Faibussowitsch 2312dfe2926SJacob Faibussowitsch!/*TEST 2322dfe2926SJacob Faibussowitsch! 2332dfe2926SJacob Faibussowitsch! testset: 2342dfe2926SJacob Faibussowitsch! suffix: no_log 2352dfe2926SJacob Faibussowitsch! requires: !defined(PETSC_USE_LOG) 2362dfe2926SJacob Faibussowitsch! test: 2372dfe2926SJacob Faibussowitsch! suffix: ascii 2382dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt 2392dfe2926SJacob Faibussowitsch! test: 2402dfe2926SJacob Faibussowitsch! suffix: detail 2412dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt:ascii_info_detail 2422dfe2926SJacob Faibussowitsch! test: 2432dfe2926SJacob Faibussowitsch! suffix: xml 2442dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.xml:ascii_xml 2452dfe2926SJacob Faibussowitsch! 2462dfe2926SJacob Faibussowitsch! testset: 2472dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt 2482dfe2926SJacob Faibussowitsch! output_file: output/ex3f90.out 2492dfe2926SJacob Faibussowitsch! requires: defined(PETSC_USE_LOG) 2502dfe2926SJacob Faibussowitsch! test: 2512dfe2926SJacob Faibussowitsch! suffix: 1 2522dfe2926SJacob Faibussowitsch! nsize: 1 2532dfe2926SJacob Faibussowitsch! test: 2542dfe2926SJacob Faibussowitsch! suffix: 2 2552dfe2926SJacob Faibussowitsch! nsize: 2 2562dfe2926SJacob Faibussowitsch! test: 2572dfe2926SJacob Faibussowitsch! suffix: 3 2582dfe2926SJacob Faibussowitsch! nsize: 3 2592dfe2926SJacob Faibussowitsch! 2602dfe2926SJacob Faibussowitsch! testset: 2612dfe2926SJacob Faibussowitsch! suffix: detail 2622dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.txt:ascii_info_detail 2632dfe2926SJacob Faibussowitsch! output_file: output/ex3f90.out 2642dfe2926SJacob Faibussowitsch! requires: defined(PETSC_USE_LOG) 2652dfe2926SJacob Faibussowitsch! test: 2662dfe2926SJacob Faibussowitsch! suffix: 1 2672dfe2926SJacob Faibussowitsch! nsize: 1 2682dfe2926SJacob Faibussowitsch! test: 2692dfe2926SJacob Faibussowitsch! suffix: 2 2702dfe2926SJacob Faibussowitsch! nsize: 2 2712dfe2926SJacob Faibussowitsch! test: 2722dfe2926SJacob Faibussowitsch! suffix: 3 2732dfe2926SJacob Faibussowitsch! nsize: 3 2742dfe2926SJacob Faibussowitsch! 2752dfe2926SJacob Faibussowitsch! testset: 2762dfe2926SJacob Faibussowitsch! suffix: xml 2772dfe2926SJacob Faibussowitsch! args: -log_view ascii:filename.xml:ascii_xml 2782dfe2926SJacob Faibussowitsch! output_file: output/ex3f90.out 2792dfe2926SJacob Faibussowitsch! requires: defined(PETSC_USE_LOG) 2802dfe2926SJacob Faibussowitsch! test: 2812dfe2926SJacob Faibussowitsch! suffix: 1 2822dfe2926SJacob Faibussowitsch! nsize: 1 2832dfe2926SJacob Faibussowitsch! test: 2842dfe2926SJacob Faibussowitsch! suffix: 2 2852dfe2926SJacob Faibussowitsch! nsize: 2 2862dfe2926SJacob Faibussowitsch! test: 2872dfe2926SJacob Faibussowitsch! suffix: 3 2882dfe2926SJacob Faibussowitsch! nsize: 3 2892dfe2926SJacob Faibussowitsch! 2902dfe2926SJacob Faibussowitsch!TEST*/ 291