【发布时间】:2020-12-13 07:22:13
【问题描述】:
在我的代码中有一个规则:如果if 语句为真,它将保持一段时间为真,如果它变为假,它将保持假一段时间。由于这段代码的性能很重要,我想让分支预测更有效。
目前我尝试的是编写这个if语句的两个版本,一个用“可能”优化,另一个用“不太可能”优化,并使用函数指针来保存要使用哪个,但由于函数指针也破坏了管道,基准测试似乎与普通的if 语句没有什么不同。所以我很好奇是否有任何技术可以让 CPU“记住”if 语句的最后一个选择?
或者,我真的需要关心这个吗?
【问题讨论】:
-
CPU 的分支预测器已经准备好了。如果前几次相同,它将继续使用该分支,直到它发生更改并且您错过了。然后它会重新评估。
-
CPU 已经这样做了,这叫做分支预测。
-
CPU 怎么能记住我代码中这么多
if语句?或者这是否意味着如果将代码移出 CPU 缓存,结果会被 CPU 遗忘? -
@ravenisadesk 至少应该有一个缓冲区来跟踪哪些指令产生了哪些值。
标签: c++ cpu-architecture branch-prediction