PROGRAM TESTPAPIEVENTS #include INTEGER PAPIF_num_counters EXTERNAL PAPIF_num_counters CHARACTER(13) EventName INTEGER nmaxevents PARAMETER (nmaxevents = 18) INTEGER EventCode(nmaxevents) LOGICAL use_counter(nmaxevents) INTEGER*8 values(nmaxevents), values1(nmaxevents), $ values2(nmaxevents) COMMON /papivalues/ values, values1, values2 INTEGER neventsmax, nevents, Check, EventSet INTEGER papiunit SAVE EventCode, neventsmax, nevents, EventSet REAL*4 f, df, arg, PI INTEGER i, j, valid_counters PI=4.0E0*ATAN(1.0) f=0.0 Check = PAPI_VER_CURRENT call PAPIF_library_init(Check) if (Check .NE. PAPI_VER_CURRENT) then WRITE(*,*) "PAPI Library Version is out of Date" CALL ABORT endif neventsmax = PAPIF_num_counters(check) if (neventsmax .GT. nmaxevents) then WRITE(*,*) "Fix the nmaxevents in the code to ", neventsmax CALL ABORT endif papiunit=99 OPEN(UNIT=papiunit,FILE='data.papi',STATUS='OLD') read(papiunit,*) nevents C reset to reasonable values if (nevents .gt. neventsmax) then nevents = neventsmax WRITE(*,*) "resetting the number of PAPI events to the maximum" endif do i = 1,nevents read(papiunit,*) EventName call PAPIF_event_name_to_code(EventName, EventCode(i), Check) end do close(papiunit) EventSet = PAPI_NULL call PAPIF_create_eventset(EventSet, Check) valid_counters = 0 do i = 1,nevents call PAPIF_add_event(EventSet, EventCode(i), Check) if (Check .NE. PAPI_OK) then call PAPIF_event_code_to_name(EventCode(i),EventName,Check) WRITE(*,*) "Error after PAPIF_add_event: ", EventName use_counter(i) = .false. else valid_counters = valid_counters + 1 use_counter(i) = .true. endif enddo CCE107 - Start counting events call PAPIF_start(EventSet, Check) CCE107 - Read event counts call PAPIF_read(EventSet, values1, Check) do i=1,100000 arg = PI/1000.0*i*nevents df = tan(arg) f = f + df WRITE (10,*) f, df, arg enddo CCE107 - Read event counts call PAPIF_read(EventSet, values2, Check) do i=1,valid_counters values(i) = values2(i) - values1(i) enddo WRITE (*,*) "f = ", f j = 1 do i = 1,nevents if (use_counter(i)) then call PAPIF_event_code_to_name(EventCode(i),EventName,Check) WRITE(*,*) Eventname, values(j), values1(j), values2(j) j = j + 1 endif enddo end BLOCK DATA setpapivalues INTEGER nmaxevents PARAMETER (nmaxevents = 18) INTEGER size PARAMETER (size = 3*nmaxevents) INTEGER*8 values(nmaxevents), values1(nmaxevents), $ values2(nmaxevents) COMMON /papivalues/ values, values1, values2 DATA values, values1, values2 /size*0/ END