Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c+中模拟5级管线+;?_C++_C_Pipeline_Instruction Set - Fatal编程技术网

C++ 如何在c+中模拟5级管线+;?

C++ 如何在c+中模拟5级管线+;?,c++,c,pipeline,instruction-set,C++,C,Pipeline,Instruction Set,我试图模拟管道的5级。我已将所有指令保存到结构中。 (基本上在lixcal分析阶段完成) 例如: 现在如果p[i]是管道的一个阶段,(p[1]可以是pc=pc+1; I[I]是指令,(I[1]可以是addr1r2r3) 我想做的是 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

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

例如:

现在如果
p[i]
是管道的一个阶段,(
p[1]
可以是
pc=pc+1
I[I]
是指令,(
I[1]
可以是
addr1r2r3

我想做的是

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++中,任何人都能代表这个循环?

< p>看起来你只想在每个时间步在数组的前面添加一个元素,从而将已经存在的数组元素移到右边。你可以避免做<代码> O(n** 2)< /COD>这样的OP> < /P>
int& p_at_time(int index, int time_moment) {
    return &p[time_moment-index+1];
}
  • 在t=1时:p_在时间(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]分别)

  • 换句话说,你想创建一个像手臂一样的虚拟机?@ KytoFoe:是的,我不理解你的问题。你在你的问题中描述了算法,那么你需要什么?如何在C++中表示上面的循环。
    int& p_at_time(int index, int time_moment) {
        return &p[time_moment-index+1];
    }