You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何部分x64编译器不对fmin/fminf进行内联优化?

编译器对fminf/fmin内联优化的差异分析

近期在不同编译器下对快速数值代码进行基准测试时发现:在-O2优化级别及AVX/AVX2代码生成模式下,编译器的性能表现存在系统性差异。其中Clang和ICX会将fminf/fmin调用内联为minss指令,而GCC、ICC、MSVC则始终调用fminf函数;不过所有编译器均能正常内联fabsf/fabs。

以下是最小复现示例(MRE)代码:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
  float y, x = 2.0;
  y = 10*rand()-5;
  y = fabs(y);
  if (x < y) y = x;
  printf("%g", y);
  y = 10 * rand();
  y = fminf(x,y);
  printf("%g", y);
}

各编译器对fminf的内联情况如下表:

编译器inline fminf
GCC 13.2否
ICC latest否
MSVC 2022 x64否
CLANG 17.0.1是
ICX是

fmin和fmax在数值优化代码中应用广泛,这种差异会导致较为显著的性能下降,可通过定义FMIN和FMAX宏来规避,但仍希望未实现内联的编译器能支持该优化。

我无法理解为何部分编译器缺失这一优化——毕竟更复杂的fabs都能被所有编译器内联,恳请专业人士解答。

内容的提问来源于stack exchange,提问作者Martin Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 13:35:21