PAPI  5.0.1.0
linux-NWunit.c File Reference

This file has the source code for a component that enables PAPI-C to access hardware monitoring counters for BG/Q through the bgpm library. More...

Include dependency graph for linux-NWunit.c:

Go to the source code of this file.

Functions

int NWUNIT_init_thread (hwd_context_t *ctx)
int NWUNIT_init_component (int cidx)
int NWUNIT_init_control_state (hwd_control_state_t *ptr)
int NWUNIT_start (hwd_context_t *ctx, hwd_control_state_t *ptr)
int NWUNIT_stop (hwd_context_t *ctx, hwd_control_state_t *ptr)
int NWUNIT_read (hwd_context_t *ctx, hwd_control_state_t *ptr, long_long **events, int flags)
int NWUNIT_shutdown_thread (hwd_context_t *ctx)
int NWUNIT_ctl (hwd_context_t *ctx, int code, _papi_int_option_t *option)
int NWUNIT_update_control_state (hwd_control_state_t *ptr, NativeInfo_t *native, int count, hwd_context_t *ctx)
int NWUNIT_set_domain (hwd_control_state_t *cntrl, int domain)
int NWUNIT_reset (hwd_context_t *ctx, hwd_control_state_t *ptr)
int NWUNIT_cleanup_eventset (hwd_control_state_t *ctrl)
int NWUNIT_ntv_enum_events (unsigned int *EventCode, int modifier)
int NWUNIT_ntv_name_to_code (char *name, unsigned int *event_code)
int NWUNIT_ntv_code_to_name (unsigned int EventCode, char *name, int len)
int NWUNIT_ntv_code_to_descr (unsigned int EventCode, char *name, int len)
int NWUNIT_ntv_code_to_bits (unsigned int EventCode, hwd_register_t *bits)

Variables

papi_vector_t _NWunit_vector

Detailed Description

Author:
Heike Jagode jagode@eecs.utk.edu Mods: <your name="" here>=""> <your email="" address>=""> BGPM / NWunit component

Tested version of bgpm (early access)

Definition in file linux-NWunit.c.


Function Documentation

Definition at line 303 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    printf( "NWUNIT_cleanup_eventset\n" );
#endif
    
    NWUNIT_control_state_t * this_state = ( NWUNIT_control_state_t * ) ctrl;
    
    // create a new empty bgpm eventset
    // reason: bgpm doesn't permit to remove events from an eventset; 
    // hence we delete the old eventset and create a new one
    _common_deleteRecreate( &this_state->EventGroup ); // HJ try to use delete() only
    
    return ( PAPI_OK );
}

Here is the call graph for this function:

int NWUNIT_ctl ( hwd_context_t ctx,
int  code,
_papi_int_option_t option 
)

Definition at line 182 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    printf( "NWUNIT_ctl\n" );
#endif
    
    ( void ) ctx;
    ( void ) code;
    ( void ) option;
    return ( PAPI_OK );
}
int NWUNIT_init_component ( int  cidx)

Definition at line 49 of file linux-NWunit.c.

{  
#ifdef DEBUG_BGQ
    printf( "NWUNIT_init_component\n" );
#endif

    _NWunit_vector.cmp_info.CmpIdx = cidx;
#ifdef DEBUG_BGQ
    printf( "NWUNIT_init_component cidx = %d\n", cidx );
#endif
    
    return ( PAPI_OK );
}

Definition at line 69 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    printf( "NWUNIT_init_control_state\n" );
#endif
    
    NWUNIT_control_state_t * this_state = ( NWUNIT_control_state_t * ) ptr;
    
    this_state->EventGroup = Bgpm_CreateEventSet();
    CHECK_BGPM_ERROR( this_state->EventGroup, "Bgpm_CreateEventSet" );
    
    return PAPI_OK;
}

Definition at line 33 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    printf( "NWUNIT_init_thread\n" );
#endif
    
    ( void ) ctx;
    return PAPI_OK;
}
int NWUNIT_ntv_code_to_bits ( unsigned int  EventCode,
hwd_register_t bits 
)

