我正在尝试模拟5阶段的管道。我已将所有指令保存到结构中。 (基本上完成了lixcal分析阶段)
例如:
ADD R1 R2 R3 // R1 = R2+ R3 ... struct pipe{ int pc, string instruction , int r1, int r2....}
现在如果p[i]
是管道阶段之一,(p[1]
可能是pc=pc+1
;
I[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 ++表示这个循环?
答案 0 :(得分:3)
看起来你只想在每个时间步长处在数组的前面添加一个元素,从而将已经存在的数组元素向右移动一个。你可以避免像这样做O(n**2)
ops
int& p_at_time(int index, int time_moment) {
return &p[time_moment-index+1];
}
== I[1]
)