コード例 #1
0
ファイル: test_utils.c プロジェクト: pyrovski/papi-rapl
int
add_two_nonderived_events( int *num_events, int *papi_event, int *mask ) {

	/* query and set up the right event to monitor */
  int EventSet = PAPI_NULL;

#define POTENTIAL_EVENTS 3

  unsigned int potential_evt_to_add[POTENTIAL_EVENTS][2] =
		{ {( unsigned int ) PAPI_FP_INS, MASK_FP_INS},
		  {( unsigned int ) PAPI_FP_OPS, MASK_FP_OPS},
		  {( unsigned int ) PAPI_TOT_INS, MASK_TOT_INS}
		};

  int event_found = 0,i;

  *mask = 0;
	
  for(i=0;i<POTENTIAL_EVENTS;i++) {

     if ( PAPI_query_event( ( int ) potential_evt_to_add[i][0] ) == PAPI_OK ) {
       if ( !is_event_derived(potential_evt_to_add[i][0])) {
	  event_found = 1;
	  break;
       }
    }
  }
	
  if ( event_found ) {
     *papi_event = ( int ) potential_evt_to_add[i][0];
     *mask = ( int ) potential_evt_to_add[i][1] | MASK_TOT_CYC;
     EventSet = add_test_events( num_events, mask, 0 );
  } else {
     test_fail( __FILE__, __LINE__, "Not enough room to add an event!", 0 );
  }
  return EventSet;
}
コード例 #2
0
ファイル: test_utils.c プロジェクト: drahoslavzan/MKP-PSO
int
add_two_nonderived_events( int *num_events, int *papi_event, int *mask ) {

	/* query and set up the right event to monitor */
  int EventSet = PAPI_NULL;

#define POTENTIAL_EVENTS 3

  unsigned int potential_evt_to_add[POTENTIAL_EVENTS][2] =
		{ {( unsigned int ) PAPI_FP_INS, MASK_FP_INS},
		  {( unsigned int ) PAPI_FP_OPS, MASK_FP_OPS},
		  {( unsigned int ) PAPI_TOT_INS, MASK_TOT_INS}
		};

  int i;

  *mask = 0;
  
   /* could leak up to two event sets. */
  for(i=0;i<POTENTIAL_EVENTS;i++) {

     if ( PAPI_query_event( ( int ) potential_evt_to_add[i][0] ) == PAPI_OK ) {
       if ( !is_event_derived(potential_evt_to_add[i][0])) {
		 *papi_event = ( int ) potential_evt_to_add[i][0];
		 *mask = ( int ) potential_evt_to_add[i][1] | MASK_TOT_CYC;
		 EventSet = add_test_events( num_events, mask, 0 );
		 if ( *num_events == 2 ) break;
       }
    }
  }
	
  if ( i == POTENTIAL_EVENTS ) {
     test_fail( __FILE__, __LINE__, "Can't find a non-derived event!", 0 );
  }
  return EventSet;
}
コード例 #3
0
ファイル: test_utils.c プロジェクト: pyrovski/papi-rapl
int
add_test_events( int *number, int *mask, int allow_derived )
{
  int retval,i;
  int EventSet = PAPI_NULL;
  int num_counters = 0;
  char name_string[BUFSIZ];

  *number = 0;

     /* get the number of available HW counters */
  num_counters = PAPI_get_opt( PAPI_MAX_HWCTRS, NULL );
  if ( num_counters < 1 ) {
     test_fail( __FILE__, __LINE__, "Zero HW Counters available", 
			   num_counters );
  }

     /* create the eventset */
  retval = PAPI_create_eventset( &EventSet );
  if ( retval != PAPI_OK ) {
     test_fail( __FILE__, __LINE__, "PAPI_create_eventset", 
			   retval );
  }

     /* check all the masks */
  for(i=0;i<MAX_TEST_EVENTS;i++) {
    
     if ( *mask & test_events[i].mask ) {

           /* remove any derived events if told to */
        if ((is_event_derived(test_events[i].event)) && (!allow_derived)) {
	   *mask = *mask ^ test_events[i].mask;
	   continue;
        }

	retval = PAPI_add_event( EventSet, test_events[i].event );

	if ( retval == PAPI_OK ) {

	   ( *number )++;
#if 0
	   if ((*number)==num_counters) {
	     if ( !TESTS_QUIET) {
	       fprintf(stdout, "Stopping with %d events due to HW limit\n",
		       num_counters);
	     }
	     break;
	   }
#endif
	}
	else {
	   if ( !TESTS_QUIET ) {
	     PAPI_event_code_to_name(test_events[i].event,name_string);
	     fprintf( stdout, "%x %s is not available.\n", 
		      test_events[i].event,name_string);
	   }
	   *mask = *mask ^ test_events[i].mask;
	}
     }
  }

  return EventSet;
}