相关疑难解决方法(0)

将0,负和正映射到0,1,2的无分支代码

写一个无分支函数,如果两个有符号整数之间的差为零,负或正,则返回0,1或2.

这是一个分支版本:

int Compare(int x, int y)
{
    int diff = x - y;
    if (diff == 0)
        return 0;
    else if (diff < 0)
        return 1;
    else
        return 2;
}
Run Code Online (Sandbox Code Playgroud)

这是一个可能更快的版本,具体取决于编译器和处理器:

int Compare(int x, int y)
{
    int diff = x - y;
    return diff == 0 ? 0 : (diff < 0 ? 1 : 2);
}
Run Code Online (Sandbox Code Playgroud)

你能想出一个没有分支的更快的吗?

摘要

我基准测试的10个解决方案具有相似的性能.实际数字和获胜者取决于编译器(icc/gcc),编译器选项(例如,-O3,-march = nocona,-fast,-xHost)和机器. 佳能的解决方案在许多基准测试中表现良好,但性能优势再次轻微.令我感到惊讶的是,在某些情况下,某些解决方案比使用分支的天真解决方案慢.

c++ optimization bit-manipulation

14
推荐指数
5
解决办法
4751
查看次数

标签 统计

bit-manipulation ×1

c++ ×1

optimization ×1