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*/