|
Packit |
577717 |
/*
|
|
Packit |
577717 |
* File: papi_vector.c
|
|
Packit |
577717 |
* Author: Kevin London
|
|
Packit |
577717 |
* london@cs.utk.edu
|
|
Packit |
577717 |
* Mods: Haihang You
|
|
Packit |
577717 |
* you@cs.utk.edu
|
|
Packit |
577717 |
* Mods: <Your name here>
|
|
Packit |
577717 |
* <Your email here>
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#include "papi.h"
|
|
Packit |
577717 |
#include "papi_internal.h"
|
|
Packit |
577717 |
#include "papi_vector.h"
|
|
Packit |
577717 |
#include "papi_memory.h"
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#include <string.h>
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#ifdef _AIX
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* needed because the get_virt_usec() code uses a hardware context */
|
|
Packit |
577717 |
/* which is a pmapi definition on AIX. */
|
|
Packit |
577717 |
#include <pmapi.h>
|
|
Packit |
577717 |
#endif
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
void
|
|
Packit |
577717 |
_vectors_error( )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
SUBDBG( "function is not implemented in the component!\n" );
|
|
Packit |
577717 |
exit( PAPI_ECMP );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
vec_int_ok_dummy( )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
return PAPI_OK;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
vec_int_one_dummy( )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
return 1;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
vec_int_dummy( )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
return PAPI_ECMP;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
void *
|
|
Packit |
577717 |
vec_void_star_dummy( )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
return NULL;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
void
|
|
Packit |
577717 |
vec_void_dummy( )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
return;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long long
|
|
Packit |
577717 |
vec_long_long_dummy( )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
return PAPI_ECMP;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long long
|
|
Packit |
577717 |
vec_long_long_context_dummy( hwd_context_t *ignored )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
(void) ignored;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return PAPI_ECMP;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
char *
|
|
Packit |
577717 |
vec_char_star_dummy( )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
return NULL;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long
|
|
Packit |
577717 |
vec_long_dummy( )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
return PAPI_ECMP;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long long vec_virt_cycles(void)
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
return ((long long) _papi_os_vector.get_virt_usec() *
|
|
Packit |
577717 |
_papi_hwi_system_info.hw_info.cpu_max_mhz);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long long vec_real_nsec_dummy(void)
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
return ((long long) _papi_os_vector.get_real_usec() * 1000);
|
|
Packit |
577717 |
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long long vec_virt_nsec_dummy(void)
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
return ((long long) _papi_os_vector.get_virt_usec() * 1000);
|
|
Packit |
577717 |
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
_papi_hwi_innoculate_vector( papi_vector_t * v )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
if ( !v )
|
|
Packit |
577717 |
return ( PAPI_EINVAL );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* component function pointers */
|
|
Packit |
577717 |
if ( !v->dispatch_timer )
|
|
Packit |
577717 |
v->dispatch_timer =
|
|
Packit |
577717 |
( void ( * )( int, hwd_siginfo_t *, void * ) ) vec_void_dummy;
|
|
Packit |
577717 |
if ( !v->get_overflow_address )
|
|
Packit |
577717 |
v->get_overflow_address =
|
|
Packit |
577717 |
( void *( * )( int, char *, int ) ) vec_void_star_dummy;
|
|
Packit |
577717 |
if ( !v->start )
|
|
Packit |
577717 |
v->start = ( int ( * )( hwd_context_t *, hwd_control_state_t * ) )
|
|
Packit |
577717 |
vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->stop )
|
|
Packit |
577717 |
v->stop = ( int ( * )( hwd_context_t *, hwd_control_state_t * ) )
|
|
Packit |
577717 |
vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->read )
|
|
Packit |
577717 |
v->read = ( int ( * )
|
|
Packit |
577717 |
( hwd_context_t *, hwd_control_state_t *, long long **,
|
|
Packit |
577717 |
int ) ) vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->reset )
|
|
Packit |
577717 |
v->reset = ( int ( * )( hwd_context_t *, hwd_control_state_t * ) )
|
|
Packit |
577717 |
vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->write )
|
|
Packit |
577717 |
v->write =
|
|
Packit |
577717 |
( int ( * )( hwd_context_t *, hwd_control_state_t *, long long[] ) )
|
|
Packit |
577717 |
vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->cleanup_eventset )
|
|
Packit |
577717 |
v->cleanup_eventset = ( int ( * )( hwd_control_state_t * ) ) vec_int_ok_dummy;
|
|
Packit |
577717 |
if ( !v->stop_profiling )
|
|
Packit |
577717 |
v->stop_profiling =
|
|
Packit |
577717 |
( int ( * )( ThreadInfo_t *, EventSetInfo_t * ) ) vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->init_component )
|
|
Packit |
577717 |
v->init_component = ( int ( * )( int ) ) vec_int_ok_dummy;
|
|
Packit |
577717 |
if ( !v->init_thread )
|
|
Packit |
577717 |
v->init_thread = ( int ( * )( hwd_context_t * ) ) vec_int_ok_dummy;
|
|
Packit |
577717 |
if ( !v->init_control_state )
|
|
Packit |
577717 |
v->init_control_state =
|
|
Packit |
577717 |
( int ( * )( hwd_control_state_t * ptr ) ) vec_void_dummy;
|
|
Packit |
577717 |
if ( !v->update_control_state )
|
|
Packit |
577717 |
v->update_control_state = ( int ( * )
|
|
Packit |
577717 |
( hwd_control_state_t *, NativeInfo_t *,
|
|
Packit |
577717 |
int, hwd_context_t * ) ) vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->ctl )
|
|
Packit |
577717 |
v->ctl = ( int ( * )( hwd_context_t *, int, _papi_int_option_t * ) )
|
|
Packit |
577717 |
vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->set_overflow )
|
|
Packit |
577717 |
v->set_overflow =
|
|
Packit |
577717 |
( int ( * )( EventSetInfo_t *, int, int ) ) vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->set_profile )
|
|
Packit |
577717 |
v->set_profile =
|
|
Packit |
577717 |
( int ( * )( EventSetInfo_t *, int, int ) ) vec_int_dummy;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( !v->set_domain )
|
|
Packit |
577717 |
v->set_domain =
|
|
Packit |
577717 |
( int ( * )( hwd_control_state_t *, int ) ) vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->ntv_enum_events )
|
|
Packit |
577717 |
v->ntv_enum_events = ( int ( * )( unsigned int *, int ) ) vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->ntv_name_to_code )
|
|
Packit |
577717 |
v->ntv_name_to_code =
|
|
Packit |
577717 |
( int ( * )( const char *, unsigned int * ) ) vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->ntv_code_to_name )
|
|
Packit |
577717 |
v->ntv_code_to_name =
|
|
Packit |
577717 |
( int ( * )( unsigned int, char *, int ) ) vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->ntv_code_to_descr )
|
|
Packit |
577717 |
v->ntv_code_to_descr =
|
|
Packit |
577717 |
( int ( * )( unsigned int, char *, int ) ) vec_int_ok_dummy;
|
|
Packit |
577717 |
if ( !v->ntv_code_to_bits )
|
|
Packit |
577717 |
v->ntv_code_to_bits =
|
|
Packit |
577717 |
( int ( * )( unsigned int, hwd_register_t * ) ) vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->ntv_code_to_info )
|
|
Packit |
577717 |
v->ntv_code_to_info =
|
|
Packit |
577717 |
( int ( * )( unsigned int, PAPI_event_info_t * ) ) vec_int_dummy;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( !v->allocate_registers )
|
|
Packit |
577717 |
v->allocate_registers =
|
|
Packit |
577717 |
( int ( * )( EventSetInfo_t * ) ) vec_int_ok_dummy;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( !v->shutdown_thread )
|
|
Packit |
577717 |
v->shutdown_thread = ( int ( * )( hwd_context_t * ) ) vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->shutdown_component )
|
|
Packit |
577717 |
v->shutdown_component = ( int ( * )( void ) ) vec_int_ok_dummy;
|
|
Packit |
577717 |
if ( !v->user )
|
|
Packit |
577717 |
v->user = ( int ( * )( int, void *, void * ) ) vec_int_dummy;
|
|
Packit |
577717 |
return PAPI_OK;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
_papi_hwi_innoculate_os_vector( papi_os_vector_t * v )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
if ( !v )
|
|
Packit |
577717 |
return ( PAPI_EINVAL );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( !v->get_real_cycles )
|
|
Packit |
577717 |
v->get_real_cycles = vec_long_long_dummy;
|
|
Packit |
577717 |
if ( !v->get_real_usec )
|
|
Packit |
577717 |
v->get_real_usec = vec_long_long_dummy;
|
|
Packit |
577717 |
if ( !v->get_real_nsec )
|
|
Packit |
577717 |
v->get_real_nsec = vec_real_nsec_dummy;
|
|
Packit |
577717 |
if ( !v->get_virt_cycles )
|
|
Packit |
577717 |
v->get_virt_cycles = vec_virt_cycles;
|
|
Packit |
577717 |
if ( !v->get_virt_usec )
|
|
Packit |
577717 |
v->get_virt_usec = vec_long_long_dummy;
|
|
Packit |
577717 |
if ( !v->get_virt_nsec )
|
|
Packit |
577717 |
v->get_virt_nsec = vec_virt_nsec_dummy;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( !v->update_shlib_info )
|
|
Packit |
577717 |
v->update_shlib_info = ( int ( * )( papi_mdi_t * ) ) vec_int_dummy;
|
|
Packit |
577717 |
if ( !v->get_system_info )
|
|
Packit |
577717 |
v->get_system_info = ( int ( * )( ) ) vec_int_dummy;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( !v->get_memory_info )
|
|
Packit |
577717 |
v->get_memory_info =
|
|
Packit |
577717 |
( int ( * )( PAPI_hw_info_t *, int ) ) vec_int_dummy;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( !v->get_dmem_info )
|
|
Packit |
577717 |
v->get_dmem_info = ( int ( * )( PAPI_dmem_info_t * ) ) vec_int_dummy;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return PAPI_OK;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* not used? debug only? */
|
|
Packit |
577717 |
#if 0
|
|
Packit |
577717 |
static void *
|
|
Packit |
577717 |
vector_find_dummy( void *func, char **buf )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
void *ptr = NULL;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( vec_int_ok_dummy == ( int ( * )( ) ) func ) {
|
|
Packit |
577717 |
ptr = ( void * ) vec_int_ok_dummy;
|
|
Packit |
577717 |
if ( buf != NULL )
|
|
Packit |
577717 |
*buf = papi_strdup( "vec_int_ok_dummy" );
|
|
Packit |
577717 |
} else if ( vec_int_one_dummy == ( int ( * )( ) ) func ) {
|
|
Packit |
577717 |
ptr = ( void * ) vec_int_one_dummy;
|
|
Packit |
577717 |
if ( buf != NULL )
|
|
Packit |
577717 |
*buf = papi_strdup( "vec_int_one_dummy" );
|
|
Packit |
577717 |
} else if ( vec_int_dummy == ( int ( * )( ) ) func ) {
|
|
Packit |
577717 |
ptr = ( void * ) vec_int_dummy;
|
|
Packit |
577717 |
if ( buf != NULL )
|
|
Packit |
577717 |
*buf = papi_strdup( "vec_int_dummy" );
|
|
Packit |
577717 |
} else if ( vec_void_dummy == ( void ( * )( ) ) func ) {
|
|
Packit |
577717 |
ptr = ( void * ) vec_void_dummy;
|
|
Packit |
577717 |
if ( buf != NULL )
|
|
Packit |
577717 |
*buf = papi_strdup( "vec_void_dummy" );
|
|
Packit |
577717 |
} else if ( vec_void_star_dummy == ( void *( * )( ) ) func ) {
|
|
Packit |
577717 |
ptr = ( void * ) vec_void_star_dummy;
|
|
Packit |
577717 |
if ( buf != NULL )
|
|
Packit |
577717 |
*buf = papi_strdup( "vec_void_star_dummy" );
|
|
Packit |
577717 |
} else if ( vec_long_long_dummy == ( long long ( * )( ) ) func ) {
|
|
Packit |
577717 |
ptr = ( void * ) vec_long_long_dummy;
|
|
Packit |
577717 |
if ( buf != NULL )
|
|
Packit |
577717 |
*buf = papi_strdup( "vec_long_long_dummy" );
|
|
Packit |
577717 |
} else if ( vec_char_star_dummy == ( char *( * )( ) ) func ) {
|
|
Packit |
577717 |
ptr = ( void * ) vec_char_star_dummy;
|
|
Packit |
577717 |
*buf = papi_strdup( "vec_char_star_dummy" );
|
|
Packit |
577717 |
} else if ( vec_long_dummy == ( long ( * )( ) ) func ) {
|
|
Packit |
577717 |
ptr = ( void * ) vec_long_dummy;
|
|
Packit |
577717 |
if ( buf != NULL )
|
|
Packit |
577717 |
*buf = papi_strdup( "vec_long_dummy" );
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
ptr = NULL;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
return ( ptr );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
static void
|
|
Packit |
577717 |
vector_print_routine( void *func, char *fname, int pfunc )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
void *ptr = NULL;
|
|
Packit |
577717 |
char *buf = NULL;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
ptr = vector_find_dummy( func, &buf );
|
|
Packit |
577717 |
if ( ptr ) {
|
|
Packit |
577717 |
printf( "DUMMY: %s is mapped to %s.\n",
|
|
Packit |
577717 |
fname, buf );
|
|
Packit |
577717 |
papi_free( buf );
|
|
Packit |
577717 |
} else if ( ( !ptr && pfunc ) )
|
|
Packit |
577717 |
printf( "function: %s is mapped to %p.\n",
|
|
Packit |
577717 |
fname, func );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
static void
|
|
Packit |
577717 |
vector_print_table( papi_vector_t * v, int print_func )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( !v )
|
|
Packit |
577717 |
return;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->dispatch_timer,
|
|
Packit |
577717 |
"_papi_hwd_dispatch_timer", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->get_overflow_address,
|
|
Packit |
577717 |
"_papi_hwd_get_overflow_address", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->start, "_papi_hwd_start", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->stop, "_papi_hwd_stop", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->read, "_papi_hwd_read", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->reset, "_papi_hwd_reset", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->write, "_papi_hwd_write", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->cleanup_eventset,
|
|
Packit |
577717 |
"_papi_hwd_cleanup_eventset", print_func );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->stop_profiling,
|
|
Packit |
577717 |
"_papi_hwd_stop_profiling", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->init_component,
|
|
Packit |
577717 |
"_papi_hwd_init_component", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->init_thread, "_papi_hwd_init_thread", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->init_control_state,
|
|
Packit |
577717 |
"_papi_hwd_init_control_state", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->ctl, "_papi_hwd_ctl", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->set_overflow, "_papi_hwd_set_overflow",
|
|
Packit |
577717 |
print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->set_profile, "_papi_hwd_set_profile",
|
|
Packit |
577717 |
print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->set_domain, "_papi_hwd_set_domain",
|
|
Packit |
577717 |
print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->ntv_enum_events,
|
|
Packit |
577717 |
"_papi_hwd_ntv_enum_events", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->ntv_name_to_code,
|
|
Packit |
577717 |
"_papi_hwd_ntv_name_to_code", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->ntv_code_to_name,
|
|
Packit |
577717 |
"_papi_hwd_ntv_code_to_name", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->ntv_code_to_descr,
|
|
Packit |
577717 |
"_papi_hwd_ntv_code_to_descr", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->ntv_code_to_bits,
|
|
Packit |
577717 |
"_papi_hwd_ntv_code_to_bits", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->ntv_code_to_info,
|
|
Packit |
577717 |
"_papi_hwd_ntv_code_to_info", print_func );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->allocate_registers,
|
|
Packit |
577717 |
"_papi_hwd_allocate_registers", print_func );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->shutdown_thread, "_papi_hwd_shutdown_thread",
|
|
Packit |
577717 |
print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->shutdown_component,
|
|
Packit |
577717 |
"_papi_hwd_shutdown_component", print_func );
|
|
Packit |
577717 |
vector_print_routine( ( void * ) v->user, "_papi_hwd_user", print_func );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#endif
|