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 \

他のものをオーバーライドするものがあることは承知しています。

ベクトライザーからの出力はまったく得られませんが、.optomized ファイルを見ると、ベクトル化が使用されていないことがわかります。これをベクトル化する正しい方法を教えてもらえますか?

編集:問題は -O3 ではなく -o3 を使用していたことが判明しました。

4

2 に答える 2

0

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0002a/ch01s04s03 .number_of_sub_pixels_to_write _ html

于 2012-10-25T10:07:49.633 に答える
0

コンパイラは、好きなことを自由に行うことができます。したがって、本当に SIMD 機能を使用したい (コンパイラに依存しない) 場合は、関数を使用する必要があります (マニュアルを参照してください)。

于 2012-10-25T10:28:34.493 に答える