PAPI  5.0.1.0
omptough.c
Go to the documentation of this file.
00001 #include <pthread.h>
00002 #include <stdlib.h>
00003 #include <malloc.h>
00004 #include <unistd.h>
00005 #include <stdio.h>
00006 #include <omp.h>
00007 #include "papi_test.h"
00008 
00009 #define NITER (100000)
00010 
00011 int
00012 main( int argc, char *argv[] )
00013 {
00014     int i;
00015     int ret;
00016     int nthreads;
00017     int *evtset;
00018     int *ctrcode;
00019 
00020     nthreads = omp_get_max_threads(  );
00021     evtset = ( int * ) malloc( sizeof ( int ) * nthreads );
00022     ctrcode = ( int * ) malloc( sizeof ( int ) * nthreads );
00023 
00024     tests_quiet( argc, argv );  /* Set TESTS_QUIET variable */
00025 
00026     ret = PAPI_library_init( PAPI_VER_CURRENT );
00027     if ( ret != PAPI_VER_CURRENT && ret > 0 ) {
00028         fprintf( stderr, "PAPI library version mismatch '%s'\n",
00029                  PAPI_strerror( ret ) );
00030         exit( 1 );
00031     }
00032 
00033     if ( ret < 0 ) {
00034         fprintf( stderr, "PAPI initialization error '%s'\n",
00035                  PAPI_strerror( ret ) );
00036         exit( 1 );
00037     }
00038 
00039     if ( ( ret =
00040            PAPI_thread_init( ( unsigned long ( * )( void ) ) pthread_self ) ) !=
00041          PAPI_OK ) {
00042         fprintf( stderr, "PAPI thread initialization error '%s'\n",
00043                  PAPI_strerror( ret ) );
00044         exit( 1 );
00045     }
00046 
00047     for ( i = 0; i < nthreads; i++ ) {
00048         evtset[i] = PAPI_NULL;
00049 
00050         if ( ( ret = PAPI_event_name_to_code( "PAPI_TOT_INS", &ctrcode[i] ) )
00051              != PAPI_OK ) {
00052             fprintf( stderr, "PAPI evt-name-to-code error '%s'\n",
00053                      PAPI_strerror( ret ) );
00054         }
00055 
00056     }
00057 
00058     for ( i = 0; i < NITER; i++ ) {
00059 #pragma omp parallel
00060         {
00061             int tid;
00062             int pid;
00063             tid = omp_get_thread_num(  );
00064 
00065             pid = pthread_self(  );
00066 
00067             if ( ( ret = PAPI_register_thread(  ) ) != PAPI_OK ) {
00068                 if ( !TESTS_QUIET ) {
00069                     fprintf( stderr,
00070                              "[%5d] Error in register thread (tid=%d pid=%d) '%s'\n",
00071                              i, tid, pid, PAPI_strerror( ret ) );
00072                     test_fail( __FILE__, __LINE__, "omptough", 1 );
00073                 }
00074             }
00075 
00076             evtset[tid] = PAPI_NULL;
00077             if ( ( ret = PAPI_create_eventset( &( evtset[tid] ) ) ) != PAPI_OK ) {
00078                 if ( !TESTS_QUIET ) {
00079                     fprintf( stderr,
00080                              "[%5d] Error creating eventset (tid=%d pid=%d) '%s'\n",
00081                              i, tid, pid, PAPI_strerror( ret ) );
00082                     test_fail( __FILE__, __LINE__, "omptough", 1 );
00083                 }
00084             }
00085 
00086 
00087             if ( ( ret =
00088                    PAPI_destroy_eventset( &( evtset[tid] ) ) ) != PAPI_OK ) {
00089                 if ( !TESTS_QUIET ) {
00090                     fprintf( stderr,
00091                              "[%5d] Error destroying eventset (tid=%d pid=%d) '%s'\n",
00092                              i, tid, pid, PAPI_strerror( ret ) );
00093                     evtset[tid] = PAPI_NULL;
00094                     test_fail( __FILE__, __LINE__, "omptough", 1 );
00095                 }
00096             }
00097 
00098             if ( ( ret = PAPI_unregister_thread(  ) ) != PAPI_OK ) {
00099                 if ( !TESTS_QUIET ) {
00100                     fprintf( stderr,
00101                              "[%5d] Error in unregister thread (tid=%d pid=%d) ret='%s'\n",
00102                              i, tid, pid, PAPI_strerror( ret ) );
00103                     test_fail( __FILE__, __LINE__, "omptough", 1 );
00104                 }
00105             }
00106         }
00107     }
00108     test_pass( __FILE__, NULL, 0 );
00109     exit( 1 );
00110 }
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines