c++ - 自动矢量化 GCC

标签 c++ gcc vectorization

我试图让 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 \

我知道有些会覆盖其他。

我根本没有从矢量化器获得任何输出,但是,在查看 .optomized 文件时,我可以看到它没有使用矢量化。任何人都可以指出正确的方法来对其进行矢量化吗?

编辑:原来问题是使用 -o3 而不是 -O3。

最佳答案

尝试保证 number_of_sub_pixels_to_write 是 4 的倍数,方法是像此处那样对其进行屏蔽: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0002a/ch01s04s03.html

关于c++ - 自动矢量化 GCC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13066179/

相关文章:

gcc - 使用objcopy将二进制嵌入到elf中可能会导致对齐问题?

r - 是否可以对 R 中向量元素的顺序更新进行向量化?

MATLAB 矢量化 : filling struct fields from vector elements

c++ - 使用 move 赋值运算符分配刚构造的未命名值

c++ - 在 OpenCV 中保存图像

c++ - '.' 和 '->' 在数组中使用时有什么区别?

python - 如何根据本地位置/旋转在 OpenGL 中移动/旋转对象

c - 多重包含优化

c++ - GCC STL 边界检查

python - 每行 Bin 元素 - NumPy 的矢量化 2D Bincount