我的两个猜测,不知是否准确,欢迎交流:
1、values中元素好像必须是64位的,FORTRAN中integer(kind=8)或integer(8).
2、一次只能添加两个event_code,多了无效.
program papitest implicit none #include "f90papi.h" integer, parameter::N = 5000 integer x(N,N),y(N,N),z(N,N) integer check,event_set,event_code integer i, j integer(kind=8) values(4) do j = 1, N do i = 1, N x(i,j) = i + j y(i,j) = i + 1 z(i,j) = 0 enddo enddo do i = 1, 4 values(i) = -1 enddo ! print *, values ! initialize the PAPI library check = PAPI_VER_CURRENT call PAPIF_library_init(check) ! create the eventset event_set = PAPI_NULL call PAPIF_create_eventset(event_set, check) event_code = PAPI_L1_DCH ! Total L1 Data Cache hits call PAPIF_add_event(event_set, event_code, check) event_code = PAPI_L1_DCM ! Total L1 Data Cache misses call PAPIF_add_event(event_set, event_code, check) ! event_code = PAPI_TLB_DM ! TLB misses ! call PAPIF_add_event(event_set, event_code, check) ! start counting call PAPIF_start(event_set, check) do j = 1,N do i = 1,N z(i,j) = x(i,j)+y(i,j) end do end do ! stop counting call PAPIF_stop(event_set, values, check) print *,'L1 cache hits:',values(1) print *,'L1 cache misses:',values(2) print *,'L1 cache hit rates:', & values(1) *100 / (values(1) + values(2)) ! reset the PAPI counters call PAPIF_reset(event_set, check) call PAPIF_shutdown end
[root@c0106 simple]# gfortran hello.F -o hello -lpapi [root@c0106 simple]# ./hello L1 cache hits: 331640400 L1 cache misses: 4697189 L1 cache hit rates: 98 [root@c0106 simple]#