写一个无分支函数,如果两个有符号整数之间的差为零,负或正,则返回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)和机器. 佳能的解决方案在许多基准测试中表现良好,但性能优势再次轻微.令我感到惊讶的是,在某些情况下,某些解决方案比使用分支的天真解决方案慢.