FAQ

  • How to debug a branch predictor?
  • Where do we put the following message?
     
    if (KNOB_DEBUG_PRINT.Value()) {
            cout << "ID_STAGE OP " << op->inst_id <<  " is scheduled at cycle " << cycle_count << endl; }
    
    When we insert ops into the scheduler or when instructions are removed from the scheduler?
  • Will there be any pipeline modifications in the later assignment?
  • I'm not maintaining the valid bit in the register file that you provided for programming assignment #1. Is it OK?
  • In a given time, can more than KNOB_ISSUE_WIDTH instructions inside EX stage? e.g.) KNOB_ISSUE_WIDTH is 3. At cycle 1, 3 instructions are started to be executed with a latency 2. Can the processor execute 3 more instructions at cycle 2?
  • What is the maximum value of KNOB_GHR_LENGTH?
  • FE latch already has one instruction and KNOB_ISSUE_WIDTH is 4. Can the processor fetch 3 more instructions or does it stall at that moment?
  • Rob is full but FE latch has a space. Can the processor fetch more instructions until FE latch is full or should it stop fetching at that moment?
  • Can we send more instructions into EX latch or MEM latch then ISSUE_WIDTH?
  • What if more than ISSUE_WIDTH instructions are finished due to different execution latency. Can all instructions broadcast the results?
  • Do we have to generate the exact IPC values?
  • When does the processor insert instructions inside the scheduler and when does it remove instructions?
  • Can we fetch instructions after a branch if a branch is correctly predicted ?
  • what should be the init value for 2-bit counters in the gshare predictor?
  • How can we know a branch's direction?


  • Do we limit the number of physical register?
  • We use a branch predictor for conditional branches. How about other control flow instructions?


  • When do we know an instruction is a branch or not? at Decode stage or at Fetch stage? Do we have to model a BTB?


  • Will you check pipeline latches to grade our homework?

  • When does a store instruction actually write a value to the memory system? The MEM stage or the WB stage?


  • Do we need to check memory dependences?

  • When should the processor update the register file?

  • Do we need to collect control hazard and data hazard for this assignment?