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: ! -----------------------------------------------------------------------

  8: program main
  9: #include <petsc/finclude/petscsys.h>
 10: #include <petsc/finclude/petsclog.h>
 11:   use petscsys
 12:   implicit none

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

 38:   PetscCallA(PetscInitialize(ierr))

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

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

115: end

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