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: ! -----------------------------------------------------------------------
7: #include <petsc/finclude/petscsys.h>
8: #include <petsc/finclude/petsclog.h>
9: program main
10: use petscsys
11: implicit none
13: !
14: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
15: ! Variable declarations
16: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
17: !
18: PetscLogEvent USER_EVENT1, USER_EVENT2
19: PetscLogEvent USER_EVENT3, USER_EVENT4
20: PetscLogEvent USER_EVENT5, USER_EVENT6
21: PetscLogEvent USER_EVENT7, USER_EVENT8
22: PetscLogEvent USER_EVENT9
23: PetscClassId classid
24: integer imax
25: PetscErrorCode ierr
26: parameter(imax=10000)
27: PetscLogDouble onefp
28: parameter(onefp=1.0d0)
29: PetscReal onereal, tenreal
30: parameter(onereal=1.0, tenreal=10.0)
31: PetscInt n
32: !
33: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
34: ! Beginning of program
35: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
37: PetscCallA(PetscInitialize(ierr))
39: !
40: ! Create a new user-defined event.
41: ! - Note that PetscLogEventRegister() returns to the user a unique
42: ! integer event number, which should then be used for profiling
43: ! the event via PetscLogEventBegin() and PetscLogEventEnd().
44: ! - The user can also optionally log floating point operations
45: ! with the routine PetscLogFlops().
46: !
47: classid = 0
48: PetscCallA(PetscLogEventRegister('Event 1', classid, USER_EVENT1, ierr))
49: PetscCallA(PetscLogEventRegister('Event 2', classid, USER_EVENT2, ierr))
50: PetscCallA(PetscLogEventRegister('Event 3', classid, USER_EVENT3, ierr))
51: PetscCallA(PetscLogEventRegister('Event 4', classid, USER_EVENT4, ierr))
52: PetscCallA(PetscLogEventRegister('Event 5', classid, USER_EVENT5, ierr))
53: PetscCallA(PetscLogEventRegister('Event 6', classid, USER_EVENT6, ierr))
54: PetscCallA(PetscLogEventRegister('Event 7', classid, USER_EVENT7, ierr))
55: PetscCallA(PetscLogEventRegister('Event 8', classid, USER_EVENT8, ierr))
56: PetscCallA(PetscLogEventRegister('Event 9', classid, USER_EVENT9, ierr))
57: PetscCallA(PetscLogEventBegin(USER_EVENT1, ierr))
58: PetscCallA(PetscLogFlops(imax*onefp, ierr))
59: PetscCallA(PetscSleep(onereal, ierr))
60: PetscCallA(PetscLogEventEnd(USER_EVENT1, ierr))
61: PetscCallA(PetscLogEventBegin(USER_EVENT2, ierr))
62: PetscCallA(PetscLogFlops(imax*onefp, ierr))
63: PetscCallA(PetscSleep(onereal, ierr))
64: PetscCallA(PetscLogEventEnd(USER_EVENT2, ierr))
65: PetscCallA(PetscLogEventBegin(USER_EVENT3, ierr))
66: PetscCallA(PetscLogFlops(imax*onefp, ierr))
67: PetscCallA(PetscSleep(onereal, ierr))
68: PetscCallA(PetscLogEventEnd(USER_EVENT3, ierr))
69: PetscCallA(PetscLogEventBegin(USER_EVENT4, ierr))
70: PetscCallA(PetscLogFlops(imax*onefp, ierr))
71: PetscCallA(PetscSleep(onereal, ierr))
72: PetscCallA(PetscLogEventEnd(USER_EVENT4, ierr))
73: PetscCallA(PetscLogEventBegin(USER_EVENT5, ierr))
74: PetscCallA(PetscLogFlops(imax*onefp, ierr))
75: PetscCallA(PetscSleep(onereal, ierr))
76: PetscCallA(PetscLogEventEnd(USER_EVENT5, ierr))
77: PetscCallA(PetscLogEventBegin(USER_EVENT6, ierr))
78: PetscCallA(PetscLogFlops(imax*onefp, ierr))
79: PetscCallA(PetscSleep(onereal, ierr))
80: PetscCallA(PetscLogEventEnd(USER_EVENT6, ierr))
81: PetscCallA(PetscLogEventBegin(USER_EVENT7, ierr))
82: PetscCallA(PetscLogFlops(imax*onefp, ierr))
83: PetscCallA(PetscSleep(onereal, ierr))
84: PetscCallA(PetscLogEventEnd(USER_EVENT7, ierr))
85: PetscCallA(PetscLogEventBegin(USER_EVENT8, ierr))
86: PetscCallA(PetscLogFlops(imax*onefp, ierr))
87: PetscCallA(PetscSleep(onereal, ierr))
88: PetscCallA(PetscLogEventEnd(USER_EVENT8, ierr))
89: PetscCallA(PetscLogEventBegin(USER_EVENT9, ierr))
90: PetscCallA(PetscLogFlops(imax*onefp, ierr))
91: PetscCallA(PetscSleep(onereal, ierr))
92: PetscCallA(PetscLogEventEnd(USER_EVENT9, ierr))
93: !
94: ! We disable the logging of an event.
95: ! - Note that the user can activate/deactivate both user-defined
96: ! events and predefined PETSc events.
97: !
98: PetscCallA(PetscLogEventDeactivate(USER_EVENT1, ierr))
99: PetscCallA(PetscLogEventBegin(USER_EVENT1, ierr))
100: PetscCallA(PetscSleep(onereal, ierr))
101: PetscCallA(PetscLogEventEnd(USER_EVENT1, ierr))
102: !
103: ! We next enable the logging of an event
104: !
105: PetscCallA(PetscLogEventActivate(USER_EVENT1, ierr))
106: PetscCallA(PetscLogEventBegin(USER_EVENT1, ierr))
107: PetscCallA(PetscSleep(onereal, ierr))
108: PetscCallA(PetscLogEventEnd(USER_EVENT1, ierr))
110: PetscCallA(PetscInfo('PETSc info message\n'//'Another line\n', ierr))
111: PetscCallA(PetscOptionsAllUsed(PETSC_NULL_OPTIONS, n, ierr))
112: PetscCallA(PetscFinalize(ierr))
114: end
116: !
117: !/*TEST
118: !
119: ! test:
120: ! output_file: output/empty.out
121: !
122: !TEST*/