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