|
Packit Service |
a1973e |
#include <stdio.h>
|
|
Packit Service |
a1973e |
#include <stdlib.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 "clockcore.h"
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
void *
|
|
Packit Service |
a1973e |
pthread_main( void *arg )
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
( void ) arg;
|
|
Packit Service |
a1973e |
int retval = PAPI_register_thread( );
|
|
Packit Service |
a1973e |
if ( retval != PAPI_OK ) {
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_register_thread", retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
retval=clockcore( TESTS_QUIET );
|
|
Packit Service |
a1973e |
if (retval != PAPI_OK ) {
|
|
Packit Service |
a1973e |
test_fail(__FILE__, __LINE__, "clockcore failure", retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
retval = PAPI_unregister_thread( );
|
|
Packit Service |
a1973e |
if ( retval != PAPI_OK ) {
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_unregister_thread", retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
return NULL;
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
int
|
|
Packit Service |
a1973e |
main( int argc, char **argv )
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
pthread_t t1, t2, t3, t4;
|
|
Packit Service |
a1973e |
pthread_attr_t attr;
|
|
Packit Service |
a1973e |
int retval;
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* Set TESTS_QUIET variable */
|
|
Packit Service |
a1973e |
tests_quiet( argc, argv );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if (( retval = PAPI_library_init( PAPI_VER_CURRENT)) != PAPI_VER_CURRENT) {
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_library_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 |
}
|
|
Packit Service |
a1973e |
else {
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_thread_init", retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if ( !TESTS_QUIET ) {
|
|
Packit Service |
a1973e |
printf( "Test case: Clock latency and resolution.\n" );
|
|
Packit Service |
a1973e |
printf( "Note: Virtual timers are proportional to # CPUs.\n" );
|
|
Packit Service |
a1973e |
printf( "------------------------------------------------\n" );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
pthread_attr_init( &attr );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#ifdef PTHREAD_CREATE_UNDETACHED
|
|
Packit Service |
a1973e |
pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_UNDETACHED );
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
|
|
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 |
}
|
|
Packit Service |
a1973e |
#endif
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if (pthread_create( &t1, &attr, pthread_main, NULL )) {
|
|
Packit Service |
a1973e |
test_fail(__FILE__, __LINE__, "cannot create thread", retval);
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if (pthread_create( &t2, &attr, pthread_main, NULL )) {
|
|
Packit Service |
a1973e |
test_fail(__FILE__, __LINE__, "cannot create thread", retval);
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if (pthread_create( &t3, &attr, pthread_main, NULL )) {
|
|
Packit Service |
a1973e |
test_fail(__FILE__, __LINE__, "cannot create thread", retval);
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if (pthread_create( &t4, &attr, pthread_main, NULL )) {
|
|
Packit Service |
a1973e |
test_fail(__FILE__, __LINE__, "cannot create thread", retval);
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
pthread_main( NULL );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
pthread_join( t1, NULL );
|
|
Packit Service |
a1973e |
pthread_join( t2, NULL );
|
|
Packit Service |
a1973e |
pthread_join( t3, NULL );
|
|
Packit Service |
a1973e |
pthread_join( t4, NULL );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
test_pass( __FILE__ );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
return 0;
|
|
Packit Service |
a1973e |
}
|