在浑浑噩噩之中讲完了和乱序执行相关的几个逻辑单元,回过头才发现,这哪是在畅想,这根本是在上课,也难怪没人讨论了,小小的反省一下,后面尽量少讲原理多瞎猜,反正都是扯淡
书接上回,接下来就是执行管线了。目前已知的信息表示LA664可能存在整数管线、访存管线、浮点向量管线各4条,正好是6发射的2倍,非常合理且优雅,我本能的选择相信。
其中4条整数管线应该继承自LA464,但是否是龙芯之前传统的对称设计就无法确定了。根据之前龙芯介绍二进制翻译进展情况的某个视频中,提到某些二进制翻译加速指令只能在某条管线上执行,导致翻译效率无法继续提高。而根据老的LoongISA二进制翻译加速指令,推测具有继承关系的LA二进制翻译加速指令中,除了少数处理X87模式的指令以外,其他大多数应该都是整数指令。所以可能LA464的整数管线中只有1条可以执行二进制翻译加速指令,这也侧面证明了LA464的整数管线并不是类似GS464E的对称设计。当然也不排除是二进制翻译加速指令中的浮点部分只能跑在指定的浮点管线上,毕竟之前龙芯的人曾提出过开启软浮点提升二进制反应的兼容性的方案。不管如何,我LA664的面积还要小于LA464,所以我猜测LA664的整数管线极大的概率会采用非对称设计。具体的分配上,考虑到为同时多线程提供足够的执行单元,应该会以2条为1组,4条形成2组,2组之间对称设计。每组内有1条只能执行所有延迟为1个周期的整数指令,另1条能执行除分支以外的所有整数指令。这样相当于每周期最多4个加或2个乘+2个分支,高延迟的乘除法计算并不会对分支指令造成因结构相关所引起的流水线冲突,使分支指令可以尽早发射执行。结合独立于ROB的BRQ,可在分支指令执行完成时实现分支预测错误后对流水线的精准刷新,使分支指令的提前发射执行具有减少性能损失的意义。而二进制翻译指令中的整数部分,基本都是与设置EFLAGS寄存器相关的,并不需要复杂的运算,但却有按照EFLAGS寄存器的值进行循环或跳转这种分支指令,所以如果不是4条整数执行管线都可以执行的话,应该会和有分支单元的在同一条执行管线中。
书接上回,接下来就是执行管线了。目前已知的信息表示LA664可能存在整数管线、访存管线、浮点向量管线各4条,正好是6发射的2倍,非常合理且优雅,我本能的选择相信。
其中4条整数管线应该继承自LA464,但是否是龙芯之前传统的对称设计就无法确定了。根据之前龙芯介绍二进制翻译进展情况的某个视频中,提到某些二进制翻译加速指令只能在某条管线上执行,导致翻译效率无法继续提高。而根据老的LoongISA二进制翻译加速指令,推测具有继承关系的LA二进制翻译加速指令中,除了少数处理X87模式的指令以外,其他大多数应该都是整数指令。所以可能LA464的整数管线中只有1条可以执行二进制翻译加速指令,这也侧面证明了LA464的整数管线并不是类似GS464E的对称设计。当然也不排除是二进制翻译加速指令中的浮点部分只能跑在指定的浮点管线上,毕竟之前龙芯的人曾提出过开启软浮点提升二进制反应的兼容性的方案。不管如何,我LA664的面积还要小于LA464,所以我猜测LA664的整数管线极大的概率会采用非对称设计。具体的分配上,考虑到为同时多线程提供足够的执行单元,应该会以2条为1组,4条形成2组,2组之间对称设计。每组内有1条只能执行所有延迟为1个周期的整数指令,另1条能执行除分支以外的所有整数指令。这样相当于每周期最多4个加或2个乘+2个分支,高延迟的乘除法计算并不会对分支指令造成因结构相关所引起的流水线冲突,使分支指令可以尽早发射执行。结合独立于ROB的BRQ,可在分支指令执行完成时实现分支预测错误后对流水线的精准刷新,使分支指令的提前发射执行具有减少性能损失的意义。而二进制翻译指令中的整数部分,基本都是与设置EFLAGS寄存器相关的,并不需要复杂的运算,但却有按照EFLAGS寄存器的值进行循环或跳转这种分支指令,所以如果不是4条整数执行管线都可以执行的话,应该会和有分支单元的在同一条执行管线中。