我可以让我的编译器在每个函数的基础上使用快速数学吗?

2023-11-27

假设我有

template <bool UsesFastMath> void foo(float* data, size_t length);

我想编译一个实例-ffast-math (--use-fast-math对于 nvcc),以及没有它的另一个实例化。

这可以通过在单独的翻译单元中实例化每个变体并使用不同的命令行(带或不带开关)编译每个变体来实现。

我的问题是是否可以向流行的编译器(*)指示应用或不应用-ffast-math对于单个函数 - 这样我就能够在同一个翻译单元中进行实例化。

Notes:

  • 如果答案是“否”,解释原因的奖励分。
  • 这与以下问题不同this one,这是关于在运行时打开和关闭快速数学。我比较谦虚...

(*) 流行的编译器是指您拥有相关信息的 gcc、clang、msvc icc、nvcc(用于 GPU 内核代码)中的任何一个。


在 GCC 中,您可以声明如下函数:

__attribute__((optimize("-ffast-math")))
double
myfunc(double val)
{
    return val / 2;
}

这是 GCC 特有的功能。

请参阅此处的工作示例 ->https://gcc.gnu.org/ml/gcc/2009-10/msg00385.html

看来 GCC 没有验证 optimize() 参数。因此,像“-ffast-match”这样的拼写错误将被默默地忽略。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以让我的编译器在每个函数的基础上使用快速数学吗? 的相关文章

随机推荐