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