int main(int argc, char **argv) { uint32_t pmuserenr; MRC_PMU(pmuserenr, PMUSERENR); if (!pmuserenr) { fprintf(stderr, "User access to performance counters disabled, exiting\n"); return 1; } int cpu = getcpu(); printf("Executing CPU: %d\n", cpu); // Set CPU affinity to make sure that the following code is executed on the // CPU printed above. setaff(cpu); enable_pmn(); uint32_t pmcr, pmceid0, pmceid1; MRC_PMU(pmcr, PMCR); MRC_PMU(pmceid0, PMCEID0); MRC_PMU(pmceid1, PMCEID1); printf("PMCR: %"PRIx32"\n", pmcr); printf("PMCEID0: %"PRIx32"\n", pmceid0); printf("PMCEID1: %"PRIx32"\n", pmceid1); set_pmn(0, CPU_CYCLES); set_pmn(1, L1D_CACHE_LD); set_pmn(2, L1D_CACHE_ST); reset_pmn(); reset_ccnt(); // do some fake work for (int i = 0; i < 50; i++) printf("."); uint32_t cycles, cpu_cycles, l1d_cache_ld, l1d_cache_st; MRC_PMU(cycles, PMCCNTR); cpu_cycles = read_pmn(0); l1d_cache_ld = read_pmn(1); l1d_cache_st = read_pmn(2); printf("\nCPU cycles: %"PRIu32"\n", cpu_cycles); printf("Cycle Count: %"PRIu32"\n", cycles); printf("Level 1 data cache access, read: %"PRIu32"\n", l1d_cache_ld); printf("Level 1 data cache access, write: %"PRIu32"\n", l1d_cache_st); return 0; }
void pmu_stop(void){ unsigned int cycle_count, overflow, counter0, counter1, counter2, counter3, counter4, counter5; disable_ccnt(); // Stop CCNT disable_pmn(0); // Stop counter 0 disable_pmn(1); // Stop counter 1 disable_pmn(2); // Stop counter 2 disable_pmn(3); // Stop counter 3 disable_pmn(4); // Stop counter 4 disable_pmn(5); // Stop counter 5 counter0 = read_pmn(0); // Read counter 0 counter1 = read_pmn(1); // Read counter 1 counter2 = read_pmn(2); // Read counter 2 counter3 = read_pmn(3); // Read counter 3 counter4 = read_pmn(4); // Read counter 4 counter5 = read_pmn(5); // Read counter 5 cycle_count = read_ccnt(); // Read CCNT overflow=read_flags(); //Check for overflow flag printf("%d\t%d %d %d %d %d %d\n", cycle_count/667, counter0/667, counter1/667, counter2/667 ,counter3/667,counter4/667,counter5/667); if(overflow) printf("Warning Overflow Occured\n"); // printf("Overflow: %d, Cycle Count: %d \n\n", overflow,cycle_count); };