3 个 ALU + 解码器中的每一个同时在 `switch`/`case` 上的 3 个不同条件分支上行走?
each of 3 ALU+decoders walk on 3 different conditional branches on `switch`/`case` simultaneously?
众所周知,在 Intel x86_64 上,超线程允许同时使用来自不同线程的共享执行单元(ALU,...)——这被称为同步多线程 (SMT)。
众所周知,在超线程虚拟内核上执行的线程可以处理不同的指令序列——不同进程的代码、不同函数的代码,或者一个函数的一个条件分支的不同分支等。
即第一个虚拟核心的4个解码器可以处理一个指令序列,第二个虚拟核心的其他4个解码器可以处理其他指令序列。
但是单线程是否可以同时(乱序)执行一个条件分支的不同分支,即CPU-Core是否可以同时执行两个或多个条件分支,来预测各种选项条件跳转?
例如,3 个 ALU+解码器中的每一个都同时在 switch
/case
上的 3 个不同的条件分支上行走。
那张图片并不完全准确,更不用说重复了。几乎所有东西都是共享的,除了:
- 建筑状态,显然
- 在 SB 和 IB 上,循环缓冲区
特别是,解码器是共享的,并在线程之间交替。
原则上,您可以在一个分支上拥有硬件线程 "go down both paths",但这不是超线程(或当前 Intel 处理器中的其他任何东西)所做的。选择一条路径,然后推测性地遵循,直到它必须被丢弃或变得非推测性。
已经探索了执行两条路径(也称为急切执行或双路径执行),尤其是在 90 年代,但从未被认真使用过。考虑使用相同的资源,执行两条路径意味着正确的路径将比它是唯一路径时执行得更远。分支预测平均而言非常有效,超过 90% 的正确率(尽管也高度可变),因此平均而言,最好只选择一条路径。一些研究在对低置信度分支使用双路径执行方面取得了 shown 有希望的结果。
众所周知,在 Intel x86_64 上,超线程允许同时使用来自不同线程的共享执行单元(ALU,...)——这被称为同步多线程 (SMT)。
众所周知,在超线程虚拟内核上执行的线程可以处理不同的指令序列——不同进程的代码、不同函数的代码,或者一个函数的一个条件分支的不同分支等。
即第一个虚拟核心的4个解码器可以处理一个指令序列,第二个虚拟核心的其他4个解码器可以处理其他指令序列。
但是单线程是否可以同时(乱序)执行一个条件分支的不同分支,即CPU-Core是否可以同时执行两个或多个条件分支,来预测各种选项条件跳转?
例如,3 个 ALU+解码器中的每一个都同时在 switch
/case
上的 3 个不同的条件分支上行走。
那张图片并不完全准确,更不用说重复了。几乎所有东西都是共享的,除了:
- 建筑状态,显然
- 在 SB 和 IB 上,循环缓冲区
特别是,解码器是共享的,并在线程之间交替。
原则上,您可以在一个分支上拥有硬件线程 "go down both paths",但这不是超线程(或当前 Intel 处理器中的其他任何东西)所做的。选择一条路径,然后推测性地遵循,直到它必须被丢弃或变得非推测性。
已经探索了执行两条路径(也称为急切执行或双路径执行),尤其是在 90 年代,但从未被认真使用过。考虑使用相同的资源,执行两条路径意味着正确的路径将比它是唯一路径时执行得更远。分支预测平均而言非常有效,超过 90% 的正确率(尽管也高度可变),因此平均而言,最好只选择一条路径。一些研究在对低置信度分支使用双路径执行方面取得了 shown 有希望的结果。