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

如何让Clang/GCC在向量化时调用libmvec的sincosf向量版本?

问题:Clang/GCC向量化含sinf/cosf的循环时未调用libmvec的sincos向量版本

在对包含sinf()和cosf()的循环做向量化优化时,我发现Clang和GCC没有利用libmvec库中sincos()的向量版本,这和6年前Stack Overflow上的相关问题一致。

代码示例

void func( float *  p, int n, float a, float b ) 
{
    n = 8*4;
    for( int i = 0; i < n; i++ )
    {
      #pragma omp simd safelen(8) simdlen(8) aligned(p)
      for( int j = 0; j < n; j++ )
      {
        float angle = a*j+b*i;
        p[j+i*n] += a * sinf( angle ) + b * cosf( angle );
      }
    }
}

对应编译选项:

  • GCC:-O3 -march=haswell -fopt-info-vec-missed -fopenmp-simd -ffast-math
  • Clang:-O3 -march=haswell -fopenmp-simd -ffast-math -fveclib=libmvec
  • ICC:-O3 -march=haswell

各编译器输出行为

  • GCC:完全未做向量化,仅调用libm中的sincosf,这是一个已被记录但未修复的已知Bug(Bug编号:70901)。
  • Clang:单独对sinf()和cosf()做向量化,调用libmvec中的_ZGVdN8v_sinf和_ZGVdN8v_cosf。
  • ICC:实现了完整向量化,调用__svml_sincosf8_l9。

求助

有没有可行的解决方法,能让Clang(以及GCC)调用libmvec的_ZGVdN8vvv_sincosf?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:01:06