Actual source code: ex3f.F

  1: !
  2: !    "$Id: ex3f.F,v 1.15 2001/01/15 21:44:21 bsmith Exp $";
  3: !
  4: !   Description: Demonstrates how users can augment the PETSc profiling by
  5: !                nserting their own event logging.
  6: !
  7: !/*T
  8: !   Concepts: PetscLog^user-defined event profiling (basic example);
  9: !   Concepts: PetscLog^activating/deactivating events for profiling (basic example);
 10: !   Processors: n
 11: !T*/
 12: ! -----------------------------------------------------------------------

 14:       program main
 15:       implicit none

 17: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 18: !                    Include files
 19: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 20: !
 21: !  The following include statements are required for using PetscLog Routines
 22: !
 23:  #include include/finclude/petsc.h
 24:  #include include/finclude/petsclog.h
 25: !
 26: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 27: !                   Variable declarations
 28: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 29: !
 30:       integer USER_EVENT1,USER_EVENT2,USER_EVENT3,USER_EVENT4
 31:       integer USER_EVENT8,USER_EVENT9
 32:       integer USER_EVENT5,USER_EVENT6,USER_EVENT7,imax,ierr
 33:       parameter (imax = 10000)
 34: !
 35: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 36: !                 Beginning of program
 37: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 39:       call PetscInitialize(PETSC_NULL_CHARACTER,ierr)

 41: !
 42: !     Create a new user-defined event.
 43: !      - Note that PetscLogEventRegister() returns to the user a unique
 44: !        integer event number, which should then be used for profiling
 45: !        the event via PetscLogEventBegin() and PetscLogEventEnd().
 46: !      - The user can also optionally log floating point operations
 47: !        with the routine PetscLogFlops().
 48: !
 49:       call PetscLogEventRegister(USER_EVENT1,'Event 1',0,ierr)
 50:       call PetscLogEventRegister(USER_EVENT2,'Event 2',0,ierr)
 51:       call PetscLogEventRegister(USER_EVENT3,'Event 3',0,ierr)
 52:       call PetscLogEventRegister(USER_EVENT4,'Event 4',0,ierr)
 53:       call PetscLogEventRegister(USER_EVENT5,'Event 5',0,ierr)
 54:       call PetscLogEventRegister(USER_EVENT6,'Event 6',0,ierr)
 55:       call PetscLogEventRegister(USER_EVENT7,'Event 7',0,ierr)
 56:       call PetscLogEventRegister(USER_EVENT8,'Event 8',0,ierr)
 57:       call PetscLogEventRegister(USER_EVENT9,'Event 9',0,ierr)
 58:       call PetscLogEventBegin(USER_EVENT1,PETSC_NULL_OBJECT,                &
 59:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
 60:      &     PETSC_NULL_OBJECT,ierr)
 61:       call PetscLogFlops(imax,ierr)
 62:       call PetscSleep(1,ierr)
 63:       call PetscLogEventEnd(USER_EVENT1,PETSC_NULL_OBJECT,                  &
 64:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
 65:      &     PETSC_NULL_OBJECT,ierr)
 66:       call PetscLogEventBegin(USER_EVENT2,PETSC_NULL_OBJECT,                &
 67:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
 68:      &     PETSC_NULL_OBJECT,ierr)
 69:       call PetscLogFlops(imax,ierr)
 70:       call PetscSleep(1,ierr)
 71:       call PetscLogEventEnd(USER_EVENT2,PETSC_NULL_OBJECT,                  &
 72:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
 73:      &     PETSC_NULL_OBJECT,ierr)
 74:       call PetscLogEventBegin(USER_EVENT3,PETSC_NULL_OBJECT,                &
 75:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
 76:      &     PETSC_NULL_OBJECT,ierr)
 77:       call PetscLogFlops(imax,ierr)
 78:       call PetscSleep(1,ierr)
 79:       call PetscLogEventEnd(USER_EVENT3,PETSC_NULL_OBJECT,                  &
 80:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
 81:      &     PETSC_NULL_OBJECT,ierr)
 82:       call PetscLogEventBegin(USER_EVENT4,PETSC_NULL_OBJECT,                &
 83:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
 84:      &     PETSC_NULL_OBJECT,ierr)
 85:       call PetscLogFlops(imax,ierr)
 86:       call PetscSleep(1,ierr)
 87:       call PetscLogEventEnd(USER_EVENT4,PETSC_NULL_OBJECT,                  &
 88:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
 89:      & PETSC_NULL_OBJECT,ierr)
 90:       call PetscLogEventBegin(USER_EVENT5,PETSC_NULL_OBJECT,                &
 91:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
 92:      &     PETSC_NULL_OBJECT,ierr)
 93:       call PetscLogFlops(imax,ierr)
 94:       call PetscSleep(1,ierr)
 95:       call PetscLogEventEnd(USER_EVENT5,PETSC_NULL_OBJECT,                  &
 96:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
 97:      &     PETSC_NULL_OBJECT,ierr)
 98:       call PetscLogEventBegin(USER_EVENT6,PETSC_NULL_OBJECT,                &
 99:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
100:      &     PETSC_NULL_OBJECT,ierr)
101:       call PetscLogFlops(imax,ierr)
102:       call PetscSleep(1,ierr)
103:       call PetscLogEventEnd(USER_EVENT6,PETSC_NULL_OBJECT,                  &
104:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
105:      &     PETSC_NULL_OBJECT,ierr)
106:       call PetscLogEventBegin(USER_EVENT7,PETSC_NULL_OBJECT,                &
107:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
108:      &     PETSC_NULL_OBJECT,ierr)
109:       call PetscLogFlops(imax,ierr)
110:       call PetscSleep(1,ierr)
111:       call PetscLogEventEnd(USER_EVENT7,PETSC_NULL_OBJECT,                  &
112:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
113:      &     PETSC_NULL_OBJECT,ierr)
114:       call PetscLogEventBegin(USER_EVENT8,PETSC_NULL_OBJECT,                &
115:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
116:      &     PETSC_NULL_OBJECT,ierr)
117:       call PetscLogFlops(imax,ierr)
118:       call PetscSleep(1,ierr)
119:       call PetscLogEventEnd(USER_EVENT8,PETSC_NULL_OBJECT,                  &
120:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
121:      &     PETSC_NULL_OBJECT,ierr)
122:       call PetscLogEventBegin(USER_EVENT9,PETSC_NULL_OBJECT,                &
123:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
124:      &     PETSC_NULL_OBJECT,ierr)
125:       call PetscLogFlops(imax,ierr)
126:       call PetscSleep(1,ierr)
127:       call PetscLogEventEnd(USER_EVENT9,PETSC_NULL_OBJECT,                  &
128:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
129:      &     PETSC_NULL_OBJECT,ierr)
130: !
131: !    We disable the logging of an event.
132: !      - Note that the user can activate/deactive both user-defined
133: !        events and predefined PETSc events.
134: !
135:       call PetscLogEventDeactivate(USER_EVENT1,ierr)
136:       call PetscLogEventBegin(USER_EVENT1,PETSC_NULL_OBJECT,                &
137:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
138:      &     PETSC_NULL_OBJECT,ierr)
139:       call PetscSleep(1,ierr)
140:       call PetscLogEventEnd(USER_EVENT1,PETSC_NULL_OBJECT,                  &
141:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
142:      &     PETSC_NULL_OBJECT,ierr)
143: !
144: !    We next enable the logging of an event
145: !
146:       call PetscLogEventActivate(USER_EVENT1,ierr)
147:       call PetscLogEventBegin(USER_EVENT1,PETSC_NULL_OBJECT,                &
148:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
149:      &     PETSC_NULL_OBJECT,ierr)
150:       call PetscSleep(1,ierr)
151:       call PetscLogEventEnd(USER_EVENT1,PETSC_NULL_OBJECT,                  &
152:      &     PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,                         &
153:      &     PETSC_NULL_OBJECT,ierr)

155:       call PetscFinalize(ierr)

157:       end