|
Packit Service |
a1973e |
C A simple example for the use of PAPI, the number of flops you should
|
|
Packit Service |
a1973e |
C get is about INDEX^3 on machines that consider add and multiply one flop
|
|
Packit Service |
a1973e |
C such as SGI, and 2*(INDEX^3) that don't consider it 1 flop such as INTEL
|
|
Packit Service |
a1973e |
C -Kevin London
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#include "fpapi_test.h"
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
program flops
|
|
Packit Service |
a1973e |
implicit integer (p)
|
|
Packit Service |
a1973e |
integer index
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
PARAMETER(index=100)
|
|
Packit Service |
a1973e |
REAL*4 matrixa(index,index),matrixb(index,index),mres(index,index)
|
|
Packit Service |
a1973e |
REAL*4 proc_time, mflops, real_time
|
|
Packit Service |
a1973e |
INTEGER*8 flpins
|
|
Packit Service |
a1973e |
INTEGER i,j,k, retval
|
|
Packit Service |
a1973e |
integer tests_quiet, get_quiet
|
|
Packit Service |
a1973e |
external get_quiet
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
tests_quiet = get_quiet()
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
retval = PAPI_VER_CURRENT
|
|
Packit Service |
a1973e |
call PAPIf_library_init(retval)
|
|
Packit Service |
a1973e |
if ( retval.NE.PAPI_VER_CURRENT) then
|
|
Packit Service |
a1973e |
call ftest_fail(__FILE__, __LINE__,
|
|
Packit Service |
a1973e |
. 'PAPI_library_init', retval)
|
|
Packit Service |
a1973e |
end if
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
call PAPIf_query_event(PAPI_FP_INS, retval)
|
|
Packit Service |
a1973e |
if (retval .NE. PAPI_OK) then
|
|
Packit Service |
a1973e |
call ftest_skip(__FILE__, __LINE__, 'PAPI_FP_INS', PAPI_ENOEVNT)
|
|
Packit Service |
a1973e |
end if
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
C Initialize the Matrix arrays
|
|
Packit Service |
a1973e |
do i=1,index
|
|
Packit Service |
a1973e |
do j=1,index
|
|
Packit Service |
a1973e |
matrixa(i,j) = i+j
|
|
Packit Service |
a1973e |
matrixb(i,j) = j-i
|
|
Packit Service |
a1973e |
mres(i,j) = 0.0
|
|
Packit Service |
a1973e |
end do
|
|
Packit Service |
a1973e |
end do
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
C Setup PAPI library and begin collecting data from the counters
|
|
Packit Service |
a1973e |
call PAPIf_flips( real_time, proc_time, flpins, mflops, retval )
|
|
Packit Service |
a1973e |
if ( retval.NE.PAPI_OK) then
|
|
Packit Service |
a1973e |
call ftest_fail(__FILE__, __LINE__, 'PAPIf_flips', retval)
|
|
Packit Service |
a1973e |
end if
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
C Matrix-Matrix Multiply
|
|
Packit Service |
a1973e |
do i=1,index
|
|
Packit Service |
a1973e |
do j=1,index
|
|
Packit Service |
a1973e |
do k=1,index
|
|
Packit Service |
a1973e |
mres(i,j) = mres(i,j) + matrixa(i,k)*matrixb(k,j)
|
|
Packit Service |
a1973e |
end do
|
|
Packit Service |
a1973e |
end do
|
|
Packit Service |
a1973e |
end do
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
C Collect the data into the Variables passed in
|
|
Packit Service |
a1973e |
call PAPIf_flips( real_time, proc_time, flpins, mflops, retval)
|
|
Packit Service |
a1973e |
if ( retval.NE.PAPI_OK) then
|
|
Packit Service |
a1973e |
call ftest_fail(__FILE__, __LINE__, 'PAPIf_flips', retval)
|
|
Packit Service |
a1973e |
end if
|
|
Packit Service |
a1973e |
if (tests_quiet .EQ. 0) then
|
|
Packit Service |
a1973e |
print *, 'Real_time: ', real_time
|
|
Packit Service |
a1973e |
print *, ' Proc_time: ', proc_time
|
|
Packit Service |
a1973e |
print *, ' Total flpins: ', flpins
|
|
Packit Service |
a1973e |
print *, ' MFLOPS: ', mflops
|
|
Packit Service |
a1973e |
end if
|
|
Packit Service |
a1973e |
call dummy(mres)
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
call ftests_pass(__FILE__)
|
|
Packit Service |
a1973e |
end
|