Definition at line 437 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    //printf( "NWUNIT_ntv_code_to_bits\n" );
#endif

    return ( PAPI_OK );
}
int NWUNIT_ntv_code_to_descr ( unsigned int  EventCode,
char *  name,
int  len 
)

Definition at line 417 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    //printf( "NWUNIT_ntv_code_to_descr\n" );
#endif
    int retval, index;
    
    index = ( EventCode ) + OFFSET;
    
    retval = Bgpm_GetLongDesc( index, name, &len );
    CHECK_BGPM_ERROR( retval, "Bgpm_GetLongDesc" );                      
    
    return ( PAPI_OK );
}
int NWUNIT_ntv_code_to_name ( unsigned int  EventCode,
char *  name,
int  len 
)

Definition at line 388 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    //printf( "NWUNIT_ntv_code_to_name\n" );
#endif
    int index;
    
    index = ( EventCode ) + OFFSET;

    if ( index >= MAX_COUNTERS )
        return PAPI_ENOEVNT;

    strncpy( name, Bgpm_GetEventIdLabel( index ), len );
    
    if ( name == NULL ) {
#ifdef DEBUG_BGPM
        printf ("Error: ret value is NULL for BGPM API function Bgpm_GetEventIdLabel.\n" );
#endif
        return PAPI_ENOEVNT;
    }
    
    return ( PAPI_OK );
}
int NWUNIT_ntv_enum_events ( unsigned int *  EventCode,
int  modifier 
)

Definition at line 324 of file linux-NWunit.c.

{
    //printf( "NWUNIT_ntv_enum_events\n" );

    switch ( modifier ) {
    case PAPI_ENUM_FIRST:
        *EventCode = 0;

        return ( PAPI_OK );
        break;

    case PAPI_ENUM_EVENTS:
    {
        int index = ( *EventCode ) + OFFSET;

        if ( index < NWUNIT_MAX_COUNTERS ) {
            *EventCode = *EventCode + 1;
            return ( PAPI_OK );
        } else
            return ( PAPI_ENOEVNT );

        break;
    }
    default:
        return ( PAPI_EINVAL );
    }
    return ( PAPI_EINVAL );
}
int NWUNIT_ntv_name_to_code ( char *  name,
unsigned int *  event_code 
)

Definition at line 358 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    printf( "NWUNIT_ntv_name_to_code\n" );
#endif
    int ret;
    
    /* Return event id matching a given event label string */
    ret = Bgpm_GetEventIdFromLabel ( name );
    
    if ( ret <= 0 ) {
#ifdef DEBUG_BGPM
        printf ("Error: ret value is %d for BGPM API function '%s'.\n",
                ret, "Bgpm_GetEventIdFromLabel" );
#endif
        return PAPI_ENOEVNT;
    }
    else if ( ret < OFFSET || ret > NWUNIT_MAX_COUNTERS ) // not a NWUnit event
        return PAPI_ENOEVNT;
    else
        *event_code = ( ret - OFFSET ) ;
    
    return PAPI_OK;
}
int NWUNIT_read ( hwd_context_t ctx,
hwd_control_state_t ptr,
long_long **  events,
int  flags 
)

Definition at line 134 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    printf( "NWUNIT_read\n" );
#endif
    ( void ) ctx;
    ( void ) flags;
    int i, numEvts;
    NWUNIT_control_state_t * this_state = ( NWUNIT_control_state_t * ) ptr;
    
    numEvts = Bgpm_NumEvents( this_state->AttachedEventGroup );
    if ( numEvts == 0 ) {
#ifdef DEBUG_BGPM
        printf ("Error: ret value is %d for BGPM API function Bgpm_NumEvents.\n", numEvts );
#endif
        //return ( EXIT_FAILURE );
    }
        
    for ( i = 0; i < numEvts; i++ )
        this_state->counts[i] = _common_getEventValue( i, this_state->AttachedEventGroup );

    *events = this_state->counts;
    
    return ( PAPI_OK );
}

Here is the call graph for this function:

int NWUNIT_reset ( hwd_context_t ctx,
hwd_control_state_t ptr 
)

