gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:29:08 25 4
gpt4 key购买 nike

Linux 3.13.0-68-generic x86_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;
}

如果我使用

-O0 时间是30 us

-O1 时间是 3 us

-O2 时间为1 或 0 us

但是如果我使用

-finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload -ftree-loop-distribute-patterns -ftree-slp-vectorize -fvect-cost-model -ftree-partial-pre -fipa-cp-clone -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.

关于c - 如何在 gcc 中使用矢量化选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33856146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com