ループ タイリング (ブロッキング) を実行する gcc を使用してコードをコンパイルするにはどうすればよいですか? デフォルトの -O3 最適化では、ループ タイリングは実行されません。このフラグでループ タイルを有効にし、タイル ファクターを調べる必要があります。(例: 立方体タイリングまたは長方形タイリング) つまり、内部タイリング ヒューリスティック。
ありがとう
ループ タイリング (ブロッキング) を実行する gcc を使用してコードをコンパイルするにはどうすればよいですか? デフォルトの -O3 最適化では、ループ タイリングは実行されません。このフラグでループ タイルを有効にし、タイル ファクターを調べる必要があります。(例: 立方体タイリングまたは長方形タイリング) つまり、内部タイリング ヒューリスティック。
ありがとう
あなたは gcc の正確なバージョン、サンプル コード、結果コードを提供しておらず、インターネットを十分に調べていませんでしたが、おそらくこれはすでにあなたの質問に答えています:
ストリップ マイニングは、バージョン 4.4のグラファイト ブランチのマージで gcc に導入された最適化です。マニュアルも参照してください:
-floop-strip-mine ループでループ ストリップ マイニング変換を実行します。ストリップ マイニングは、ループを 2 つのネストされたループに分割します。外側のループにはストリップ サイズと等しいストライドがあり、内側のループにはストリップ内の元のループのストライドがあります。ストリップの長さは、loop-block-tile-size パラメーターを使用して変更できます。たとえば、次のようなループがあるとします。
DO I = 1, N
A(I) = A(I) + C
ENDDO
ループ ストリップ マイニングは、ユーザーが書いたかのようにループを変換します。
DO II = 1, N, 51
DO I = II, min (II + 50, N)
A(I) = A(I) + C
ENDDO
ENDDO
この最適化は、GCC がサポートするすべての言語に適用され、Fortran に限定されません。このコード変換を使用するには、GCC を --with-ppl および --with-clog で構成して、Graphite ループ変換インフラストラクチャを有効にする必要があります。
man gcc | grep '\-floop\-strip\-mine'
それがサポートされているオプションであるかどうかを確認するために実行できます。正確な gcc バージョンについては、次のように入力しgcc --version
ます。