【问题标题】:branch prediction, and optimized code分支预测和优化代码
【发布时间】:2018-07-02 11:22:25
【问题描述】:

我有以下一组代码块,这两个块的目的是相同的。 我必须实现第二个块以避免逆逻辑并增加可读性。 顺便说一句,在生产代码中,条件非常复杂。

问题是 - 我知道分支不好,我必须支付多少罚款。 只是作为一个额外的信息,也请考虑,else分支的概率非常高。

X = Get_XValue()
if (X != 5)
{
    K = X+3;
    .
    .
}

X = Get_XValue()
if (X == 5)
{
    /*do nothing*/
}
else
{
    K = X+3;
    .
    .
}

【问题讨论】:

    标签: optimization compiler-construction embedded branch branch-prediction


    【解决方案1】:

    这一切都取决于您的编译器。一个好的优化编译器会检测到第二个示例中的then-clause 为空并反转测试。因此它将为两种情况生成相同的代码,因此根本不会受到惩罚。

    作为旁注,我可以补充一点,我尝试过的所有三个编译器(clang、gcc 和 iccarm)都是这种情况,

    【讨论】:

    • 谢谢。我使用绿山ghs.com/products/compiler.html
    • 而且,他们声称 - “......与 GNU 和 LLVM 编译器相比,Green Hills 编译器的大多数程序可以提高速度并减少至少 20% 的大小。”
    猜你喜欢
    • 2015-11-24
    • 1970-01-01
    • 2013-09-04
    • 2014-07-31
    • 2015-03-21
    • 2017-06-12
    • 2016-04-16
    • 2017-04-26
    相关资源
    最近更新 更多