鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

选项 -fsimdmath,-msimdmath64

说明

-fsimdmath选项用于使能矢量化mathlib数学库。启用该选项后,编译器在矢量化阶段会自动寻找可使用矢量化数学库的代码片段,并在确认有性能收益时生成包含矢量化数学函数的相关矢量化代码。该选项适用于C、C++和Fortran语言前端。

-msimdmath-64使能64bit位宽的矢量化数学函数接口生成,此选项缺省关闭。由于当前mathlib中并不提供64bit位宽的矢量化数学函数的实现,因此如果直接启用此选项可能导致链接错误。为了方便直接使能mathlib中提供的128bit位宽的数学库,又不至于消减开源原有的功能,设置了该选项。如果有需要使用64bit位宽的矢量化数学库,可以寻找实现,并指定相关数学库的情况下使用。

使用方法

  • 要使能mathlib提供的全部矢量化数学库接口,可在命令行添加-fsimdmath -O3或-fsimdmath -ftree-vectorize。其中-O3和-ftree-vectorize用于开启矢量化优化遍,这是矢量化数学库生效的前提。
  • 编译器在gcc-12.3.1-2025.03-aarch64-linux/lib64/gcc/aarch64-linux-gnu/12.3.1/include目录下提供simdmath.h头文件,在gcc-12.3.1-2025.03-aarch64-linux/lib64/gcc/aarch64-linux-gnu/12.3.1/finclude目录下提供simdmath_f.h头文件。这两个头文件分别是C/C++ 和 Fortran中包括当前mathlib支持的所有矢量化数学库函数(共11个)的simd声明。如果只想使能部分矢量化函数,可将头文件中相应的函数声明删除。

    选项: -lmathlib -fsimdmath -lm

  • 使能矢量化数学库并非将所有数学函数都以矢量化方式实现,有部分场景无法调用矢量化函数,会出现矢量与标量数学函数同时调用的情况。