我正在尝试让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。
std::copy
,让编译器决定如何优化它。 - jalf