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
最佳答案
对于 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
”或“double
”类型的情况下,向量化要求抛出 /fp:fast
开关.这是因为向量化缩减操作取决于“浮点重新关联”。只有在抛出 /fp:fast
Ref(associated doc;p12) http://blogs.msdn.com/b/nativeconcurrency/archive/2012/07/10/auto-vectorizer-in-visual-studio-11-cookbook.aspx
关于visual-c++ - GCC 和 MSVC 中是否存在 "simd reduction(:)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17602290/