インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
ここでは、コードのベクトル化に役立つ特定の Fortran 言語機能について説明します。
SIMD ベクトル化機能は、インテル製マイクロプロセッサーおよび互換マイクロプロセッサーの両方で利用可能です。ベクトル化により呼び出されるライブラリー・ルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーにおいてより優れたパフォーマンスが得られる可能性があります。また、ベクトル化は、/arch (Windows*)、-m (Linux* および macOS*)、[Q]x などの特定のオプションによる影響を受けます。
!DIR$ ATTRIBUTES ALIGN:N ディレクティブを使用することで、ハードウェアのアライメント条件を変更できます。restrict 修飾子と自動ベクトル化ヒントは、語彙スコープ、データの依存性、両義性の解決による書き方に関する問題を処理します。SIMD 機能のディレクティブによりループのベクトル化を実行できます。
!DIR$ ATTRIBUTES VECTOR[:clauses]::function-name-listディレクティブは、ユーザー指示による関数およびループをベクトル化するのに使用できます。SIMD の使用では、VECTOR 属性を持つ関数はベクトル化されるループから呼び出されます。
および 宣言により、関数のユーザー定義のベクトル実装を提供できます。
タスク並列処理の実装は呼び出し位置で行われるのに対して、VECTOR 属性の使用モデルでは、関数用に生成されたコードは実際に配列の小さなセクション (VECTORLENGTH) を値で受け取り、SIMD 並列処理を活用します。
次の表は、コードのベクトル化に役立つ言語機能をまとめたものです。
言語機能 |
説明 |
---|---|
!DIR$ ATTRIBUTES ALIGN : n :: var |
変数を n バイト境界にアライメントするようにコンパイラーに指示します。変数のアドレスは address mod n=0 です。 |
!DIR$ ATTRIBUTES VECTOR [: clauses] :: function-name-list |
呼び出しでベクトル演算またはループと組み合わせて、データ並列セマンティクスを提供します。並列コンテキスト内に vector 宣言の複数のインスタンスが起動する場合、順次に実行されません。clauses は次のとおりです。
|
自動ベクトル化ヒント | |
!DIR$ IVDEP |
ベクトル依存性が存在していると推定されてもそれを無視するようにコンパイラーに指示します。 |
!DIR$ VECTOR [ALWAYS] |
ループをベクトル化する方法を指定し、効率ヒューリスティックについては無視したほうが良いことを示します。ASSERT キーワードを VECTOR [ALWAYS] ディレクティブとともに使用すると、コンパイラーの効率性ヒューリスティックがループをベクトル化できない場合、エラーメッセージが生成されます。!DIR$ IVDEP を使用して、想定された依存性を無視してください。 |
!DIR$ NOVECTOR |
ループをベクトル化しないように指定します。 |
一部のディレクティブはインテル製マイクロプロセッサーおよび互換マイクロプロセッサーで利用可能ですが、インテル製マイクロプロセッサーにおいてより多くの最適化が行われる場合があります。
ユーザー指示によるディレクティブ | |
---|---|
!DIR$ SIMD |
ループのベクトル化を実行します。 |
ループの SIMD ベクトル化を要求して制御します。 |