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: !
122: !TEST*/