gpt4 book ai didi

c++ - C/C++ : is using the result of comparison as int really branchless?

转载 作者:太空狗 更新时间:2023-10-29 20:56:11 25 4
gpt4 key购买 nike

我在很多 SO 答案中都看到过这样的代码:

template <typename T> 
inline T imax (T a, T b)
{
return (a > b) * a + (a <= b) * b;
}

作者说这是无分支的。

但这在当前架构上真的是无分支的吗? (x86, ARM...)是否有真正的标准保证这是无分支的?

最佳答案

x86 具有 SETcc 系列指令,可根据标志的值将字节寄存器设置为 1 或 0。这通常被编译器用来实现这种没有分支的代码。

如果你使用“天真的”方法

int imax(int a, int b) {
return a > b ? a : b;
}

编译器将使用 CMOVcc(条件移动)指令族生成更高效的无分支代码。

ARM 能够有条件地执行每条指令,这使得编译器能够有效地编译您的和原始实现,原始实现更快。

关于c++ - C/C++ : is using the result of comparison as int really branchless?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34159112/

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