假设我有:
我希望你能编译一个实例,并使用
template <bool UsesFastMath> void foo(float* data, size_t length);
我希望你能编译一个实例,并使用
-ffast-math
(--use-fast-math
用于nvcc)进行优化,另一个实例则不使用。
可以通过在不同的翻译单元中实例化每个变量,并使用不同的命令行参数对它们进行编译来实现此目的。
我的问题是是否有可能向流行的编译器(*)指示对个别函数应用或不应用-ffast-math
,以便我能够在同一翻译单元中拥有我的实例。
注意:
- 如果答案是否定的,说明原因可以获得额外的积分。
- 这个问题与这个问题不同,后者涉及在运行时开启和关闭快速数学计算。 我比较温和...
(*) 流行的编译器包括:gcc、clang、msvc icc、nvcc(用于GPU内核代码)。
nvcc
: 每个编译单元都会应用编译标志,没有等效的函数属性可以在每个函数上应用。如果您想要应用不同的标志,请将代码放入不同的编译单元中(如果需要,可以从同一文件中包含源代码)。为了进行紧密的本地控制,各种CUDA设备内部函数(或最坏情况下,一些内联汇编)可以提供您所需的大部分功能。 - njuffa