Optimization 在pipline中处理数据依赖关系

Optimization 在pipline中处理数据依赖关系,optimization,pipelining,y86,Optimization,Pipelining,Y86,如果您有上面的程序集,一般的5阶段管道看起来像下面这样,但是由于存在数据依赖性,第一条指令在第5阶段之前不会存储结果,因此第二条指令无法开始获取结果。通过插入NOP指令,您将如何等待循环结束 mov $10, %eax add $2, %eax mov $4, %ebx mov $5, %ecx add $1, %ebx add $1, %ecx add %ecx, %eax add %ebx, %eax 编辑不确定这是否正确,但以下是我的想法: Instruction Cycle 1 2

如果您有上面的程序集,一般的5阶段管道看起来像下面这样,但是由于存在数据依赖性,第一条指令在第5阶段之前不会存储结果,因此第二条指令无法开始获取结果。通过插入NOP指令,您将如何等待循环结束

mov $10, %eax
add $2, %eax
mov $4, %ebx
mov $5, %ecx
add $1, %ebx
add $1, %ecx
add %ecx, %eax
add %ebx, %eax
编辑不确定这是否正确,但以下是我的想法:

Instruction Cycle 1  2  3   4   5   6   7
mov $10, %eax     IF ID EX  MEM WB      
add $2, %eax         IF ID  EX  MEM WB  
mov $4, %ebx            IF  ID  EX  MEM WB

在这里似乎使用的
x86
体系结构上,处理器本身会检测到此类依赖项并在必要时暂停插入,程序员或编译器无需插入显式
NOP
。事实上,现代无序实现将进一步寻找插入的额外工作,而不是停滞。您是否在问,在传统的5级流水线处理器实现中,这种检测的逻辑将如何实现,或者编译器如何针对需要手动流水线跟踪的体系结构(如在延迟槽中)是否会检测到暂停的必要性?我想问的是,为了适应数据延迟,您会在哪里插入NOP指令。我认为您所针对的处理器缺少依赖项跟踪,并且需要编译器帮助进行调度?在指令中,给定序列中唯一的依赖类型是在执行和写回阶段之间,因此,如果在下一条指令中使用结果,则需要两个暂停,如果在前面使用两条指令,则需要一个暂停。无论如何,除非你真的必须插入NOP,否则你不应该插入NOP。在这种情况下,您可以通过重新排序序列来消除气泡。在任何情况下,您都需要小心。没有标准化的5级流水线,只有一个粗糙的经典5级RISC流水线,每台机器的细节可能也确实不同。在继续之前,请务必仔细阅读您的体系结构文档,最重要的是在调试器中运行实验以查看结果。
                1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
mov $10, %eax   F   D   E   M   W
NOP                 F   D   E   M   W
NOP                     F   D   E   M   W
NOP                         F   D   E   M   W
add $2, %eax                    F   D   E   M   W
mov $4, %ebx                        F   D   E   M   W
mov $5, %ecx                            F   D   E   M   W
NOP                                         F   D   E   M   W
NOP                                             F   D   E   M   W
add $1, %ebx                                        F   D   E   M   W
add $1, %ecx                                            F   D   E   M   W
NOP                                                         F   D   E   M   W
NOP                                                             F   D   E   M   W
NOP                                                                 F   D   E   M   W
add %ecx, %eax                                                          F   D   E   M   W
add %ebx, %eax                                                              F   D   E   M   W