assembly - 处理两个分支结果的管道处理器设计

标签 assembly x86 cpu-architecture branch-prediction micro-architecture

所以我最近在研究Pipeline处理器架构,主要是在Y86-64的背景下。在那里,我刚刚读到了有关分支预测的内容,以及如何在分支预测错误的情况下,必须刷新获取、解码和执行管道寄存器,并处理新的正确分支指令。

我想知道是否有可能实际设计一个硬件,可能有两组流水线寄存器,这样当它获取条件指令时,它开始并行处理两个结果,更新一组寄存器,就好像分支将不会发生,而另一个则设置为好像会发生分支。

值得注意的是,如果一个或两个分支依次导致指令本身也是分支指令,那么 2 组是不够的,就会出现问题。但是,由于当第一个分支条件到达执行阶段时,我们将知道实际采用哪个分支,因此我们也可以消除错误的分支及其所有子分支。而且由于第一个分支指令从 Fetch 到 Execute 阶段需要 3 个时钟周期,所以我认为在最坏的情况下,我们只需要 2^3,即 8 组流水线寄存器。

除了这在硬件方面实现起来有点困难之外,我认为这种方法可行的假设有什么问题吗?或者这是否已经在更复杂的架构(如 X86-64)中完成?

谢谢。

最佳答案

就 RISC 与 CISC 架构而言,据我记得,后者在 1980 年代末/90 年代初尝试了大致类似于您所建议的技术。检查维基百科的分支预测分析没有文章,但确实重定向到 this在 RSA(加密)文章中,描述了一种利用 branch predictor 的技术这有助于找到私有(private)加密 key 。它还提到同步多线程作为加速分支预测的一种方法。

要更直接地解决您的问题,请参阅 simultaneous multithreading 中的详细信息部分。 。一般来说,这似乎是一个正在进行的研究和分歧的领域。

关于assembly - 处理两个分支结果的管道处理器设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61394763/

相关文章:

linux - 使用 's-proc -e' 在 Linux (Fedora) hello.S 上执行汇编 shellcode 返回 SIGSEGV

assembly - REP MOVSB 用于重叠内存

x86 - AVX 中的 AVX2 VPSHUFB 仿真

c++ - 我的汇编函数推送数据两次

verilog - 如何以现实的方式实现存储字节和存储半字

caching - 什么是引用地点?

x86 - VEX 前缀编码和 SSE/AVX MOVUP(D/S) 指令

c - 如何在ARMv6+上实现16bit立体声混音?

haskell - 分析高性能 Haskell 代码

assembly - IA-32 组件 : Effect of 8 bit operations on 32 bit registers