有效评估max(a,b)内部循环cf分支预测?

lms*_*lms 1 c architecture cpu optimization performance

什么是计算C中for循环内2个浮点数的最大值的有效方法,而不使用可能会使管道停止的逻辑语句,例如a > b ? a : b

我正在使用巨大的3D阵列并进行大量的循环迭代.

Mat*_*Mat 6

检查编译器输出的内容,它可能已经"最佳"了.例如,

float foo(float a, float b)
{
    return (a>b?a:b);
}
Run Code Online (Sandbox Code Playgroud)

使用GCC 4.5编译,-O3在x86_64上生成此程序集:

Disassembly of section .text:

0000000000000000 <foo>:
   0:   f3 0f 5f c1             maxss  %xmm1,%xmm0
   4:   c3                      retq   
Run Code Online (Sandbox Code Playgroud)

即编译器对您所针对的指令集以及代码的语义有很多了解.让它完成它的工作.