Я пытаюсь смоделировать 5 этап конвейера. Я сохранил все инструкции в структуре.
(в основном делается со стадии ликскального анализа)
например:
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 ++?
Похоже, вы просто хотите добавить элемент в начале массива на каждом временном шаге, таким образом перемещая уже существующие элементы массива на один вправо. Вы можете избежать O(n**2)
опс как это
int& p_at_time(int index, int time_moment) {
return &p[time_moment-index+1];
}
== I[1]
)Других решений пока нет …