PROGRAM TESTPCLEVENTS #include INTEGER nmaxevents PARAMETER (nmaxevents = 61) INTEGER flags, res, nevents INTEGER*8 descr CHARACTER*22 pcl_counter_name(0:nmaxevents-1) #ifdef USE_PCL INTEGER pcl_counter_list(nmaxevents) INTEGER valid_counter_list(nmaxevents) LOGICAL use_counter_list(nmaxevents) INTEGER*8 i_result(nmaxevents) INTEGER*8 i_result1(nmaxevents) INTEGER*8 i_result2(nmaxevents) REAL*8 fp_result(nmaxevents) INTEGER pclunit #else INTEGER pcl_counter_list(5), alt_counter_list(5) INTEGER*8 i_result(5), i_result1(5), i_result2(5) REAL*8 fp_result(5) SAVE alt_counter_list DATA alt_counter_list /PCL_MFLOPS, PCL_IPC, PCL_L1DCACHE_MISSRATE, $ PCL_L2DCACHE_MISSRATE, PCL_MEM_FP_RATIO/ #endif COMMON /pclvars/ i_result, descr, fp_result, pcl_counter_list, $ flags, nevents COMMON /pclnames/ pcl_counter_name REAL*4 f, df, arg, PI INTEGER i, valid_counters PI=4.0E0*ATAN(1.0) f=0.0 res = PCLinit(descr) #ifdef USE_PCL pclunit=99 OPEN(UNIT=pclunit,FILE='data.pcl',STATUS='OLD') read(pclunit,*) nevents C reset to reasonable values if (nevents .gt. nmaxevents) then nevents = nmaxevents WRITE(*,*) $ "resetting the number of PCL events to the maximum" endif do i = 1,nevents read(pclunit,*) pcl_counter_list(i) if ((pcl_counter_list(i) .ge. PCL_MFLOPS) .or. $ (pcl_counter_list(i) .lt. 0)) then if ((pcl_counter_list(i) .ge. PCL_MFLOPS) .and. $ (pcl_counter_list(i) .le. nmaxevents-1)) then WRITE(*,*) $ "Error! Rate events are not relevant:", $ pcl_counter_name(pcl_counter_list(i)) else WRITE(*,*) $ "Error! Events are not defined:", $ pcl_counter_list(i) endif use_counter_list(i) = .false. else use_counter_list(i) = .true. endif enddo close(pclunit) valid_counters = 0 do i = 1,nevents if (use_counter_list(i) .ne. .false.) then valid_counter_list(valid_counters + 1) = pcl_counter_list(i) valid_counters = valid_counters + 1 endif enddo do i = 1,valid_counters CCE107 check to see that event are supported at all res = PCLquery(descr, valid_counter_list(i), 1, flags) IF(res .NE. PCL_SUCCESS) THEN WRITE(*,*) "Error! No support for event: " $ , pcl_counter_name(valid_counter_list(i)) use_counter_list(i) = .false. else use_counter_list(i) = .true. endif enddo nevents = 0 do i = 1,valid_counters if (use_counter_list(i) .ne. .false.) then pcl_counter_list(nevents + 1) = valid_counter_list(i) nevents = nevents + 1 endif enddo do i = 1,nevents CCE107 check to see that event are supported in the order asked res = PCLquery(descr, pcl_counter_list, i, flags) IF(res .NE. PCL_SUCCESS) THEN WRITE(*,*) "Error! No support when adding event: " $ , pcl_counter_name(pcl_counter_list(i)) use_counter_list(i) = .false. else use_counter_list(i) = .true. endif enddo valid_counters = 0 do i = 1,nevents if (use_counter_list(i) .ne. .false.) then valid_counter_list(valid_counters + 1) = pcl_counter_list(i) valid_counters = valid_counters + 1 endif enddo WRITE(*,*) 'Counting Events enabled:' do i = 1,valid_counters WRITE (*,'(I2,xA)') valid_counter_list(i), $ pcl_counter_name(valid_counter_list(i)) enddo c redefine nevents = valid_counters do i = 1, nevents pcl_counter_list(i) = valid_counter_list(i) enddo #else do i = 1,5 CCE107 check to see which rate events are supported. res = PCLquery(descr, pcl_counter_list, nevents+1, flags) if ((res .ne. PCL_SUCCESS) .and. (i .lt. 5)) then pcl_counter_list(nevents+1) = alt_counter_list(i+1) else if (i .lt. 5) then nevents = nevents + 1 endif endif enddo if (nevents .eq. 0) then WRITE(*,*) $ "No PCL rate events supported: Please recompile!" STOP else WRITE(*,*) 'Rate Events enabled:' do i = 1,nevents WRITE (*,*) pcl_counter_name(pcl_counter_list(i)) enddo endif #endif CCE107 - Start counting events res = PCLstart(descr, pcl_counter_list, nevents, flags) IF(res .NE. PCL_SUCCESS) THEN WRITE(*,*) "PCL counting failed - please recompile!" STOP ENDIF CCE107 - Read event counts res = PCLread(descr, i_result1, fp_result, nevents) 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 res = PCLread(descr, i_result2, fp_result, nevents) do i=1,valid_counters i_result(i) = i_result2(i) - i_result1(i) enddo WRITE (*,*) "f = ", f #ifdef USE_PCL do i = 1,nevents WRITE(*,*) pcl_counter_name(pcl_counter_list(i)), i_result(i), $ i_result2(i), i_result1(i) enddo #else do i = 1,nevents WRITE(*,*) pcl_counter_name(pcl_counter_list(i)), fp_result(i) enddo #endif end CCE107 Initialization of common block for PCL event names BLOCK DATA setpclnames INTEGER nmaxevents PARAMETER (nmaxevents = 61) CHARACTER*22 pcl_counter_name(0:nmaxevents-1) COMMON /pclnames/ pcl_counter_name DATA pcl_counter_name(0) /'PCL_L1CACHE_READ'/ DATA pcl_counter_name(1) /'PCL_L1CACHE_WRITE'/ DATA pcl_counter_name(2) /'PCL_L1CACHE_READWRITE'/ DATA pcl_counter_name(3) /'PCL_L1CACHE_HIT'/ DATA pcl_counter_name(4) /'PCL_L1CACHE_MISS'/ DATA pcl_counter_name(5) /'PCL_L1DCACHE_READ'/ DATA pcl_counter_name(6) /'PCL_L1DCACHE_WRITE'/ DATA pcl_counter_name(7) /'PCL_L1DCACHE_READWRITE'/ DATA pcl_counter_name(8) /'PCL_L1DCACHE_HIT'/ DATA pcl_counter_name(9) /'PCL_L1DCACHE_MISS'/ DATA pcl_counter_name(10) /'PCL_L1ICACHE_READ'/ DATA pcl_counter_name(11) /'PCL_L1ICACHE_WRITE'/ DATA pcl_counter_name(12) /'PCL_L1ICACHE_READWRITE'/ DATA pcl_counter_name(13) /'PCL_L1ICACHE_HIT'/ DATA pcl_counter_name(14) /'PCL_L1ICACHE_MISS'/ DATA pcl_counter_name(15) /'PCL_L2CACHE_READ'/ DATA pcl_counter_name(16) /'PCL_L2CACHE_WRITE'/ DATA pcl_counter_name(17) /'PCL_L2CACHE_READWRITE'/ DATA pcl_counter_name(18) /'PCL_L2CACHE_HIT'/ DATA pcl_counter_name(19) /'PCL_L2CACHE_MISS'/ DATA pcl_counter_name(20) /'PCL_L2DCACHE_READ'/ DATA pcl_counter_name(21) /'PCL_L2DCACHE_WRITE'/ DATA pcl_counter_name(22) /'PCL_L2DCACHE_READWRITE'/ DATA pcl_counter_name(23) /'PCL_L2DCACHE_HIT'/ DATA pcl_counter_name(24) /'PCL_L2DCACHE_MISS'/ DATA pcl_counter_name(25) /'PCL_L2ICACHE_READ'/ DATA pcl_counter_name(26) /'PCL_L2ICACHE_WRITE'/ DATA pcl_counter_name(27) /'PCL_L2ICACHE_READWRITE'/ DATA pcl_counter_name(28) /'PCL_L2ICACHE_HIT'/ DATA pcl_counter_name(29) /'PCL_L2ICACHE_MISS'/ DATA pcl_counter_name(30) /'PCL_TLB_HIT'/ DATA pcl_counter_name(31) /'PCL_TLB_MISS'/ DATA pcl_counter_name(32) /'PCL_ITLB_HIT'/ DATA pcl_counter_name(33) /'PCL_ITLB_MISS'/ DATA pcl_counter_name(34) /'PCL_DTLB_HIT'/ DATA pcl_counter_name(35) /'PCL_DTLB_MISS'/ DATA pcl_counter_name(36) /'PCL_CYCLES'/ DATA pcl_counter_name(37) /'PCL_ELAPSED_CYCLES'/ DATA pcl_counter_name(38) /'PCL_INTEGER_INSTR'/ DATA pcl_counter_name(39) /'PCL_FP_INSTR'/ DATA pcl_counter_name(40) /'PCL_LOAD_INSTR'/ DATA pcl_counter_name(41) /'PCL_STORE_INSTR'/ DATA pcl_counter_name(42) /'PCL_LOADSTORE_INSTR'/ DATA pcl_counter_name(43) /'PCL_INSTR'/ DATA pcl_counter_name(44) /'PCL_JUMP_SUCCESS'/ DATA pcl_counter_name(45) /'PCL_JUMP_UNSUCCESS'/ DATA pcl_counter_name(46) /'PCL_JUMP'/ DATA pcl_counter_name(47) /'PCL_ATOMIC_SUCCESS'/ DATA pcl_counter_name(48) /'PCL_ATOMIC_UNSUCCESS'/ DATA pcl_counter_name(49) /'PCL_ATOMIC'/ DATA pcl_counter_name(50) /'PCL_STALL_INTEGER'/ DATA pcl_counter_name(51) /'PCL_STALL_FP'/ DATA pcl_counter_name(52) /'PCL_STALL_JUMP'/ DATA pcl_counter_name(53) /'PCL_STALL_LOAD'/ DATA pcl_counter_name(54) /'PCL_STALL_STORE'/ DATA pcl_counter_name(55) /'PCL_STALL'/ DATA pcl_counter_name(56) /'PCL_MFLOPS'/ DATA pcl_counter_name(57) /'PCL_IPC'/ DATA pcl_counter_name(58) /'PCL_L1DCACHE_MISSRATE'/ DATA pcl_counter_name(59) /'PCL_L2DCACHE_MISSRATE'/ DATA pcl_counter_name(60) /'PCL_MEM_FP_RATIO'/ END #ifdef USE_PCL CCE107 Initialization of common block for PCL summary performance BLOCK DATA setpcls INTEGER maxTimers PARAMETER (maxTimers = 40) INTEGER nmaxevents PARAMETER (nmaxevents = 61) INTEGER size PARAMETER (size = nmaxevents) INTEGER PCL_CYCLES, PCL_MODE_USER_SYSTEM PARAMETER (PCL_CYCLES=36, PCL_MODE_USER_SYSTEM=3) INTEGER pcl_counter_list(nmaxevents) INTEGER flags, nevents INTEGER*8 i_result(nmaxevents) INTEGER*8 i_result1(nmaxevents) INTEGER*8 i_result2(nmaxevents) INTEGER*8 descr REAL*8 fp_result(nmaxevents) COMMON /pclvars/ i_result, descr, fp_result, pcl_counter_list, $ flags, nevents DATA fp_result /size*0.0D0/ DATA i_result /size*0/ DATA i_result1 /size*0/ DATA i_result2 /size*0/ DATA descr /0/ DATA nevents /nmaxevents/ DATA pcl_counter_list /nmaxevents*PCL_CYCLES/ DATA flags /PCL_MODE_USER_SYSTEM/ END #else CCE107 Initialization of common block for PCL summary performance BLOCK DATA setpcls #include INTEGER pcl_counter_list(5), flags, nevents INTEGER*8 i_result(5), descr REAL*8 fp_result(5) COMMON /pclvars/ i_result, descr, fp_result, pcl_counter_list, $ flags, nevents DATA fp_result /5*0.0D0/ DATA i_result /5*0/ DATA descr /0/ DATA nevents /0/ DATA pcl_counter_list /PCL_MFLOPS, PCL_IPC, PCL_L1DCACHE_MISSRATE, $ PCL_L2DCACHE_MISSRATE, PCL_MEM_FP_RATIO/ DATA flags /PCL_MODE_USER_SYSTEM/ END #endif