ループのフラット化および展開 - 2023.2 日本語

AI エンジン カーネルおよびグラフ プログラミング ガイド (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 日本語

ループは、chess_flatten_loop プラグマを使用して完全にフラット化できます。これは、aiecompiler により最適に自動化されない小型のループに便利です。

ループのフラット化では、ループ カウントはコンパイラにより決定されます。ツールでループ カウントを自動的に判断できない場合は、chess_loop_count プラグマを使用してループ カウントを設定できます。次に例を示します。
for(int i=0;i<6;i++) chess_flatten_loop {...}
for(...) chess_loop_count(6) chess_flatten_loop {...}

chess_unroll_loop(N) を使用すると、ループ本体を N-1 回複製でき、ループ カウントは N で除算されます。ループは、chess_unroll_loop(*) を使用して完全に展開することもできます。ループは展開され、同様の独立した文の繰り返しシーケンスに記述し直されます。

ループのフラット化は最終的なスケジューリング フェーズで実行され、コード生成はループ コンストラクトに基づいて実行されます。ループのフラット化とは異なり、ループ展開ではコードの反復が重複し、重複したコードは異なるコンパイルが可能です。これにより、ループのソフトウェア パイプライン処理をより効果的に実行できます。ただし、展開されたループの回数が多い場合、スケジューリングに負担をかけることもあります。