自动向量化GCC

3

我正在尝试让GCC 4.7自动化向量化我的代码的一些部分,以提高速度,但似乎难以实现。

以下是我想向量化的一些代码:

void VideoLine::WriteOut(unsigned short * __restrict__  start_of_line, const int  number_of_sub_pixels_to_write)
{
  unsigned short * __restrict__ write_pointer = (unsigned short *)__builtin_assume_aligned (start_of_line, 16);
  unsigned short * __restrict__ line = (unsigned short *)__builtin_assume_aligned (_line, 16);
  for (int i = 0; i < number_of_sub_pixels_to_write; i++)
  {
    write_pointer[i] = line[i];
  }
}

我正在使用以下GCC开关:

-std=c++0x \
-o3 \
-msse \
-msse2 \
-msse3 \
-msse4.1 \
-msse4.2 \
-ftree-vectorizer-verbose=5\
-funsafe-loop-optimizations\
-march=corei7-avx \
-mavx \
-fdump-tree-vect-details \
-fdump-tree-optimized \

我知道有些东西会覆盖其他东西。

然而,当我查看.optimized文件时,我发现它没有使用向量化,因此我根本没有从向量器中得到任何输出。请问有人能指点我如何使其向量化吗?

编辑:事实证明问题出在使用了-o3而不是-O3。


1
这就是为什么我从不依赖自动向量化。如果真的很重要,我会手动完成它。 - Mysticial
你只是在复制数据。为什么要矢量化? - BЈовић
我只是在复制这个函数,但我还有其他需要更多工作的函数。我认为先让它在这个上面运作起来会更容易一些。 - robby987
如果你真的在意,就手动向量化它。否则,使用std::copy,让编译器决定如何优化它。 - jalf
4
“-o3”真的是小写的“o”吗?应该是大写的。 - janneb
谢谢janneb - 直接就能工作了! - robby987
2个回答

0

-ftree-vectorizer-verbose=5 包含 -ftree-vectorize 吗? - oc1d
1
在GCC 4.7中,-ftree-vectorize包含在-O3中。 - janneb

0
编译器可以随意处理。因此,如果你真的想使用SIMD功能(而不依赖于编译器),你应该使用这些函数(请参阅manual)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接