我正在编写一些CUDA代码,并且我希望它根据是否设置了--use_fast_math
而表现不同。而且-我想在编译时而不是在运行时做出决定。
似乎在设置--use_fast_math
时,NVCC确实不是添加或更改预处理器定义。我通过比较以下内容的输出进行了检查:
nvcc -Xcompiler -dM -E -x cu -
带有]的输出>
nvcc -Xcompiler -dM -E --use_fast_math -x cu -
它们完全相同;因此该途径似乎被封锁。现在,如果编译用户将使用
--use_fast_math -DUSING_FAST_MATH
调用NVCC,那么我也可以检测到;但是假设它是库代码,我们不能对用户施加这些限制。
是否有其他方式让代码进行编译才能注意到--use_fast_math
已打开?
注:“取空”可能意味着使用预处理器#if
或#ifdef
指令,使用SFINAE,使用编译器内置的值或constexpr函数-编译时可用的任何形式。
我正在编写一些CUDA代码,并且我希望它根据是否设置了--use_fast_math而表现不同。而且-我想在编译时而不是在运行时做出决定。似乎...
答案几乎可以肯定是。快速数学函数是硬件指令,它们由CUDA设备代码编译器中的代码生成代替。一个例子:
这里是丑陋的丑角,而不是答案: