3

我正在尝试模拟 5 阶段的管道。我已将所有指令保存到一个结构中。(基本上完成了 lixcal 分析阶段)

例如:

ADD R1 R2 R3 // R1 = R2+ R3 ... struct pipe{ int pc, string instruction , int r1, int r2....}

现在 ifp[i]是流水线的阶段之一,并且(p[1]可能是pc=pc+1I[i]是指令,(I[1]可能是ADD R1 R2 R3

我想做的是

at t=1 : p[1] = I[1]

at t=2 :p[2] = I[1], p[1] = I[2]

at t=3 :p[3] = I[1], p[2] = I[2], p[1] = I[3]

at t=4 :p[4] = I[1], p[3] = I[2], p[2] = I[3], p[1] = I[4]

......到目前为止,我正在使用 c++。任何人怎么能用 c++ 表示这个循环?

4

1 回答 1

3

看起来您只想在每个时间步长在数组的前面添加一个元素,从而将已经存在的数组元素向右移动一个。你可以避免做这样O(n**2)的操作

int& p_at_time(int index, int time_moment) {
    return &p[time_moment-index+1];
}
  • 并且在 t=1:p_at_time(1,1) = I[1];
  • 在 t=2: p_at_time(1,2) = I[2], (p_at_time(2,2) 已经== I[1])
  • 在 t=3:p_at_time(1,3) = I[3],(p_at_time(2,3) 和 p_at_time(3,3) 分别具有值 I[2] 和 I[1])
于 2013-05-05T16:58:07.307 回答