Пример #1
0
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;
}
Пример #2
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);
};