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, parameter :: imax = 10000
 25:   PetscErrorCode ierr
 26:   PetscLogDouble, parameter :: onefp = 1.0
 27:   PetscReal, parameter :: onereal = 1.0
 28:   PetscInt n
 29: !
 30: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 31: !                 Beginning of program
 32: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 34:   PetscCallA(PetscInitialize(ierr))

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

107:   PetscCallA(PetscInfo('PETSc info message\n'//'Another line\n', ierr))
108:   PetscCallA(PetscOptionsAllUsed(PETSC_NULL_OPTIONS, n, ierr))
109:   PetscCallA(PetscFinalize(ierr))

111: end

113: !
114: !/*TEST
115: !
116: !   test:
117: !     output_file: output/empty.out
118: !
119: !TEST*/