ein*_*ica 5 floating-point gcc nvcc fast-math template-instantiation
假设我有
template <bool UsesFastMath> void foo(float* data, size_t length);
Run Code Online (Sandbox Code Playgroud)
我想用-ffast-math(--use-fast-math对于nvcc)编译一个实例,而没有它的另一个实例。
这可以通过在单独的翻译单元中实例化每个变体,并使用不同的命令行(使用和不使用开关)来编译每个变体来实现。
我的问题是是否可以指示流行的编译器(*)是否适用-ffast-math于单个函数-这样我就可以在同一翻译单元中使用我的实例。
笔记:
(*)由流行的编译器表示我具有以下信息:gcc,clang,msvc icc,nvcc(用于GPU内核代码)。
小智 7
在GCC中,您可以声明如下函数:
__attribute__((optimize("-ffast-math")))
double
myfunc(double val)
{
return val / 2;
}
Run Code Online (Sandbox Code Playgroud)
这是仅限GCC的功能。
在此处查看工作示例-> https://gcc.gnu.org/ml/gcc/2009-10/msg00385.html
似乎GCC不会验证optimize()参数。因此,像“ -ffast-match”这样的拼写错误将被忽略。
从 CUDA 7.5(我熟悉的最新版本,尽管 CUDA 8.0 目前已发布)开始,nvcc不支持允许程序员在每个函数的基础上应用特定编译器优化的函数属性。
由于通过命令行开关设置的优化配置适用于整个编译单元,因此一种可能的方法是使用与不同优化配置一样多的不同编译单元,正如问题中已经指出的那样;#include源代码可以从公共文件共享和编辑。
使用nvcc,命令行开关--use_fast_math基本上控制三个功能区域:
您可以通过使用适当的内在函数以每个操作的粒度应用其中一些更改,而使用 PTX 内联汇编来应用其他更改。
| 归档时间: |
|
| 查看次数: |
1167 次 |
| 最近记录: |