PAPI 7.1.0.0
Loading...
Searching...
No Matches
overflow3_pthreads.c File Reference
Include dependency graph for overflow3_pthreads.c:

Go to the source code of this file.

Functions

void * thread_fn (void *dummy)
 
void handler (int EventSet, void *address, long long overflow_vector, void *context)
 
void mainloop (int arg)
 
int main (int argc, char **argv)
 

Variables

int total = 0
 

Function Documentation

◆ handler()

void handler ( int  EventSet,
void *  address,
long long  overflow_vector,
void *  context 
)

Definition at line 34 of file overflow3_pthreads.c.

35{
36 ( void ) overflow_vector;
37 ( void ) context;
38 if ( !TESTS_QUIET ) {
39 fprintf( stderr, "handler(%d ) Overflow at %p, thread %#lx!\n",
40 EventSet, address, PAPI_thread_id( ) );
41 }
42 total++;
43}
Get the thread identifier of the current thread.
static int EventSet
Definition: init_fini.c:8
int TESTS_QUIET
Definition: test_utils.c:18
int total
FILE * stderr
Here is the caller graph for this function:

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 120 of file overflow3_pthreads.c.

121{
122 int i, rc, retval;
124 pthread_attr_t attr;
125 int quiet;
126
127 /* Set TESTS_QUIET variable */
128 quiet=tests_quiet( argc, argv );
129
130 if (!quiet) {
131 printf( "%s: Using %d threads\n\n", argv[0], NUM_THREADS );
132 printf( "Does non-threaded overflow work "
133 "with extraneous threads present?\n" );
134 }
135
136 pthread_attr_init( &attr );
137#ifdef PTHREAD_CREATE_UNDETACHED
138 pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_UNDETACHED );
139#endif
140#ifdef PTHREAD_SCOPE_SYSTEM
141 retval = pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM );
142 if ( retval != 0 )
143 test_skip( __FILE__, __LINE__, "pthread_attr_setscope", retval );
144#endif
145
146 for ( i = 0; i < NUM_THREADS; i++ ) {
147 rc = pthread_create( &id[i], &attr, thread_fn, NULL );
148 if ( rc )
149 test_fail( __FILE__, __LINE__, "pthread_create", rc );
150 }
151 pthread_attr_destroy( &attr );
152
154
155 test_pass( __FILE__ );
156
157 return 0;
158}
int i
#define NUM_ITERS
Definition: multiplex.c:19
void * thread_fn(void *dummy)
void mainloop(int arg)
unsigned long int pthread_t
int tests_quiet(int argc, char **argv)
Definition: test_utils.c:376
void PAPI_NORETURN test_fail(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:491
void PAPI_NORETURN test_pass(const char *filename)
Definition: test_utils.c:432
void PAPI_NORETURN test_skip(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:584
rc
Definition: pscanf.h:23
#define NUM_THREADS
Definition: pthread_hl.c:9
int quiet
Definition: rapl_overflow.c:19
int retval
Definition: zero_fork.c:53
Here is the call graph for this function:

◆ mainloop()

void mainloop ( int  arg)

Definition at line 46 of file overflow3_pthreads.c.

47{
48 int retval, num_tests = 1;
49 int EventSet1 = PAPI_NULL;
50 int mask1 = 0x0;
51 int num_events1;
52 long long **values;
53 int PAPI_event;
55
56 ( void ) arg;
57
59 if (retval != PAPI_VER_CURRENT ) {
60 test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
61 }
62
63 /* add PAPI_TOT_CYC and one of the events in PAPI_FP_INS, PAPI_FP_OPS or
64 PAPI_TOT_INS, depending on the availability of the event on the
65 platform */
67 &PAPI_event, &mask1 );
68
69 if (num_events1==0) {
70 if (!TESTS_QUIET) printf("Trouble creating events\n");
71 test_skip(__FILE__,__LINE__,"Creating events",0);
72 }
73
75
76 if ( ( retval =
78 handler ) ) != PAPI_OK )
79 test_fail( __FILE__, __LINE__, "PAPI_overflow", retval );
80
81 do_stuff( );
82
83 if ( ( retval = PAPI_start( EventSet1 ) ) != PAPI_OK )
84 test_fail( __FILE__, __LINE__, "PAPI_start", retval );
85
86 do_stuff( );
87
88 if ( ( retval = PAPI_stop( EventSet1, values[0] ) ) != PAPI_OK )
89 test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
90
91 /* clear the papi_overflow event */
92 if ( ( retval =
93 PAPI_overflow( EventSet1, PAPI_event, 0, 0, NULL ) ) != PAPI_OK )
94 test_fail( __FILE__, __LINE__, "PAPI_overflow", retval );
95
96 if ( ( retval =
98 test_fail( __FILE__, __LINE__, "PAPI_event_code_to_name", retval );
99
100 if ( !TESTS_QUIET ) {
101 printf( "Thread %#x %s : \t%lld\n", ( int ) pthread_self( ),
102 event_name, ( values[0] )[0] );
103 printf( "Thread %#x PAPI_TOT_CYC: \t%lld\n", ( int ) pthread_self( ),
104 ( values[0] )[1] );
105 }
106
108 if ( retval != PAPI_OK )
109 test_fail( __FILE__, __LINE__, "PAPI_cleanup_eventset", retval );
110
112 if ( retval != PAPI_OK )
113 test_fail( __FILE__, __LINE__, "PAPI_destroy_eventset", retval );
114
116 PAPI_shutdown( );
117}
Empty and destroy an EventSet.
Empty and destroy an EventSet.
Convert a numeric hardware event code to a name.
initialize the PAPI library.
Set up an event set to begin registering overflows.
Finish using PAPI and free all related resources.
Start counting hardware events in an event set.
Stop counting hardware events in an event set.
int PAPI_event[2]
Definition: data_range.c:30
char event_name[2][PAPI_MAX_STR_LEN]
Definition: data_range.c:29
void do_stuff(void)
Definition: do_loops.c:256
#define THRESHOLD
Definition: earprofile.c:37
#define PAPI_VER_CURRENT
Definition: f90papi.h:54
#define PAPI_OK
Definition: f90papi.h:73
#define PAPI_NULL
Definition: f90papi.h:78
#define PAPI_MAX_STR_LEN
Definition: f90papi.h:77
static long long values[NUM_EVENTS]
Definition: init_fini.c:10
void handler(int EventSet, void *address, long long overflow_vector, void *context)
int add_two_nonderived_events(int *num_events, int *papi_event, int *mask)
Definition: test_utils.c:671
void free_test_space(long long **values, int num_tests)
Definition: test_utils.c:70
long long ** allocate_test_space(int num_tests, int num_events)
Definition: test_utils.c:46
int EventSet1
Definition: zero_fork.c:47
int num_events1
Definition: zero_fork.c:49
int mask1
Definition: zero_fork.c:48
int num_tests
Definition: zero_fork.c:53
Here is the call graph for this function:
Here is the caller graph for this function:

◆ thread_fn()

void * thread_fn ( void *  dummy)

Definition at line 24 of file overflow3_pthreads.c.

25{
26 ( void ) dummy;
27 while ( 1 ) {
28 do_stuff( );
29 }
30 return ( NULL );
31}
void dummy(void *array)
Definition: do_loops.c:306
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ total

int total = 0

Definition at line 21 of file overflow3_pthreads.c.