gpt4 book ai didi

c++ - 什么是代码分支

转载 作者:太空狗 更新时间:2023-10-29 19:38:38 24 4
gpt4 key购买 nike

什么是代码分支?我在很多地方都看到过它,尤其是有点玩弄,但从来没有真正想过它?

它是如何减慢程序速度的?我在编码时应该考虑什么?

我看到提到了 if 语句。我真的不明白这样的代码怎么会减慢代码速度。如果条件为真执行以下指令,否则跳转到另一组指令?我看到另一个线程提到“分支预测”,也许这就是我真正迷路的地方。有什么可预测的?条件就在那里,只能为真或为假。

我不认为这是 this related question 的拷贝.链接的线程正在谈论关于未排序数组的“分支预测”。我在问什么是分支以及为什么需要预测。

最佳答案

最简单的分支示例是 if 语句:

if (condition)
doSomething();

现在,如果 conditiontrue,则执行 doSomething()。如果不是,则执行分支,跳转到 if 结束后的语句。

在非常简单的机器伪代码中,这可能会被编译成如下几行:

TEST condition
JZ label1 ; jump over the CALL if condition is 0
CALL doSomething
@@label1

分支点是JZ指令。后续的执行点取决于condition的测试结果。

分支会影响性能,因为现代处理器会提前预测分支的结果并执行推测性执行。如果预测结果是错误的,那么投机执行就必须取消。

如果您可以安排代码使预测成功率更高,那么性能就会提高。这是因为推测执行的代码现在的开销更少,因为它甚至在需要之前就已经执行了。这是可能的,因为现代处理器是高度并行的。可以使用备用执行单元来执行此推测执行。

现在,有一种代码永远不会出现分支预测未命中的情况。那是没有分支的代码。对于无分支代码,推测执行的结果总是有用的。因此,在所有其他条件相同的情况下,没有分支的代码比有分支的代码执行得更快。

关于c++ - 什么是代码分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com