如何在gcc中使用矢量化选项

如何在gcc中使用矢量化选项,c,gcc,optimization,vector,vectorization,C,Gcc,Optimization,Vector,Vectorization,Linux 3.13.0-68-generic x86\u 64 Ubuntu 14.04.3 gcc(Ubuntu 4.8.4-2ubuntu1~14.04)4.8.4 我有一个简单的程序,我想实际使用矢量 #include <stdio.h> #include <sys/time.h> struct timeval stop, start; int main() { int i; int x[8192], y[8192]; int a =

Linux 3.13.0-68-generic x86\u 64 Ubuntu 14.04.3 gcc(Ubuntu 4.8.4-2ubuntu1~14.04)4.8.4

我有一个简单的程序,我想实际使用矢量

#include <stdio.h>
#include <sys/time.h>
struct timeval stop, start;

int main() {
    int i;

    int x[8192], y[8192];
    int a = 1, b = 2, c = 3;

    gettimeofday(&start, NULL);

    for (i = 0; i < 8192; i++) {
            y[i] = a * x[i] * x[i] + b * x[i] + c;
    }

    gettimeofday(&stop, NULL);

    printf("%d us\n", stop.tv_usec - start.tv_usec);

      for (i = 0; i < 8192; i++) {
        printf("%d\r", y[i]);
      }
    return 0;
}
#包括
#包括
结构timeval停止、启动;
int main(){
int i;
int x[8192],y[8192];
INTA=1,b=2,c=3;
gettimeofday(&start,NULL);
对于(i=0;i<8192;i++){
y[i]=a*x[i]*x[i]+b*x[i]+c;
}
gettimeofday(&stop,NULL);
printf(“%d us\n”,stop.tv\u usec-start.tv\u usec);
对于(i=0;i<8192;i++){
printf(“%d\r”,y[i]);
}
返回0;
}
如果我使用

-O0
时间是
30美元

-O1
时间是
3US

-O2
时间为
1或0 us

但是如果我使用

-finline函数-funswitch循环-fpredictive commoning-重新加载后的fgcse-ftree循环分布模式-ftree slp矢量化-fvect成本模型-ftree部分预fipa cp克隆-ftree矢量化

这些都是我能找到的矢量化选项,但时间消耗与
-O0


我应该使用哪个选项?

gcc-O2-ftree-vectorize-ftree-vectorizer verbose=1 main.c

以下是输出:

main.c: In function ‘main’:
main.c:19:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘__suseconds_t’ [-Wformat=]
   printf("%d us\n", stop.tv_usec - start.tv_usec);
   ^

Analyzing loop at main.c:21

Analyzing loop at main.c:13


Vectorizing loop at main.c:13

main.c:13: note: LOOP VECTORIZED.
main.c:5: note: vectorized 1 loops in function.

-O3
启用矢量化和一些其他选项。您的一系列其他选项可能不会产生预期效果,因为您没有与它们一起指定优化级别。此外,您的程序包含未定义的行为,编译器可能根本不执行任何优化。如果我是你,我会尝试设计一个更好的测试用例。请注意,你的程序根本不使用循环的结果,因此它是一个无用的基准测试,因为编译器只是一起消除循环,只执行2个gettimeofday调用和一个printf。您可以使用
gcc-S
生成汇编代码,并查看各种优化级别/标志的情况。不要只发布链接。网站规则要求将问题中的所有相关部分作为文本(而不是图像)发布。@Olaf I修改了它。