void check_heartbeat(void){ if(pipeline->stat_num_cycle - last_hbeat_cycle < HEARTBEAT_CYCLES){ return; } printf("."); fflush(stdout); // check for deadlock if(last_hbeat_inst == pipeline->stat_retired_inst){ printf("No committed instructions in %u cycles.\n", HEARTBEAT_CYCLES); die_message("Pipeline is Deadlocked. Dying\n"); } last_hbeat_cycle=pipeline->stat_num_cycle; last_hbeat_inst = pipeline->stat_retired_inst; // print a newline and CPI every so often if(pipeline->stat_num_cycle - last_hbeat_line >= 50*HEARTBEAT_CYCLES){ printf("\n(Inst:%8u\tCycle:%8u\tCPI:%6.3f)\t", (uint32_t)pipeline->stat_retired_inst, (uint32_t)pipeline->stat_num_cycle, (double)(pipeline->stat_num_cycle)/(double)(pipeline->stat_retired_inst+1)); last_hbeat_line=pipeline->stat_num_cycle; } }
void core_init_trace(Core *c) { char command_string[512]; sprintf(command_string,"gunzip -c %s", c->trace_fname); if ((c->trace = popen(command_string, "r")) == NULL){ printf("Command string is %s\n", command_string); die_message("Unable to open the file with gzip option \n"); } }
int main(int argc, char *argv[]) { int ii; FILE *tr_file; char tr_filename[1024]; char cmd_string[256]; if(argc < 1) { die_message("Must Provide a Trace File"); } //-------------------------------------------------------------------- // -- Get params from command line //-------------------------------------------------------------------- for ( ii = 1; ii < argc; ii++) { if (argv[ii][0] == '-') { if (!strcmp(argv[ii], "-h") || !strcmp(argv[ii], "-help")) { die_usage(); } else if (!strcmp(argv[ii], "-pipewidth")) { if (ii < argc - 1) { PIPE_WIDTH = atoi(argv[ii+1]); ii += 1; } } else if (!strcmp(argv[ii], "-schedpolicy")) { if (ii < argc - 1) { SCHED_POLICY = atoi(argv[ii+1]); ii += 1; } } else if (!strcmp(argv[ii], "-loadlatency")) { if (ii < argc - 1) { LOAD_EXE_CYCLES = atoi(argv[ii+1]); ii += 1; } } } else { strcpy(tr_filename, argv[ii]); } } // ------- Open Trace File ------------------------------------------- sprintf(cmd_string,"gunzip -c %s", tr_filename); if ((tr_file = popen(cmd_string, "r")) == NULL){ printf("Command string is %s\n", cmd_string); die_message("Unable to open the trace file with gzip option \n") ; } else { printf("Opened file with command: %s \n", cmd_string); } // ------- Pipeline Initialization & Execution ---------------------- pipeline = pipe_init(tr_file); printf("\n%48s", ""); while(!pipeline->halt) { pipe_cycle(pipeline); check_heartbeat(); } // ------- Print Statistics------------------------------------------ print_stats(); fclose(tr_file); return 0; }