Rug*_*rra 6 double gcc g++ vectorization fast-math
为什么必须使用-ffast-mathg ++来实现使用doubles 的循环向量化?我不喜欢-ffast-math因为我不想失去精确度.
你不一定会失去精确度-ffast-math.它仅影响的处理NaN,Inf等等,并在其中执行操作的顺序.
如果您有一段特定的代码,您不希望GCC重新排序或简化计算,则可以使用asm语句将变量标记为正在使用.
例如,以下代码执行舍入操作f.但是,这两个f += g和f -= g操作可能会被gcc优化掉:
static double moo(double f, double g)
{
g *= 4503599627370496.0; // 2 ** 52
f += g;
f -= g;
return f;
}
Run Code Online (Sandbox Code Playgroud)
在x86_64上,您可以使用此asm语句指示GCC不执行该优化:
static double moo(double f, double g)
{
g *= 4503599627370496.0; // 2 ** 52
f += g;
__asm__("" : "+x" (f));
f -= g;
return f;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,您需要为每个架构调整此选项.在PowerPC上,使用+f而不是+x.
| 归档时间: |
|
| 查看次数: |
3359 次 |
| 最近记录: |