172 int retval, retval_start, retval_stop;
176 int number_of_counters;
179 int dont_loop_forever;
180 long long totcyc, *
values = NULL;
181 long long *
array = NULL;
193 while ( (
c=getopt(argc, argv,
"hm:x:skt:") ) != -1 ) {
217 printf(
"This utility benchmarks the overhead of PAPI multiplexing\n");
218 printf(
"Warning! This can take a long time (many minutes) to run\n");
219 printf(
"The output goes to multiple .dat files in the current directory\n\n");
222 fprintf(stderr,
"Error! Min # of Events > Max # of Events");
232 fprintf(stderr,
"Error! PAPI_library_init\n");
238 fprintf(stderr,
"Error! PAPI_set_debug\n");
244 fprintf(stderr,
"Error! PAPI_multiplex_init\n");
252 fprintf(stderr,
"Error! Kernel multiplexing is " 253 "not supported on this platform, bailing!\n");
259 fprintf(stderr,
"Error! PAPI_create_eventset\n");
265 fprintf(stderr,
"PAPI_create_eventset");
271 fprintf(stderr,
"PAPI_assign_eventset_component");
277 fprintf(stderr,
"PAPI_set_multiplex");
283 fprintf(stderr,
"PAPI_assign_eventset_component");
289 memset(&option,0x0,
sizeof(option));
297 fprintf(stderr,
"PAPI_set_opt");
302 fprintf(stderr,
"No tests to run.");
305 fprintf(stderr,
"Running test[s]\n");
307 fprintf(stderr,
"\tKernel multiplexing read\n");
309 fprintf(stderr,
"\tSoftware Multiplexing read\n");
316 for (number_of_counters = 0; number_of_counters <
options.
max; number_of_counters++) {
317 dont_loop_forever = 0;
324 dont_loop_forever < 512);
330 dont_loop_forever < 512);
332 if ( dont_loop_forever == 512 )
333 fprintf(stderr,
"I can't find %d events to count at once.",
options.
max);
335 Events[number_of_counters] = event;
344 for (number_of_counters =
options.
min; number_of_counters <
options.
max; number_of_counters++) {
348 fprintf(stderr,
"PAPI_add_event");
353 fprintf(stderr,
"PAPI_start");
357 fprintf(stderr,
"PAPI_stop");
367 if (retval_start || retval_stop)
368 fprintf(stderr,
"PAPI start/stop");
377 fprintf(stderr,
"PAPI_add_event");
382 fprintf(stderr,
"PAPI_start");
386 fprintf(stderr,
"PAPI_stop");
396 if (retval_start || retval_stop)
397 fprintf(stderr,
"PAPI start/stop");
404 do_output(
"papi_startstop.dat",
"Multiplexed PAPI_read()",
array, number_of_counters );
414 for (number_of_counters =
options.
min; number_of_counters <
options.
max; number_of_counters++) {
418 fprintf(stderr,
"PAPI_add_event");
423 fprintf(stderr,
"PAPI_start");
437 fprintf(stderr,
"PAPI_stop");
444 fprintf(stderr,
"PAPI_add_event");
449 fprintf(stderr,
"PAPI_start");
463 fprintf(stderr,
"PAPI_stop");
467 do_output(
"papi_read.dat",
"Multiplexed PAPI_read()",
array, number_of_counters );
479 for (number_of_counters =
options.
min; number_of_counters <
options.
max; number_of_counters++) {
483 fprintf(stderr,
"PAPI_add_event");
488 fprintf(stderr,
"PAPI_start");
506 fprintf(stderr,
"PAPI_stop");
513 fprintf(stderr,
"PAPI_add_event");
518 fprintf(stderr,
"PAPI_start");
530 fprintf(stderr,
"PAPI_stop");
541 do_output(
"papi_read_ts.dat",
"Multiplexed PAPI_read_ts()",
array, number_of_counters );
552 for (number_of_counters =
options.
min; number_of_counters <
options.
max; number_of_counters++) {
556 fprintf(stderr,
"PAPI_add_event");
561 fprintf(stderr,
"PAPI_start");
575 fprintf(stderr,
"PAPI_stop");
583 fprintf(stderr,
"PAPI_add_event");
588 fprintf(stderr,
"PAPI_start");
602 fprintf(stderr,
"PAPI_stop");
606 do_output(
"papi_accum.dat",
"Multiplexed PAPI_accum()",
array, number_of_counters );
616 for (number_of_counters =
options.
min; number_of_counters <
options.
max; number_of_counters++) {
620 fprintf(stderr,
"PAPI_add_event");
625 fprintf(stderr,
"PAPI_start");
639 fprintf(stderr,
"PAPI_stop");
646 fprintf(stderr,
"PAPI_add_event");
651 fprintf(stderr,
"PAPI_start");
665 fprintf(stderr,
"PAPI_stop");
670 do_output(
"papi_reset.dat",
"Multiplexed PAPI_reset()",
array, number_of_counters );
int PAPI_stop(int EventSet, long long *values)
const PAPI_component_info_t * PAPI_get_component_info(int cidx)
int PAPI_add_event(int EventSet, int EventCode)
int PAPI_reset(int EventSet)
static int Events[NUM_EVENTS]
#define PAPI_MULTIPLEX_FORCE_SW
static double array[ARRAYSIZE]
int PAPI_enum_event(int *EventCode, int modifier)
A pointer to the following is passed to PAPI_set/get_opt()
int PAPI_set_opt(int option, PAPI_option_t *ptr)
int PAPI_accum(int EventSet, long long *values)
int PAPI_library_init(int version)
int PAPI_get_opt(int option, PAPI_option_t *ptr)
void do_output(char *fn, char *message, long long *array, int noc)
unsigned int kernel_multiplex
PAPI_multiplex_option_t multiplex
int PAPI_cleanup_eventset(int EventSet)
int PAPI_assign_eventset_component(int EventSet, int cidx)
int PAPI_create_eventset(int *EventSet)
int PAPI_multiplex_init(void)
int PAPI_read_ts(int EventSet, long long *values, long long *cycles)
void init_test(int SoftwareMPX, int KernelMPX, int *Events)
int PAPI_set_multiplex(int EventSet)
long long PAPI_get_real_cyc(void)
int PAPI_read(int EventSet, long long *values)
int PAPI_start(int EventSet)
static long long values[NUM_EVENTS]
PAPI_itimer_option_t itimer
int PAPI_set_debug(int level)