Blame src/ftests/flops.F

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