/* This is the default screen, it uses only target-independent counters defined in the Linux header file. */ static screen_t* default_screen(const struct option* options) { screen_t* s = new_screen("default", "Screen by default", 1); /* setup counters */ add_counter_by_value(s, "CYCLE", PERF_COUNT_HW_CPU_CYCLES, PERF_TYPE_HARDWARE); add_counter_by_value(s, "INSN", PERF_COUNT_HW_INSTRUCTIONS, PERF_TYPE_HARDWARE); add_counter_by_value(s, "MISS", PERF_COUNT_HW_CACHE_MISSES, PERF_TYPE_HARDWARE); add_counter_by_value(s, "BR", PERF_COUNT_HW_BRANCH_MISSES, PERF_TYPE_HARDWARE); add_counter_by_value(s, "BUS", PERF_COUNT_HW_BUS_CYCLES, PERF_TYPE_HARDWARE); /* add columns */ add_column(s, " %CPU", "%5.1f", "Total CPU usage", "CPU_TOT"); add_column(s, " %SYS", "%5.1f", "System CPU usage", "CPU_SYS"); add_column(s, " P", " %2.0f", "Processor where last seen", "PROC_ID"); if (!options->show_threads) add_column(s, " #TH", " %2.0f", "Number of threads in process", "NUM_THREADS"); add_column(s, " Mcycle", "%8.2f", "Cycles (millions)", "delta(CYCLE) / 1e6"); add_column(s, " Minstr", "%8.2f", "Instructions (millions)", "delta(INSN) / 1e6"); add_column(s, " IPC", " %4.2f", "Executed instructions per cycle", "delta(INSN)/delta(CYCLE)"); add_column(s, " %MISS", "%6.2f", "Cache miss per 100 instructions", "100*delta(MISS)/delta(INSN)"); add_column(s, " %BMIS", "%6.2f", "Mispredicted branches per 100 instructions", "100*delta(BR)/delta(INSN)"); add_column(s, " %BUS", "%5.1f", "Bus cycles per executed instruction", "delta(BUS)/delta(INSN)"); return s; }
void init() { screen = new_screen(); int x_pos = screen->max_x/2; int y_pos = screen->max_y/2; snake = new_snake(x_pos, y_pos); move_list = new_move_list(); int i; food_list = new_food_list(); for(i = 0; i < FOOD_COUNT; i++) { add_food(screen->max_x, screen->max_y, food_list); } }
static screen_t* branch_pred_screen() { screen_t* s = new_screen("branch", "Branch prediction statistics", 1); /* setup counters */ add_counter_by_value(s, "INSTR", PERF_COUNT_HW_INSTRUCTIONS, PERF_TYPE_HARDWARE); add_counter_by_value(s, "BR", PERF_COUNT_HW_BRANCH_INSTRUCTIONS, PERF_TYPE_HARDWARE); add_counter_by_value(s, "BMISS", PERF_COUNT_HW_BRANCH_MISSES, PERF_TYPE_HARDWARE); /* add columns */ add_column(s, " %CPU", " %5.1f", "CPU usage", "CPU_TOT"); add_column(s, " %MIS/I", " %6.2f", "Mispredictions per 100 instructions", "100 * delta(BMISS) / delta(INSTR)"); add_column(s, " %MISP", " %5.2f", "Mispredictions per 100 branch instructions", "100 * delta(BMISS) / delta(BR)"); add_column(s, " %BR/I", " %5.1f", "Proportion of branch instructions", "100 * delta(BR) / delta(INSTR)"); return s; }
int main(int argc, char *argv[]) { signal(SIGINT, sighandler); if (argc > 1) { #ifdef DEBUG print_debug("Got file argument: %s", argv[1]); #endif FILE *file = fopen(argv[1], "r"); if (file == NULL) { print_error("Could not open file for reading: %s", argv[1]); exit(EXIT_FAILURE); } struct matrix *mat = new_matrix(4, 1); screen s = new_screen(); struct matrix *trans_mat = new_matrix(4,4); synchronize_variables(file, trans_mat, mat, s); parse_file(1); free_variables(); exit(EXIT_SUCCESS); } printf("Usage: ./main [script-file]\n"); return 0; }