Blame src/ctests/omptough.c

Packit 577717
#include <pthread.h>
Packit 577717
#include <stdlib.h>
Packit 577717
#include <malloc.h>
Packit 577717
#include <unistd.h>
Packit 577717
#include <stdio.h>
Packit 577717
#include <omp.h>
Packit 577717
Packit 577717
#include "papi.h"
Packit 577717
#include "papi_test.h"
Packit 577717
Packit 577717
#define NITER (100000)
Packit 577717
Packit 577717
int
Packit 577717
main( int argc, char *argv[] )
Packit 577717
{
Packit 577717
	int i;
Packit 577717
	int ret;
Packit 577717
	int nthreads;
Packit 577717
	int *evtset;
Packit 577717
	int *ctrcode;
Packit 577717
Packit 577717
	nthreads = omp_get_max_threads(  );
Packit 577717
	evtset = ( int * ) malloc( sizeof ( int ) * nthreads );
Packit 577717
	ctrcode = ( int * ) malloc( sizeof ( int ) * nthreads );
Packit 577717
Packit 577717
	tests_quiet( argc, argv );	/* Set TESTS_QUIET variable */
Packit 577717
Packit 577717
	ret = PAPI_library_init( PAPI_VER_CURRENT );
Packit 577717
	if ( ret != PAPI_VER_CURRENT && ret > 0 ) {
Packit 577717
		fprintf( stderr, "PAPI library version mismatch '%s'\n",
Packit 577717
				 PAPI_strerror( ret ) );
Packit 577717
		exit( 1 );
Packit 577717
	}
Packit 577717
Packit 577717
	if ( ret < 0 ) {
Packit 577717
		fprintf( stderr, "PAPI initialization error '%s'\n",
Packit 577717
				 PAPI_strerror( ret ) );
Packit 577717
		exit( 1 );
Packit 577717
	}
Packit 577717
Packit 577717
	if ( ( ret =
Packit 577717
		   PAPI_thread_init( ( unsigned long ( * )( void ) ) pthread_self ) ) !=
Packit 577717
		 PAPI_OK ) {
Packit 577717
		fprintf( stderr, "PAPI thread initialization error '%s'\n",
Packit 577717
				 PAPI_strerror( ret ) );
Packit 577717
		exit( 1 );
Packit 577717
	}
Packit 577717
Packit 577717
	for ( i = 0; i < nthreads; i++ ) {
Packit 577717
		evtset[i] = PAPI_NULL;
Packit 577717
Packit 577717
		if ( ( ret = PAPI_event_name_to_code( "PAPI_TOT_INS", &ctrcode[i] ) )
Packit 577717
			 != PAPI_OK ) {
Packit 577717
			fprintf( stderr, "PAPI evt-name-to-code error '%s'\n",
Packit 577717
					 PAPI_strerror( ret ) );
Packit 577717
		}
Packit 577717
Packit 577717
	}
Packit 577717
Packit 577717
	for ( i = 0; i < NITER; i++ ) {
Packit 577717
#pragma omp parallel
Packit 577717
		{
Packit 577717
			int tid;
Packit 577717
			int pid;
Packit 577717
			tid = omp_get_thread_num(  );
Packit 577717
Packit 577717
			pid = pthread_self(  );
Packit 577717
Packit 577717
			if ( ( ret = PAPI_register_thread(  ) ) != PAPI_OK ) {
Packit 577717
				if ( !TESTS_QUIET ) {
Packit 577717
					fprintf( stderr,
Packit 577717
							 "[%5d] Error in register thread (tid=%d pid=%d) '%s'\n",
Packit 577717
							 i, tid, pid, PAPI_strerror( ret ) );
Packit 577717
					test_fail( __FILE__, __LINE__, "omptough", 1 );
Packit 577717
				}
Packit 577717
			}
Packit 577717
Packit 577717
			evtset[tid] = PAPI_NULL;
Packit 577717
			if ( ( ret = PAPI_create_eventset( &( evtset[tid] ) ) ) != PAPI_OK ) {
Packit 577717
				if ( !TESTS_QUIET ) {
Packit 577717
					fprintf( stderr,
Packit 577717
							 "[%5d] Error creating eventset (tid=%d pid=%d) '%s'\n",
Packit 577717
							 i, tid, pid, PAPI_strerror( ret ) );
Packit 577717
					test_fail( __FILE__, __LINE__, "omptough", 1 );
Packit 577717
				}
Packit 577717
			}
Packit 577717
Packit 577717
Packit 577717
			if ( ( ret =
Packit 577717
				   PAPI_destroy_eventset( &( evtset[tid] ) ) ) != PAPI_OK ) {
Packit 577717
				if ( !TESTS_QUIET ) {
Packit 577717
					fprintf( stderr,
Packit 577717
							 "[%5d] Error destroying eventset (tid=%d pid=%d) '%s'\n",
Packit 577717
							 i, tid, pid, PAPI_strerror( ret ) );
Packit 577717
					evtset[tid] = PAPI_NULL;
Packit 577717
					test_fail( __FILE__, __LINE__, "omptough", 1 );
Packit 577717
				}
Packit 577717
			}
Packit 577717
Packit 577717
			if ( ( ret = PAPI_unregister_thread(  ) ) != PAPI_OK ) {
Packit 577717
				if ( !TESTS_QUIET ) {
Packit 577717
					fprintf( stderr,
Packit 577717
							 "[%5d] Error in unregister thread (tid=%d pid=%d) ret='%s'\n",
Packit 577717
							 i, tid, pid, PAPI_strerror( ret ) );
Packit 577717
					test_fail( __FILE__, __LINE__, "omptough", 1 );
Packit 577717
				}
Packit 577717
			}
Packit 577717
		}
Packit 577717
	}
Packit 577717
	test_pass( __FILE__ );
Packit 577717
Packit 577717
	return 0;
Packit 577717
}