Blame src/ctests/multiplex1_pthreads.c

Packit Service a1973e
/*
Packit Service a1973e
* File:    multiplex1_pthreads.c
Packit Service a1973e
* Author:  Philip Mucci
Packit Service a1973e
*          mucci@cs.utk.edu
Packit Service a1973e
*/
Packit Service a1973e
Packit Service a1973e
/* This file tests the multiplex pthread functionality */
Packit Service a1973e
Packit Service a1973e
#include <stdio.h>
Packit Service a1973e
#include <stdlib.h>
Packit Service a1973e
#include <string.h>
Packit Service a1973e
#include <pthread.h>
Packit Service a1973e
Packit Service a1973e
#include "papi.h"
Packit Service a1973e
#include "papi_test.h"
Packit Service a1973e
Packit Service a1973e
#include "do_loops.h"
Packit Service a1973e
Packit Service a1973e
#define TOTAL_EVENTS 10
Packit Service a1973e
Packit Service a1973e
static int solaris_preset_PAPI_events[TOTAL_EVENTS] = {
Packit Service a1973e
  PAPI_BR_MSP, PAPI_TOT_CYC, PAPI_L2_TCM, PAPI_L1_ICM, 0
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static int power6_preset_PAPI_events[TOTAL_EVENTS] = {
Packit Service a1973e
	PAPI_FP_INS, PAPI_TOT_CYC, PAPI_L1_DCM, PAPI_L1_ICM, 0
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static int preset_PAPI_events[TOTAL_EVENTS] = {
Packit Service a1973e
	PAPI_FP_INS, PAPI_TOT_INS, PAPI_L1_DCM, PAPI_L1_ICM, 0
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static int PAPI_events[TOTAL_EVENTS] = { 0, };
Packit Service a1973e
static int PAPI_events_len = 0;
Packit Service a1973e
Packit Service a1973e
static void
Packit Service a1973e
init_papi_pthreads( int *out_events, int *len )
Packit Service a1973e
{
Packit Service a1973e
	int retval;
Packit Service a1973e
	int i, real_len = 0;
Packit Service a1973e
	int *in_events = preset_PAPI_events;
Packit Service a1973e
	const PAPI_hw_info_t *hw_info;
Packit Service a1973e
Packit Service a1973e
	/* Initialize the library */
Packit Service a1973e
	retval = PAPI_library_init( PAPI_VER_CURRENT );
Packit Service a1973e
	if ( retval != PAPI_VER_CURRENT ) {
Packit Service a1973e
		test_fail(__FILE__, __LINE__, "PAPI_library_init", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	hw_info = PAPI_get_hardware_info(  );
Packit Service a1973e
	if ( hw_info == NULL ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_get_hardware_info", 2 );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( strstr( hw_info->model_string, "UltraSPARC" ) ) {
Packit Service a1973e
	  in_events = solaris_preset_PAPI_events;
Packit Service a1973e
        }
Packit Service a1973e
Packit Service a1973e
	if ( strcmp( hw_info->model_string, "POWER6" ) == 0 ) {
Packit Service a1973e
		in_events = power6_preset_PAPI_events;
Packit Service a1973e
		retval = PAPI_set_domain( PAPI_DOM_ALL );
Packit Service a1973e
		if ( retval != PAPI_OK ) {
Packit Service a1973e
			test_fail(__FILE__, __LINE__,
Packit Service a1973e
				"PAPI_set_domain", retval );
Packit Service a1973e
		}
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	retval = PAPI_multiplex_init(  );
Packit Service a1973e
        if ( retval == PAPI_ENOSUPP) {
Packit Service a1973e
	   test_skip(__FILE__, __LINE__, "Multiplex not supported", 1);
Packit Service a1973e
	}
Packit Service a1973e
	else if ( retval != PAPI_OK ) {
Packit Service a1973e
		test_fail(__FILE__, __LINE__, "PAPI_multiplex_init", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	retval = PAPI_thread_init( ( unsigned long ( * )( void ) ) ( pthread_self ) );
Packit Service a1973e
	if (retval != PAPI_OK ) {
Packit Service a1973e
		if ( retval == PAPI_ECMP )
Packit Service a1973e
			test_skip( __FILE__, __LINE__, "PAPI_thread_init", retval );
Packit Service a1973e
		else
Packit Service a1973e
			test_fail( __FILE__, __LINE__, "PAPI_thread_init", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	for ( i = 0; in_events[i] != 0; i++ ) {
Packit Service a1973e
		char out[PAPI_MAX_STR_LEN];
Packit Service a1973e
		/* query and set up the right instruction to monitor */
Packit Service a1973e
		retval = PAPI_query_event( in_events[i] );
Packit Service a1973e
		if ( retval == PAPI_OK ) {
Packit Service a1973e
			out_events[real_len++] = in_events[i];
Packit Service a1973e
			PAPI_event_code_to_name( in_events[i], out );
Packit Service a1973e
			if ( real_len == *len )
Packit Service a1973e
				break;
Packit Service a1973e
		} else {
Packit Service a1973e
			PAPI_event_code_to_name( in_events[i], out );
Packit Service a1973e
			if ( !TESTS_QUIET )
Packit Service a1973e
				printf( "%s does not exist\n", out );
Packit Service a1973e
		}
Packit Service a1973e
	}
Packit Service a1973e
	if ( real_len < 1 ) {
Packit Service a1973e
		if (!TESTS_QUIET) printf("No counters available\n");
Packit Service a1973e
		test_skip(__FILE__, __LINE__, "No counters available", 0 );
Packit Service a1973e
	}
Packit Service a1973e
	*len = real_len;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static int
Packit Service a1973e
do_pthreads( void *( *fn ) ( void * ) )
Packit Service a1973e
{
Packit Service a1973e
	int i, rc, retval;
Packit Service a1973e
	pthread_attr_t attr;
Packit Service a1973e
	pthread_t id[NUM_THREADS];
Packit Service a1973e
Packit Service a1973e
	pthread_attr_init( &attr );
Packit Service a1973e
#ifdef PTHREAD_CREATE_UNDETACHED
Packit Service a1973e
	pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_UNDETACHED );
Packit Service a1973e
#endif
Packit Service a1973e
#ifdef PTHREAD_SCOPE_SYSTEM
Packit Service a1973e
	retval = pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM );
Packit Service a1973e
	if ( retval != 0 )
Packit Service a1973e
		test_skip( __FILE__, __LINE__, "pthread_attr_setscope", retval );
Packit Service a1973e
#endif
Packit Service a1973e
Packit Service a1973e
	for ( i = 0; i < NUM_THREADS; i++ ) {
Packit Service a1973e
		rc = pthread_create( &id[i], &attr, fn, NULL );
Packit Service a1973e
		if ( rc )
Packit Service a1973e
			return ( FAILURE );
Packit Service a1973e
	}
Packit Service a1973e
	for ( i = 0; i < NUM_THREADS; i++ )
Packit Service a1973e
		pthread_join( id[i], NULL );
Packit Service a1973e
Packit Service a1973e
	pthread_attr_destroy( &attr );
Packit Service a1973e
Packit Service a1973e
	return ( SUCCESS );
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
/* Tests that PAPI_multiplex_init does not mess with normal operation. */
Packit Service a1973e
Packit Service a1973e
static void *
Packit Service a1973e
case1_pthreads( void *arg )
Packit Service a1973e
{
Packit Service a1973e
	( void ) arg;			 /*unused */
Packit Service a1973e
	int retval, i, EventSet = PAPI_NULL;
Packit Service a1973e
	long long values[2];
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_register_thread(  ) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_register_thread", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_create_eventset( &EventSet ) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	for ( i = 0; i < PAPI_events_len; i++ ) {
Packit Service a1973e
		char out[PAPI_MAX_STR_LEN];
Packit Service a1973e
Packit Service a1973e
		retval = PAPI_add_event( EventSet, PAPI_events[i] );
Packit Service a1973e
		if ( retval != PAPI_OK )
Packit Service a1973e
			test_fail(__FILE__, __LINE__, "PAPI_add_event", retval );
Packit Service a1973e
		PAPI_event_code_to_name( PAPI_events[i], out );
Packit Service a1973e
		if ( !TESTS_QUIET )
Packit Service a1973e
			printf( "Added %s\n", out );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	do_stuff(  );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_start( EventSet ) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_start", retval );
Packit Service a1973e
Packit Service a1973e
	do_stuff(  );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_stop( EventSet, values ) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
Packit Service a1973e
Packit Service a1973e
	if ( !TESTS_QUIET ) {
Packit Service a1973e
		printf( "case1 thread %4x:", ( unsigned ) pthread_self(  ) );
Packit Service a1973e
		test_print_event_header( "", EventSet );
Packit Service a1973e
		printf( "case1 thread %4x:", ( unsigned ) pthread_self(  ) );
Packit Service a1973e
		printf( TAB2, "", values[0], values[1] );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_cleanup_eventset( EventSet ) ) != PAPI_OK )	/* JT */
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_cleanup_eventset", retval );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_destroy_eventset( &EventSet) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_destroy_eventset", retval );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_unregister_thread(  ) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_unregister_thread", retval );
Packit Service a1973e
Packit Service a1973e
	return ( ( void * ) SUCCESS );
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
/* Tests that PAPI_set_multiplex() works before adding events */
Packit Service a1973e
Packit Service a1973e
static void *
Packit Service a1973e
case2_pthreads( void *arg )
Packit Service a1973e
{
Packit Service a1973e
	( void ) arg;			 /*unused */
Packit Service a1973e
	int retval, i, EventSet = PAPI_NULL;
Packit Service a1973e
	long long values[2];
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_register_thread(  ) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_register_thread", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_create_eventset( &EventSet ) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	/* In Component PAPI, EventSets must be assigned a component index
Packit Service a1973e
	   before you can fiddle with their internals.
Packit Service a1973e
	   0 is always the cpu component */
Packit Service a1973e
	retval = PAPI_assign_eventset_component( EventSet, 0 );
Packit Service a1973e
	if ( retval != PAPI_OK ) {
Packit Service a1973e
		test_fail(__FILE__, __LINE__, "PAPI_assign_eventset_component", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_set_multiplex( EventSet ) ) != PAPI_OK ) {
Packit Service a1973e
	   if ( retval == PAPI_ENOSUPP) {
Packit Service a1973e
	      test_skip(__FILE__, __LINE__, "Multiplex not supported", 1);
Packit Service a1973e
	   }
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_set_multiplex", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if (!TESTS_QUIET) {
Packit Service a1973e
		printf( "++case2 thread %4x:", ( unsigned ) pthread_self(  ) );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	for ( i = 0; i < PAPI_events_len; i++ ) {
Packit Service a1973e
		char out[PAPI_MAX_STR_LEN];
Packit Service a1973e
Packit Service a1973e
		retval = PAPI_add_event( EventSet, PAPI_events[i] );
Packit Service a1973e
		if ( retval != PAPI_OK )
Packit Service a1973e
			test_fail(__FILE__, __LINE__, "PAPI_add_event", retval );
Packit Service a1973e
		PAPI_event_code_to_name( PAPI_events[i], out );
Packit Service a1973e
		if ( !TESTS_QUIET )
Packit Service a1973e
			printf( "Added %s\n", out );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	do_stuff(  );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_start( EventSet ) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_start", retval );
Packit Service a1973e
Packit Service a1973e
	do_stuff(  );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_stop( EventSet, values ) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
Packit Service a1973e
Packit Service a1973e
	if ( !TESTS_QUIET ) {
Packit Service a1973e
		printf( "case2 thread %4x:", ( unsigned ) pthread_self(  ) );
Packit Service a1973e
		test_print_event_header( "", EventSet );
Packit Service a1973e
		printf( "case2 thread %4x:", ( unsigned ) pthread_self(  ) );
Packit Service a1973e
		printf( TAB2, "", values[0], values[1] );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	/* JT */
Packit Service a1973e
	if ( ( retval = PAPI_cleanup_eventset( EventSet ) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_cleanup_eventset", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_destroy_eventset( &EventSet) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_destroy_eventset", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_unregister_thread(  ) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_unregister_thread", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	return ( ( void * ) SUCCESS );
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
/* Tests that PAPI_set_multiplex() works after adding events */
Packit Service a1973e
Packit Service a1973e
static void *
Packit Service a1973e
case3_pthreads( void *arg )
Packit Service a1973e
{
Packit Service a1973e
	( void ) arg;			 /*unused */
Packit Service a1973e
	int retval, i, EventSet = PAPI_NULL;
Packit Service a1973e
	long long values[2];
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_register_thread(  ) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_register_thread", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_create_eventset( &EventSet ) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	for ( i = 0; i < PAPI_events_len; i++ ) {
Packit Service a1973e
		char out[PAPI_MAX_STR_LEN];
Packit Service a1973e
Packit Service a1973e
		retval = PAPI_add_event( EventSet, PAPI_events[i] );
Packit Service a1973e
		if ( retval != PAPI_OK )
Packit Service a1973e
			test_fail(__FILE__, __LINE__, "PAPI_add_event", retval );
Packit Service a1973e
		PAPI_event_code_to_name( PAPI_events[i], out );
Packit Service a1973e
		if ( !TESTS_QUIET )
Packit Service a1973e
			printf( "Added %s\n", out );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_set_multiplex( EventSet ) ) != PAPI_OK ) {
Packit Service a1973e
	   if ( retval == PAPI_ENOSUPP) {
Packit Service a1973e
	        test_skip(__FILE__, __LINE__, "Multiplex not supported", 1);
Packit Service a1973e
	   }
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_set_multiplex", retval );
Packit Service a1973e
	}
Packit Service a1973e
	do_stuff(  );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_start( EventSet ) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_start", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	do_stuff(  );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_stop( EventSet, values ) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( !TESTS_QUIET ) {
Packit Service a1973e
		printf( "case3 thread %4x:", ( unsigned ) pthread_self(  ) );
Packit Service a1973e
		test_print_event_header( "", EventSet );
Packit Service a1973e
		printf( "case3 thread %4x:", ( unsigned ) pthread_self(  ) );
Packit Service a1973e
		printf( TAB2, "", values[0], values[1] );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_cleanup_eventset( EventSet ) ) != PAPI_OK )	/* JT */
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_cleanup_eventset", retval );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_destroy_eventset( &EventSet) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_destroy_eventset", retval );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_unregister_thread(  ) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_unregister_thread", retval );
Packit Service a1973e
Packit Service a1973e
	return ( ( void * ) SUCCESS );
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
/* Tests that PAPI_set_multiplex() works before/after adding events */
Packit Service a1973e
Packit Service a1973e
static void *
Packit Service a1973e
case4_pthreads( void *arg )
Packit Service a1973e
{
Packit Service a1973e
	( void ) arg;			 /*unused */
Packit Service a1973e
	int retval, i, EventSet = PAPI_NULL;
Packit Service a1973e
	long long values[4];
Packit Service a1973e
	char out[PAPI_MAX_STR_LEN];
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_register_thread(  ) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_register_thread", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_create_eventset( &EventSet ) ) != PAPI_OK ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	i = 0;
Packit Service a1973e
	retval = PAPI_add_event( EventSet, PAPI_events[i] );
Packit Service a1973e
	if ( retval != PAPI_OK )
Packit Service a1973e
		test_fail(__FILE__, __LINE__, "PAPI_add_event", retval );
Packit Service a1973e
	PAPI_event_code_to_name( PAPI_events[i], out );
Packit Service a1973e
	if (!TESTS_QUIET) printf( "Added %s\n", out );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_set_multiplex( EventSet ) ) != PAPI_OK ) {
Packit Service a1973e
	        if ( retval == PAPI_ENOSUPP) {
Packit Service a1973e
	           test_skip(__FILE__, __LINE__, "Multiplex not supported", 1);
Packit Service a1973e
	        }
Packit Service a1973e
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_set_multiplex", retval );
Packit Service a1973e
	}
Packit Service a1973e
	i = 1;
Packit Service a1973e
	retval = PAPI_add_event( EventSet, PAPI_events[i] );
Packit Service a1973e
	if ( retval != PAPI_OK )
Packit Service a1973e
		test_fail(__FILE__, __LINE__, "PAPI_add_event", retval );
Packit Service a1973e
	PAPI_event_code_to_name( PAPI_events[i], out );
Packit Service a1973e
	if (!TESTS_QUIET) printf( "Added %s\n", out );
Packit Service a1973e
Packit Service a1973e
	do_stuff(  );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_start( EventSet ) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_start", retval );
Packit Service a1973e
Packit Service a1973e
	do_stuff(  );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_stop( EventSet, values ) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
Packit Service a1973e
Packit Service a1973e
	if ( !TESTS_QUIET ) {
Packit Service a1973e
		printf( "case4 thread %4x:", ( unsigned ) pthread_self(  ) );
Packit Service a1973e
		test_print_event_header( "", EventSet );
Packit Service a1973e
		printf( "case4 thread %4x:", ( unsigned ) pthread_self(  ) );
Packit Service a1973e
		printf( TAB2, "", values[0], values[1] );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_cleanup_eventset( EventSet ) ) != PAPI_OK )	/* JT */
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_cleanup_eventset", retval );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_destroy_eventset( &EventSet) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_destroy_eventset", retval );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_unregister_thread(  ) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_unregister_thread", retval );
Packit Service a1973e
Packit Service a1973e
	return ( ( void * ) SUCCESS );
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static int
Packit Service a1973e
case1( void )
Packit Service a1973e
{
Packit Service a1973e
	int retval;
Packit Service a1973e
Packit Service a1973e
	PAPI_events_len = 2;
Packit Service a1973e
	init_papi_pthreads( PAPI_events, &PAPI_events_len );
Packit Service a1973e
Packit Service a1973e
	retval = do_pthreads( case1_pthreads );
Packit Service a1973e
Packit Service a1973e
	PAPI_shutdown(  );
Packit Service a1973e
Packit Service a1973e
	return retval;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static int
Packit Service a1973e
case2( void )
Packit Service a1973e
{
Packit Service a1973e
	int retval;
Packit Service a1973e
Packit Service a1973e
	PAPI_events_len = 2;
Packit Service a1973e
	init_papi_pthreads( PAPI_events, &PAPI_events_len );
Packit Service a1973e
Packit Service a1973e
	retval = do_pthreads( case2_pthreads );
Packit Service a1973e
Packit Service a1973e
	PAPI_shutdown(  );
Packit Service a1973e
Packit Service a1973e
	return retval;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static int
Packit Service a1973e
case3( void )
Packit Service a1973e
{
Packit Service a1973e
	int retval;
Packit Service a1973e
Packit Service a1973e
	PAPI_events_len = 2;
Packit Service a1973e
	init_papi_pthreads( PAPI_events, &PAPI_events_len );
Packit Service a1973e
Packit Service a1973e
	retval = do_pthreads( case3_pthreads );
Packit Service a1973e
Packit Service a1973e
	PAPI_shutdown(  );
Packit Service a1973e
Packit Service a1973e
	return retval;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static int
Packit Service a1973e
case4( void )
Packit Service a1973e
{
Packit Service a1973e
	int retval;
Packit Service a1973e
Packit Service a1973e
	PAPI_events_len = 2;
Packit Service a1973e
	init_papi_pthreads( PAPI_events, &PAPI_events_len );
Packit Service a1973e
Packit Service a1973e
	retval = do_pthreads( case4_pthreads );
Packit Service a1973e
Packit Service a1973e
	PAPI_shutdown(  );
Packit Service a1973e
Packit Service a1973e
	return retval;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
int
Packit Service a1973e
main( int argc, char **argv )
Packit Service a1973e
{
Packit Service a1973e
	int retval;
Packit Service a1973e
	int quiet;
Packit Service a1973e
Packit Service a1973e
	/* Set TESTS_QUIET variable */
Packit Service a1973e
	quiet = tests_quiet( argc, argv );
Packit Service a1973e
Packit Service a1973e
	if (!quiet) {
Packit Service a1973e
		printf( "%s: Using %d threads\n\n", argv[0], NUM_THREADS );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	/* Case1 */
Packit Service a1973e
	if (!quiet) {
Packit Service a1973e
		printf ( "case1: Does PAPI_multiplex_init() "
Packit Service a1973e
			"not break regular operation?\n" );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( case1() != SUCCESS ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "case1", PAPI_ESYS );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	/* Case2 */
Packit Service a1973e
	if (!quiet) {
Packit Service a1973e
		printf( "case2: Does setmpx/add work?\n" );
Packit Service a1973e
	}
Packit Service a1973e
	if ( case2(  ) != SUCCESS ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "case2", PAPI_ESYS );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	/* Case3 */
Packit Service a1973e
	if (!quiet) {
Packit Service a1973e
		printf( "case3: Does add/setmpx work?\n" );
Packit Service a1973e
	}
Packit Service a1973e
	if ( case3(  ) != SUCCESS ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "case3", PAPI_ESYS );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	/* Case4 */
Packit Service a1973e
	if (!quiet) {
Packit Service a1973e
		printf( "case4: Does add/setmpx/add work?\n" );
Packit Service a1973e
	}
Packit Service a1973e
	if ( case4(  ) != SUCCESS ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "case4", PAPI_ESYS );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	/* Finally init PAPI? */
Packit Service a1973e
	retval = PAPI_library_init( PAPI_VER_CURRENT );
Packit Service a1973e
	if ( retval != PAPI_VER_CURRENT ) {
Packit Service a1973e
		test_fail(__FILE__, __LINE__, "PAPI_library_init", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	test_pass( __FILE__ );
Packit Service a1973e
Packit Service a1973e
	return 0;
Packit Service a1973e
Packit Service a1973e
}