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: ! output_file: output/empty.out
122: !
123: !TEST*/