Definition at line 274 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    printf( "NWUNIT_reset\n" );
#endif
    ( void ) ctx;
    int retval;
    NWUNIT_control_state_t * this_state = ( NWUNIT_control_state_t * ) ptr;

    /* we can't simply call Bgpm_Reset() since PAPI doesn't have the 
     restriction that an EventSet has to be stopped before resetting is
     possible. However, BGPM does have this restriction. 
     Hence we need to stop, reset and start */
    retval = Bgpm_Stop( this_state->AttachedEventGroup );
    CHECK_BGPM_ERROR( retval, "Bgpm_Stop" );
    
    retval = Bgpm_ResetStart( this_state->AttachedEventGroup );
    CHECK_BGPM_ERROR( retval, "Bgpm_ResetStart" );
    
    return ( PAPI_OK );
}
int NWUNIT_set_domain ( hwd_control_state_t cntrl,
int  domain 
)

Definition at line 246 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    printf( "NWUNIT_set_domain\n" );
#endif
    int found = 0;
    ( void ) cntrl;

    if ( PAPI_DOM_USER & domain )
        found = 1;

    if ( PAPI_DOM_KERNEL & domain )
        found = 1;

    if ( PAPI_DOM_OTHER & domain )
        found = 1;

    if ( !found )
        return ( PAPI_EINVAL );

    return ( PAPI_OK );
}

Definition at line 166 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    printf( "NWUNIT_shutdown_thread\n" );
#endif
    
    ( void ) ctx;
    return ( PAPI_OK );
}
int NWUNIT_start ( hwd_context_t ctx,
hwd_control_state_t ptr 
)

Definition at line 88 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    printf( "NWUNIT_start\n" );
#endif
    
    ( void ) ctx;
    int retval;
    NWUNIT_control_state_t * this_state = ( NWUNIT_control_state_t * ) ptr;
    
    retval = Bgpm_Attach( this_state->EventGroup, 
                          UPC_NW_ALL_LINKS, 
                          ( uint64_t ) ( this_state->AttachedEventGroup ) ); 
    CHECK_BGPM_ERROR( retval, "Bgpm_Attach" );

    retval = Bgpm_ResetStart( this_state->AttachedEventGroup );
    CHECK_BGPM_ERROR( retval, "Bgpm_ResetStart" );
    
    return ( PAPI_OK );
}
int NWUNIT_stop ( hwd_context_t ctx,
hwd_control_state_t ptr 
)

Definition at line 114 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    printf( "NWUNIT_stop\n" );
#endif
    ( void ) ctx;
    int retval;
    NWUNIT_control_state_t * this_state = ( NWUNIT_control_state_t * ) ptr;
    
    retval = Bgpm_Stop( this_state->AttachedEventGroup );
    CHECK_BGPM_ERROR( retval, "Bgpm_Stop" );
    
    return ( PAPI_OK );
}
int NWUNIT_update_control_state ( hwd_control_state_t ptr,
NativeInfo_t native,
int  count,
hwd_context_t ctx 
)

Definition at line 202 of file linux-NWunit.c.

{
#ifdef DEBUG_BGQ
    printf( "NWUNIT_update_control_state: count = %d\n", count );
#endif
    ( void ) ctx;
    int retval, index, i;
    NWUNIT_control_state_t * this_state = ( NWUNIT_control_state_t * ) ptr;
    
    // Delete and re-create BGPM eventset
    _common_deleteRecreate( &this_state->EventGroup );
        
    // otherwise, add the events to the eventset
    for ( i = 0; i < count; i++ ) {
        index = ( native[i].ni_event ) + OFFSET;
        
        native[i].ni_position = i;
        
#ifdef DEBUG_BGQ
        printf("NWUNIT_update_control_state: ADD event: i = %d, index = %d\n", i, index );
#endif
        
        /* Add events to the BGPM eventGroup */
        retval = Bgpm_AddEvent( this_state->EventGroup, index );
        CHECK_BGPM_ERROR( retval, "Bgpm_AddEvent" );
    }
    
    return ( PAPI_OK );
}

Here is the call graph for this function:


Variable Documentation

Definition at line 23 of file linux-NWunit.c.

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines