Blame src/ctests/ipc.c

Packit 577717
/*
Packit 577717
 * A simple example for the use of PAPI, using PAPI_ipc
Packit 577717
 * -Kevin London
Packit 577717
 */
Packit 577717
Packit 577717
#include <stdio.h>
Packit 577717
#include <stdlib.h>
Packit 577717
Packit 577717
#include "papi.h"
Packit 577717
#include "papi_test.h"
Packit 577717
Packit 577717
Packit 577717
#define INDEX 500
Packit 577717
Packit 577717
int
Packit 577717
main( int argc, char **argv )
Packit 577717
{
Packit 577717
	extern void dummy( void * );
Packit 577717
	float matrixa[INDEX][INDEX], matrixb[INDEX][INDEX], mresult[INDEX][INDEX];
Packit 577717
	float real_time, proc_time, ipc;
Packit 577717
	long long ins;
Packit 577717
	int retval;
Packit 577717
	int i, j, k;
Packit 577717
	int quiet;
Packit 577717
Packit 577717
	/* Set TESTS_QUIET variable */
Packit 577717
	quiet=tests_quiet( argc, argv );
Packit 577717
Packit 577717
	/* Initialize the Matrix arrays */
Packit 577717
	for( i = 0; i < INDEX; i++ ) {
Packit 577717
	   for( j= 0; j < INDEX; j++ ) {
Packit 577717
	       mresult[i][j] = 0.0;
Packit 577717
	       matrixa[i][j] = matrixb[i][j] = ( float ) rand(  ) * ( float ) 1.1;
Packit 577717
	   }
Packit 577717
	}
Packit 577717
Packit 577717
	/* Setup PAPI library and begin collecting data from the counters */
Packit 577717
	retval = PAPI_ipc( &real_time, &proc_time, &ins, &ipc );
Packit 577717
	if (retval < PAPI_OK ) {
Packit 577717
		if (!quiet) printf("Trouble starting IPC\n");
Packit 577717
		test_skip( __FILE__, __LINE__, "PAPI_ipc", retval );
Packit 577717
	}
Packit 577717
Packit 577717
	/* Matrix-Matrix multiply */
Packit 577717
	for ( i = 0; i < INDEX; i++ )
Packit 577717
		for ( j = 0; j < INDEX; j++ )
Packit 577717
			for ( k = 0; k < INDEX; k++ )
Packit 577717
				mresult[i][j] = mresult[i][j] + matrixa[i][k] * matrixb[k][j];
Packit 577717
Packit 577717
	/* Collect the data into the variables passed in */
Packit 577717
	if ( ( retval = PAPI_ipc( &real_time, &proc_time, &ins, &ipc ) ) < PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_ipc", retval );
Packit 577717
	dummy( ( void * ) mresult );
Packit 577717
Packit 577717
	if ( !quiet ) {
Packit 577717
		printf( "Real_time: %f Proc_time: %f Total ins: ", real_time,
Packit 577717
				proc_time );
Packit 577717
		printf( LLDFMT, ins );
Packit 577717
		printf( " IPC: %f\n", ipc );
Packit 577717
	}
Packit 577717
Packit 577717
           /* This should not happen unless the optimizer */
Packit 577717
           /* gets too good                               */
Packit 577717
        if (ins < INDEX*INDEX) {
Packit 577717
	   test_fail( __FILE__, __LINE__, "Instruction count too low.", 
Packit 577717
		      5 );
Packit 577717
	}
Packit 577717
           /* Something is broken, or else you have a really */
Packit 577717
           /* slow processor                                 */
Packit 577717
        if (ipc<0.01 ) {
Packit 577717
	   test_fail( __FILE__, __LINE__, "IPC equals zero.", 
Packit 577717
		      5 );
Packit 577717
	}
Packit 577717
Packit 577717
	test_pass( __FILE__ );
Packit 577717
Packit 577717
	return 0;
Packit 577717
}