Actual source code: ex3f.F
1: !
2: !
3: ! Description: Demonstrates how users can augment the PETSc profiling by
4: ! nserting their own event logging.
5: !
6: !/*T
7: ! Concepts: PetscLog^user-defined event profiling (basic example);
8: ! Concepts: PetscLog^activating/deactivating events for profiling (basic example);
9: ! Processors: n
10: !T*/
11: ! -----------------------------------------------------------------------
13: program main
14: implicit none
16: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
17: ! Include files
18: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19: !
20: ! The following include statements are required for using PetscLog Routines
21: !
22: #include include/finclude/petsc.h
23: #include include/finclude/petsclog.h
24: !
25: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
26: ! Variable declarations
27: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
28: !
29: PetscEvent USER_EVENT1,USER_EVENT2,USER_EVENT3,USER_EVENT4
30: PetscEvent USER_EVENT8,USER_EVENT9
31: PetscEvent USER_EVENT5,USER_EVENT6,USER_EVENT7
32: integer imax
33: PetscErrorCode ierr
34: parameter (imax = 10000)
35: !
36: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
37: ! Beginning of program
38: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
40: call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
42: !
43: ! Create a new user-defined event.
44: ! - Note that PetscLogEventRegister() returns to the user a unique
45: ! integer event number, which should then be used for profiling
46: ! the event via PetscLogEventBegin() and PetscLogEventEnd().
47: ! - The user can also optionally log floating point operations
48: ! with the routine PetscLogFlops().
49: !
50: call PetscLogEventRegister(USER_EVENT1,'Event 1',0,ierr)
51: call PetscLogEventRegister(USER_EVENT2,'Event 2',0,ierr)
52: call PetscLogEventRegister(USER_EVENT3,'Event 3',0,ierr)
53: call PetscLogEventRegister(USER_EVENT4,'Event 4',0,ierr)
54: call PetscLogEventRegister(USER_EVENT5,'Event 5',0,ierr)
55: call PetscLogEventRegister(USER_EVENT6,'Event 6',0,ierr)
56: call PetscLogEventRegister(USER_EVENT7,'Event 7',0,ierr)
57: call PetscLogEventRegister(USER_EVENT8,'Event 8',0,ierr)
58: call PetscLogEventRegister(USER_EVENT9,'Event 9',0,ierr)
59: call PetscLogEventBegin(USER_EVENT1,ierr)
60: call PetscLogFlops(imax,ierr)
61: call PetscSleep(1,ierr)
62: call PetscLogEventEnd(USER_EVENT1,ierr)
63: call PetscLogEventBegin(USER_EVENT2,ierr)
64: call PetscLogFlops(imax,ierr)
65: call PetscSleep(1,ierr)
66: call PetscLogEventEnd(USER_EVENT2,ierr)
67: call PetscLogEventBegin(USER_EVENT3,ierr)
68: call PetscLogFlops(imax,ierr)
69: call PetscSleep(1,ierr)
70: call PetscLogEventEnd(USER_EVENT3,ierr)
71: call PetscLogEventBegin(USER_EVENT4,ierr)
72: call PetscLogFlops(imax,ierr)
73: call PetscSleep(1,ierr)
74: call PetscLogEventEnd(USER_EVENT4,ierr)
75: call PetscLogEventBegin(USER_EVENT5,ierr)
76: call PetscLogFlops(imax,ierr)
77: call PetscSleep(1,ierr)
78: call PetscLogEventEnd(USER_EVENT5,ierr)
79: call PetscLogEventBegin(USER_EVENT6,ierr)
80: call PetscLogFlops(imax,ierr)
81: call PetscSleep(1,ierr)
82: call PetscLogEventEnd(USER_EVENT6,ierr)
83: call PetscLogEventBegin(USER_EVENT7,ierr)
84: call PetscLogFlops(imax,ierr)
85: call PetscSleep(1,ierr)
86: call PetscLogEventEnd(USER_EVENT7,ierr)
87: call PetscLogEventBegin(USER_EVENT8,ierr)
88: call PetscLogFlops(imax,ierr)
89: call PetscSleep(1,ierr)
90: call PetscLogEventEnd(USER_EVENT8,ierr)
91: call PetscLogEventBegin(USER_EVENT9,ierr)
92: call PetscLogFlops(imax,ierr)
93: call PetscSleep(1,ierr)
94: call PetscLogEventEnd(USER_EVENT9,ierr)
95: !
96: ! We disable the logging of an event.
97: ! - Note that the user can activate/deactive both user-defined
98: ! events and predefined PETSc events.
99: !
100: call PetscLogEventDeactivate(USER_EVENT1,ierr)
101: call PetscLogEventBegin(USER_EVENT1,ierr)
102: call PetscSleep(1,ierr)
103: call PetscLogEventEnd(USER_EVENT1,ierr)
104: !
105: ! We next enable the logging of an event
106: !
107: call PetscLogEventActivate(USER_EVENT1,ierr)
108: call PetscLogEventBegin(USER_EVENT1,ierr)
109: call PetscSleep(1,ierr)
110: call PetscLogEventEnd(USER_EVENT1,ierr)
112: call PetscFinalize(ierr)
114: end