simd pragma 可以与 icc 编译器一起使用来执行归约运算符:
#pragma simd
#pragma simd reduction(+:acc)
#pragma ivdep
for(int i( 0 ); i < N; ++i )
{
acc += x[i];
}
msvc 或/和 gcc 中是否有等效的解决方案?
参考文献(第28页):http://d3f8ykwhia686p.cloudfront.net/1live/intel/CompilerAutovectorizationGuide.pdf http://d3f8ykwhia686p.cloudfront.net/1live/intel/CompilerAutovectorizationGuide.pdf
对于 Visual Studio 2012:
有选项/O1 /O2/GL
,报告矢量化使用/Qvec-report:(1/2)
int s = 0;
for ( int i = 0; i < 1000; ++i )
{
s += A[i]; // vectorizable
}
如果减少超过“float
" or "double
“ 类型,矢量化要求/fp:fast
开关被抛出。这是因为向量化归约运算取决于“浮点重新关联”。仅在以下情况下才允许重新关联/fp:fast
被抛出
参考文献(相关文档;p12)http://blogs.msdn.com/b/nativeconcurrency/archive/2012/07/10/auto-vectorizer-in-visual-studio-11-cookbook.aspx http://blogs.msdn.com/b/nativeconcurrency/archive/2012/07/10/auto-vectorizer-in-visual-studio-11-cookbook.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)