/*----------------------------------------------------------------------------*/ /* * Performance-Monitoring Counters Library, for Intel/AMD Processors and Linux * Author: Don Heller, dheller@scl.ameslab.gov * Last revised: 19 January 2001 */ /*----------------------------------------------------------------------------*/ /* measure this code by direct access */ int pmc_main(int argc, char * argv[]); #define TRIALS 10 /*----------------------------------------------------------------------------*/ #include /*----------------------------------------------------------------------------*/ int main(int argc, char * argv[]) { int status = RABBIT_NO_STATUS; pmc_control_t Ctl = pmc_control_null; int Argc = argc; char ** Argv = argv; int i,j,k, out, t; pmc_data_t t0, t1; /* initialize internal data structures, read command-line arguments */ if (pmc_getargs(stderr, argv[0], &Argc, &Argv, &Ctl) == FALSE) { exit(RABBIT_FAILURE); } /* remove the pmc options from the command line */ t = argc - (Argc + 1); for (i = 1; i <= Argc; i++) { argv[i] = argv[t + i]; } argc = Argc + 1; if (pmc_open(0) == FALSE) /* open /dev/pmc */ { exit(RABBIT_FAILURE); } /* for (out = 0; out < Ctl.num_counters; out++) { ... } */ for (i = 0, out = 0; i < Ctl.event_pairs; i++) { for (j = 0; j < Ctl.replication; j++, out++) { pmc_select(&Ctl.counters[out]); for (k = 0; k < TRIALS; k++) { pmc_read(&t0); status = pmc_main(argc, argv); pmc_read(&t1); pmc_accumulate(&Ctl.counters[out],&t1,&t0); } } } pmc_close(); /* close /dev/pmc */ pmc_print_results(argc, argv, &Ctl); /* ignore the return value */ exit(status); } /*----------------------------------------------------------------------------*/