キャッシュヒット率とTLB欠落率をPAPIでテスト


私の2つの推測は、正確かどうか分かりませんが、交流を歓迎します.
1、valuesの要素は64ビットでなければならないようで、FORTRANのinteger(kind=8)あるいはinteger(8)である.
2、一度に2つのイベントしか追加できないコード、多くなったら無効です.
 
 
        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]#