“simd reduction(:)”的存在在GCC和MSVC? [英] Existence of "simd reduction(:)" In GCC and MSVC?

查看:197
本文介绍了“simd reduction(:)”的存在在GCC和MSVC?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  #pragma simd 
#pragma可以在icc编译器中使用simd pragma simd reduction(+:acc)
#pragma ivdep
for(int i(0); i {
acc + = x [i ]。
}

在msvc或/和gcc中是否有任何等效的解决方案?



参考(p28): http ://d3f8ykwhia686p.cloudfront.net/1live/intel/CompilerAutovectorizationGuide.pdf

解决方案

GCC绝对可以进行矢量化。假设你有文件reduc.c的内容:

  int foo(int * x,int N)
{
int acc,i;

for(i = 0; i {
acc + = x [i];
}

return acc;
}

使用命令行编译它(我使用gcc 4.7.2) p>

  $ gcc -O3 -S reduc.c -ftree-vectorize -msse2 

现在你可以在汇编中看到矢量化的循环。



你也可以打开verbose矢量输出,

  $ gcc -O3 -S reduc.c -ftree-vectorize -msse2 -ftree-vectorizer -verbose = 1 

现在您将获得控制台报告:

 在reduc.c处分析循环:5 
在reduc.c中向量化循环:5
5:LOOP VECTORIZED。
reduc.c:1:注意:向量化函数中的1个循环。

查看官方文档,以更好地了解GCC可以矢量化和无法矢量化的情况。


simd pragma can be used with icc compiler to perform a reduction operator:

#pragma simd
#pragma simd reduction(+:acc)
#pragma ivdep
for(int i( 0 ); i < N; ++i )
{
  acc += x[i];
}

Is there any equivalent solution in msvc or/and gcc?

Ref(p28): http://d3f8ykwhia686p.cloudfront.net/1live/intel/CompilerAutovectorizationGuide.pdf

解决方案

GCC definitely can vectorize. Suppose you have file reduc.c with contents:

int foo(int *x, int N)
  {
    int acc, i;

    for( i = 0; i < N; ++i )
      {
        acc += x[i];
      }

    return acc;
  }

Compile it (I used gcc 4.7.2) with command line:

$ gcc -O3 -S reduc.c -ftree-vectorize -msse2

Now you can see vectorized loop in assembler.

Also you may switch on verbose vectorizer output say with

$ gcc -O3 -S reduc.c -ftree-vectorize -msse2 -ftree-vectorizer-verbose=1

Now you will get console report:

Analyzing loop at reduc.c:5
Vectorizing loop at reduc.c:5
5: LOOP VECTORIZED.
reduc.c:1: note: vectorized 1 loops in function.

Look at the official docs to better understand cases where GCC can and cannot vectorize.

这篇关于“simd reduction(:)”的存在在GCC和MSVC?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