質問

gccコンパイラのv4シリーズは、 SIMD プロセッサを使用してループを自動的にベクトル化できますAMD AthlonやIntel Pentium / Coreチップなどの一部の最新のCPU。これはどのように行われますか?

役に立ちましたか?

解決

元のページには、gccで自動的にベクトル化する方法の詳細が記載されています いくつかの例を含むループ:

http://gcc.gnu.org/projects/tree-ssa /vectorization.html

例は素晴らしいですが、最新のGCCでこれらのオプションを呼び出すための構文は少し変更されているようです。今すぐご覧ください:

要約すると、SSE2を搭載したx86チップでは次のオプションが機能します ベクトル化されたループのログを提供します:

gcc -O2 -ftree-vectorize -msse2 -ftree-vectorizer-verbose=5

-msseも可能ですが、ループのみをベクトル化することに注意してください doubleまたはintではなく、floatを使用します。

他のヒント

gimple(GCCの中間表現)パスpass_vectorizeがあります。このパスにより、gimpleレベルでの自動ベクトル化が有効になります。

自動ベクトル化(GCC V4.4.0)を有効にするには、次の手順を実行する必要があります。

  1. ターゲットアーキテクチャごとのベクトル内の単語数を指定します。これを行うには、マクロUNITS_PER_SIMD_WORDを定義します。
  2. 可能なベクトルモードは、通常<target>-modes.defの別のファイルで定義する必要があります。このファイルは、マシン記述を含む他のファイルが存在するディレクトリに存在する必要があります。 (構成スクリプトに従って。スクリプトを変更できる場合は、ファイルを任意のディレクトリに配置できます。)
  3. ターゲットアーキテクチャごとのベクトル化で考慮されるモード。同様に、4ワードが1つのベクトルを構成するか、8つのハーフワードが1つのベクトルを構成するか、2つのダブルワードが1つのベクトルを構成します。この詳細は、VECTOR_MODES (INT, 8);     /*       V8QI V4HI V2SI /
    VECTOR_MODES (INT, 16);    /
    V16QI V8HI V4SI V2DI /
    VECTOR_MODES (FLOAT, 8);   /
               V4HF V2SF */
    ファイルに記載する必要があります。例:

    -O2 -ftree-vectorize

  4. ポートを構築します。ベクトル化は、コマンドラインオプション<=>を使用して有効にできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top