哪种分支预测更重要?


11

我观察到分支预测中有两种不同类型的状态。

  1. 在超标量执行中,分支预测非常重要,主要是执行延迟而不是获取延迟。

  2. 在指令流水线中,由于指令直到稍后才真正被执行,因此获取的问题更多。

其中哪一项非常重要(因为当今CPU中哪些真正重要)?如果两者都同等重要,或者如果第二个同等重要,那么为什么我们没有两个指令流水线(可能是一半的长度),然后根据分支,只选择其中一个,然后再次从分支开始填充开始?


1
视情况而定,也许两者都很重要?
拉斐尔

Answers:


6

我不知道哪种情况盛行,但我想对您的双管道提议提出一些想法。

首先,您需要使用两倍的导线,这样在活动时会消耗两倍的能量并产生两倍的热量。另一方面,虽然不需要,但完全没有用。因此,人们可能会争辩说,这不是对现代处理器中稀有资源的良好利用。

从根本上讲,除非您基于概率选择一个分支,否则如何知道要写入哪个版本?如果没有,您可能不会保存任何东西,因为无论如何其他处理器可能都必须等待您的决定。如果坚持使用其中之一,则回滚概率和成本将与现在基本相同。

C=c+p(cr+c)cpcr2c2c+pcrCpcrpt+p(tr+t)tt+ptrp


据我所知,英特尔已经尝试了“读取分支两侧的指令”,甚至“执行分支两侧的指令”,并停止这样做。要么是因为它没有获得任何收益,要么是因为成本和复杂性太高了,以至于他们可以用相同的成本以不同的方式获得更多的收益。
gnasher729

@ gnasher729那可能是在我们了解与此类功能相关的安全漏洞之前?
拉斐尔

2

从某种意义上说,分支预测的效果在提取指令时更为关键,因为无法执行未提取的指令。

关于执行分支的两个路径,这被称为热切执行,并且已经进行了一些实质性的研究。奥古斯都·U·赫特(Augustus K. Uht)和维杰·辛达吉(Vijay Sindagi)的“不相交的渴望执行:投机执行的最佳形式”(1995年)可能值得一看。

渴望执行有几个问题。为了进行深入推测,必须跟踪的路径数可以成倍增长(每个分支的分支路径可能会遇到一个分支)。分支预测通常也非常准确(正确率> 90%),因此始终执行两条路径都是浪费的。急切的执行还会使无用的内容“污染”缓存。(上述论文提出了智能限制的急切执行方式,以避免其中的某些问题。)急切地获取替代路径的问题更少,并且在减少较短管道中的错误预测恢复延迟方面可能具有一定的吸引力。

已经提出的另一种方法是动态预测“吊床”分支(连接到指令流主要路径的短前分支)。Artur Klauser等人的“非预测性指令集体系结构的动态吊床预测”(1998年)可能值得一读。(Hyesoon Kim等人的“愿望分支:结合条件分支和谓词以进行自适应谓词执行”建议在ISA分支中添加一些便于预测吊床的分支,并将这种谓词方法扩展到难以预测的循环分支。)


这是一个非常好的答案!谢谢。:-)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.