==== Interfacing with PAPI : Low level interface for Fortran ==== PROGRAM testpapi include 'f77papi.h' integer check, evntst integer*8 t0, t1, c0, c1, value check = PAPI_NULL C C PAPI Initialization C check = PAPI_VER_CURRENT call PAPIF_library_init(check) if (check.ne.PAPI_VER_CURRENT) then write(6,*) 'PAPI init error' write(6,*) '00 check:', check, PAPI_VER_CURRENT stop endif C C PAPI Event Set Creation C evntst = PAPI_NULL call PAPIF_create_eventset(evntst, check) if (check.ne.PAPI_OK) then write(6,*) 'PAPI event set creation error' write(6,*) '01 check:', check, PAPI_OK stop endif C C PAPI Specify a Particular Target Event to Analyze C PAPI_TOT_CYC Total cycles executed C PAPI_FP_OPS Floating point operations executed C PAPI_L1_DCM Level 1 data cache misses C PAPI_L2_DCM Level 2 data cache misses C for other events see /opt/sw/x86_64/glibc-2.12/ivybridge-ep/papi/5.4.3/gnu-4.4.7/include/papiStdEventDefs.h C call PAPIF_add_event(evntst, PAPI_FP_OPS, check) if (check.ne.PAPI_OK) then write(6,*) 'PAPI event set adding error' write(6,*) '02 check:', check, PAPI_OK stop endif C C PAPI Time Estimators Initialization C call PAPIF_get_real_usec(t0) call PAPIF_get_real_cyc(c0) C C PAPI Counting Start C call PAPIF_start(evntst, check) if (check.ne.PAPI_OK) then write(6,*) 'PAPI start error !' write(6,*) '03 check:', check, PAPI_OK stop endif C C *** Here follows the original code section to be analyzed *** C C C PAPI Counting Stop C call PAPIF_stop(evntst, value, check) if (check.ne.PAPI_OK) then write(6,*) 'PAPI stop error !' write(6,*) '04 check:', check, PAPI_OK stop endif C C PAPI Time Estimators Stop C call PAPIF_get_real_usec(t1) call PAPIF_get_real_cyc(c1) C C PAPI Results C write(6,'(a17,8x,i20)') 'PAPI event count ', value write(6,'(a25,i20)') 'PAPI time passed in usec ', t1 - t0 write(6,'(a19,6x,i20)') 'PAPI cycles passed ', c1 - c0 C C PAPI Free Event Set C call PAPIF_cleanup_eventset(evntst, check) if (check.ne.PAPI_OK) then write(6,*) 'PAPI event set cleanup error !' write(6,*) '05 check:', check, PAPI_OK stop endif call PAPIF_destroy_eventset(evntst, check) if (check.ne.PAPI_OK) then write(6,*) 'PAPI event set destruction error !' write(6,*) '06 check:', check, PAPI_OK stop endif C C PAPI Finalize C call PAPIF_shutdown(check) if (check.ne.PAPI_OK) then write(6,*) 'PAPI finalize failed !' write(6,*) '07 check:', check, PAPI_OK stop endif END PROGRAM