gpt4 book ai didi

c - for循环迭代是否等同于分支?

转载 作者:太空狗 更新时间:2023-10-29 15:31:44 25 4
gpt4 key购买 nike

当我在平常的一天编程时,我会确保所有的分支很可能不会被采用。

int retval = do_somting();
if(!retval) { /* Less-than-likely event*/ }

这个乐观主义者分支预测,导致 CPU 的预测位设置为“不接受”。然而,预测位是否会在 for 循环后被迫返回“take”?

// prediction = "likely take"
if(false) { }

// prediction = "probably take"
if(false) { }

// prediction = "probably not take"
if(false) { }

// prediction = "likely not take"
if(false) { }

/* ... thousands of other if(false) that are speedy-fast */

for(int i = 0; i < 5; i++) { }
// prediction = "likely take"?

我知道这是一个不切实际的微不足道的优化,但是嘿,你知道的越多。

编辑:让我们假设 GCC 不会破坏上面的所有代码,我们也只讨论 amd64 架构。因为我没有意识到这个问题有多低级。

最佳答案

事实证明,分支预测取决于 CPU 的型号。

根据 this paper ,当将循环与正常分支相关联时,分支预测以无数种方式处理。一些 CPU 有一个单独的预测器循环。所以这意味着 if 语句根本不会影响 for 语句的预测。其他人也有相同的预测。

无论如何,这个问题没有唯一的正确答案。谈分支效率时,for循环是不可衡量的。

...当然,除非您打算只在单一型号的 CPU 上运行您的程序。

关于c - for循环迭代是否等同于分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41877720/

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