swp プラグマは、ソフトウェアのパイプライン化が行われるループの優先度を示します。プラグマは、データ依存性を使用しません。しかし、プロファイル・カウントまたは等しくない制御フローに基づくヒューリスティックを上書きします。
このプラグマの構文は次のとおりです。
構文 |
---|
#pragma swp #pragma noswp |
swp プラグマで起動されるソフトウェアのパイプライン化の最適化は、最内ループをスケジューリングする命令を適用します。また、ループ内で命令が異なるステージに分割され、増大した命令レベルの並列処理を許可します。
この手法は、長い待ち時間の演算による影響を減らすことができます。その結果、ループ実行が速くなります。ソフトウェアのパイプライン化に選択されるループは、インライン化されないプロシージャー呼び出しを含まない、常に最内ループです。最適化は、完全にアンロールされたループを最内ループとしてもはや認識しないため、完全にアンロールするループは、追加のループを最内ループにすることができます (「ループのアンロール」を参照してください)。
最適化のレポートを表示して、ソフトウェアのパイプライン化が適用されたかどうかを確認できます (「最適化機構レポートの作成」を参照してください)。
次の例では、プラグマを使用してコンパイラーにソフトウェアのパイプライン化を試すように指示する方法を示します。
SWP の使用例 |
---|
void swp(int a[], int b[]) { #pragma swp for (int i = 0; i < 100; i++) if (a[i] == 0) b[i] = a[i] + 1; else b[i] = a[i] * 2; } |