Actual source code: ex3f.F90

  1: !
  2: !
  3: !   Description: Demonstrates how users can augment the PETSc profiling by
  4: !                nserting their own event logging.
  5: !
  6: ! -----------------------------------------------------------------------
  7: #include <petsc/finclude/petscsys.h>
  8: #include <petsc/finclude/petsclog.h>
  9: program main
 10:   use petscsys
 11:   implicit none

 13: !
 14: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 15: !                   Variable declarations
 16: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 17: !
 18:   PetscLogEvent USER_EVENT1, USER_EVENT2
 19:   PetscLogEvent USER_EVENT3, USER_EVENT4
 20:   PetscLogEvent USER_EVENT5, USER_EVENT6
 21:   PetscLogEvent USER_EVENT7, USER_EVENT8
 22:   PetscLogEvent USER_EVENT9
 23:   PetscClassId classid
 24:   integer imax
 25:   PetscErrorCode ierr
 26:   parameter(imax=10000)
 27:   PetscLogDouble onefp
 28:   parameter(onefp=1.0d0)
 29:   PetscReal onereal, tenreal
 30:   parameter(onereal=1.0, tenreal=10.0)
 31:   PetscInt n
 32: !
 33: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 34: !                 Beginning of program
 35: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 37:   PetscCallA(PetscInitialize(ierr))

 39: !
 40: !     Create a new user-defined event.
 41: !      - Note that PetscLogEventRegister() returns to the user a unique
 42: !        integer event number, which should then be used for profiling
 43: !        the event via PetscLogEventBegin() and PetscLogEventEnd().
 44: !      - The user can also optionally log floating point operations
 45: !        with the routine PetscLogFlops().
 46: !
 47:   classid = 0
 48:   PetscCallA(PetscLogEventRegister('Event 1', classid, USER_EVENT1, ierr))
 49:   PetscCallA(PetscLogEventRegister('Event 2', classid, USER_EVENT2, ierr))
 50:   PetscCallA(PetscLogEventRegister('Event 3', classid, USER_EVENT3, ierr))
 51:   PetscCallA(PetscLogEventRegister('Event 4', classid, USER_EVENT4, ierr))
 52:   PetscCallA(PetscLogEventRegister('Event 5', classid, USER_EVENT5, ierr))
 53:   PetscCallA(PetscLogEventRegister('Event 6', classid, USER_EVENT6, ierr))
 54:   PetscCallA(PetscLogEventRegister('Event 7', classid, USER_EVENT7, ierr))
 55:   PetscCallA(PetscLogEventRegister('Event 8', classid, USER_EVENT8, ierr))
 56:   PetscCallA(PetscLogEventRegister('Event 9', classid, USER_EVENT9, ierr))
 57:   PetscCallA(PetscLogEventBegin(USER_EVENT1, ierr))
 58:   PetscCallA(PetscLogFlops(imax*onefp, ierr))
 59:   PetscCallA(PetscSleep(onereal, ierr))
 60:   PetscCallA(PetscLogEventEnd(USER_EVENT1, ierr))
 61:   PetscCallA(PetscLogEventBegin(USER_EVENT2, ierr))
 62:   PetscCallA(PetscLogFlops(imax*onefp, ierr))
 63:   PetscCallA(PetscSleep(onereal, ierr))
 64:   PetscCallA(PetscLogEventEnd(USER_EVENT2, ierr))
 65:   PetscCallA(PetscLogEventBegin(USER_EVENT3, ierr))
 66:   PetscCallA(PetscLogFlops(imax*onefp, ierr))
 67:   PetscCallA(PetscSleep(onereal, ierr))
 68:   PetscCallA(PetscLogEventEnd(USER_EVENT3, ierr))
 69:   PetscCallA(PetscLogEventBegin(USER_EVENT4, ierr))
 70:   PetscCallA(PetscLogFlops(imax*onefp, ierr))
 71:   PetscCallA(PetscSleep(onereal, ierr))
 72:   PetscCallA(PetscLogEventEnd(USER_EVENT4, ierr))
 73:   PetscCallA(PetscLogEventBegin(USER_EVENT5, ierr))
 74:   PetscCallA(PetscLogFlops(imax*onefp, ierr))
 75:   PetscCallA(PetscSleep(onereal, ierr))
 76:   PetscCallA(PetscLogEventEnd(USER_EVENT5, ierr))
 77:   PetscCallA(PetscLogEventBegin(USER_EVENT6, ierr))
 78:   PetscCallA(PetscLogFlops(imax*onefp, ierr))
 79:   PetscCallA(PetscSleep(onereal, ierr))
 80:   PetscCallA(PetscLogEventEnd(USER_EVENT6, ierr))
 81:   PetscCallA(PetscLogEventBegin(USER_EVENT7, ierr))
 82:   PetscCallA(PetscLogFlops(imax*onefp, ierr))
 83:   PetscCallA(PetscSleep(onereal, ierr))
 84:   PetscCallA(PetscLogEventEnd(USER_EVENT7, ierr))
 85:   PetscCallA(PetscLogEventBegin(USER_EVENT8, ierr))
 86:   PetscCallA(PetscLogFlops(imax*onefp, ierr))
 87:   PetscCallA(PetscSleep(onereal, ierr))
 88:   PetscCallA(PetscLogEventEnd(USER_EVENT8, ierr))
 89:   PetscCallA(PetscLogEventBegin(USER_EVENT9, ierr))
 90:   PetscCallA(PetscLogFlops(imax*onefp, ierr))
 91:   PetscCallA(PetscSleep(onereal, ierr))
 92:   PetscCallA(PetscLogEventEnd(USER_EVENT9, ierr))
 93: !
 94: !    We disable the logging of an event.
 95: !      - Note that the user can activate/deactivate both user-defined
 96: !        events and predefined PETSc events.
 97: !
 98:   PetscCallA(PetscLogEventDeactivate(USER_EVENT1, ierr))
 99:   PetscCallA(PetscLogEventBegin(USER_EVENT1, ierr))
100:   PetscCallA(PetscSleep(onereal, ierr))
101:   PetscCallA(PetscLogEventEnd(USER_EVENT1, ierr))
102: !
103: !    We next enable the logging of an event
104: !
105:   PetscCallA(PetscLogEventActivate(USER_EVENT1, ierr))
106:   PetscCallA(PetscLogEventBegin(USER_EVENT1, ierr))
107:   PetscCallA(PetscSleep(onereal, ierr))
108:   PetscCallA(PetscLogEventEnd(USER_EVENT1, ierr))

110:   PetscCallA(PetscInfo('PETSc info message\n'//'Another line\n', ierr))
111:   PetscCallA(PetscOptionsAllUsed(PETSC_NULL_OPTIONS, n, ierr))
112:   PetscCallA(PetscFinalize(ierr))

114: end

116: !
117: !/*TEST
118: !
119: !   test:
120: !     output_file: output/empty.out
121: !
122: !TEST*/