|
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 |
}
|