|
Packit |
577717 |
/*
|
|
Packit |
577717 |
* File: profile_twoevents.c
|
|
Packit |
577717 |
* Author: Philip Mucci
|
|
Packit |
577717 |
* mucci@cs.utk.edu
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* This file performs the following test: profiling two events */
|
|
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 |
#include "prof_utils.h"
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#include "do_loops.h"
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
main( int argc, char **argv )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
int i, num_tests = 6;
|
|
Packit |
577717 |
unsigned long length, blength;
|
|
Packit |
577717 |
int num_buckets, mask;
|
|
Packit |
577717 |
char title[80];
|
|
Packit |
577717 |
int retval;
|
|
Packit |
577717 |
const PAPI_exe_info_t *prginfo;
|
|
Packit |
577717 |
caddr_t start, end;
|
|
Packit |
577717 |
int quiet;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Set TESTS_QUIET variable */
|
|
Packit |
577717 |
quiet=tests_quiet( argc, argv );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = PAPI_library_init( PAPI_VER_CURRENT );
|
|
Packit |
577717 |
if (retval != PAPI_VER_CURRENT ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( prginfo = PAPI_get_executable_info( ) ) == NULL ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_get_executable_info", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
mask = prof_events( num_tests );
|
|
Packit |
577717 |
start = prginfo->address_info.text_start;
|
|
Packit |
577717 |
end = prginfo->address_info.text_end;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Must have at least FP instr or Tot ins */
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( ( mask & MASK_FP_INS ) == 0 ) && ( ( mask & MASK_TOT_INS ) == 0 ) ) {
|
|
Packit |
577717 |
if (!quiet) printf("No events could be added\n");
|
|
Packit |
577717 |
test_skip( __FILE__, __LINE__, "No FP or Total Ins. event", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( start > end )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "Profile length < 0!", 0 );
|
|
Packit |
577717 |
length = ( unsigned long ) ( end - start );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!quiet) {
|
|
Packit |
577717 |
prof_print_address( "Test case profile: POSIX compatible profiling with two events.\n",
|
|
Packit |
577717 |
prginfo );
|
|
Packit |
577717 |
prof_print_prof_info( start, end, THRESHOLD, event_name );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
prof_alloc( 2, length );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
blength =
|
|
Packit |
577717 |
prof_size( length, FULL_SCALE, PAPI_PROFIL_BUCKET_16, &num_buckets );
|
|
Packit |
577717 |
do_no_profile( quiet );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( !quiet ) {
|
|
Packit |
577717 |
printf( "Test type : \tPAPI_PROFIL_POSIX\n" );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
if ( ( retval =
|
|
Packit |
577717 |
PAPI_profil( profbuf[0], ( unsigned int ) blength, start, FULL_SCALE,
|
|
Packit |
577717 |
EventSet, PAPI_event, THRESHOLD,
|
|
Packit |
577717 |
PAPI_PROFIL_POSIX ) ) != PAPI_OK ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_profil", retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
if ( ( retval =
|
|
Packit |
577717 |
PAPI_profil( profbuf[1], ( unsigned int ) blength, start, FULL_SCALE,
|
|
Packit |
577717 |
EventSet, PAPI_TOT_CYC, THRESHOLD,
|
|
Packit |
577717 |
PAPI_PROFIL_POSIX ) ) != PAPI_OK )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_profil", retval );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
do_stuff( );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( retval = PAPI_start( EventSet ) ) != PAPI_OK )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_start", retval );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
do_stuff( );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( retval = PAPI_stop( EventSet, values[1] ) ) != PAPI_OK )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( !quiet ) {
|
|
Packit |
577717 |
printf( TAB1, event_name, ( values[1] )[0] );
|
|
Packit |
577717 |
printf( TAB1, "PAPI_TOT_CYC:", ( values[1] )[1] );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
if ( ( retval =
|
|
Packit |
577717 |
PAPI_profil( profbuf[0], ( unsigned int ) blength, start, FULL_SCALE,
|
|
Packit |
577717 |
EventSet, PAPI_event, 0,
|
|
Packit |
577717 |
PAPI_PROFIL_POSIX ) ) != PAPI_OK )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_profil", retval );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( retval =
|
|
Packit |
577717 |
PAPI_profil( profbuf[1], ( unsigned int ) blength, start, FULL_SCALE,
|
|
Packit |
577717 |
EventSet, PAPI_TOT_CYC, 0,
|
|
Packit |
577717 |
PAPI_PROFIL_POSIX ) ) != PAPI_OK )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_profil", retval );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
sprintf( title, " \t\t %s\tPAPI_TOT_CYC\naddress\t\t\tcounts\tcounts\n",
|
|
Packit |
577717 |
event_name );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!quiet) {
|
|
Packit |
577717 |
prof_head( blength, PAPI_PROFIL_BUCKET_16, num_buckets, title );
|
|
Packit |
577717 |
prof_out( start, 2, PAPI_PROFIL_BUCKET_16, num_buckets, FULL_SCALE );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
remove_test_events( &EventSet, mask );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = prof_check( 2, PAPI_PROFIL_BUCKET_16, num_buckets );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
for ( i = 0; i < 2; i++ ) {
|
|
Packit |
577717 |
free( profbuf[i] );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( retval == 0 ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "No information in buffers", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
test_pass( __FILE__ );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return 0;
|
|
Packit |
577717 |
}
|