インテル® Fortran コンパイラー 14.0 ユーザー・リファレンス・ガイド

ベクトル化の関数のアノテーションと SIMD 宣言子

ここでは、コードのベクトル化に役立つ特定の Fortran 言語機能について説明します。

SIMD ベクトル化機能は、インテル製マイクロプロセッサーおよび互換マイクロプロセッサーの両方で利用可能です。ベクトル化により呼び出されるライブラリー・ルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーにおいてより優れたパフォーマンスが得られる可能性があります。また、ベクトル化は、/arch (Windows*)、-m (Linux* および OS X*)、[Q]x などの特定のオプションによる影響を受けます。

!DIR$ ATTRIBUTES ALIGN:N 宣言を使用することで、ハードウェアのアライメント条件を変更できます。 restrict 指示子と自動ベクトル化ヒントは、語彙スコープ、データの依存性、両義性の解決による書き方に関する問題を処理します。

!DIR$ ATTRIBUTES VECTOR::FUNCTION-NAME-LIST!DIR$ ATTRIBUTES VECTOR[:CLAUSES]::FUNCTION-NAME-LIST 宣言子は、ユーザー指示による関数およびループをベクトル化するのに使用できます。 SIMD の使用では、vector 関数はベクトル化されるループから呼び出されます。 この関数はループの一部として、ベクトル演算に実装されなければなりません。

タスク並列処理の実装は呼び出し位置で行われるのに対して、VECTOR 宣言子オプションの使用モデルでは、関数用に生成されたコードは実際に配列の小さなセクション (VECTORLENGTH) を値で受け取り、SIMD 並列処理を活用します。

次の表は、コードのベクトル化に役立つ言語機能をまとめたものです。

言語機能

説明

!DIR$ ATTRIBUTES ALIGN : n :: var

変数を n バイト境界にアライメントするようにコンパイラーに指示します。 変数のアドレスは address mod n=0 です。

!DIR$ ATTRIBUTES ALIGN : n :: off

n バイト境界内でオフセットだけ離して変数を n バイト境界にアライメントするようにコンパイラーに指示します。 変数のアドレスは address mod n=off です。

!DIR$ ATTRIBUTES VECTOR::FUNCTION-NAME-LIST

呼び出し位置で map 演算と組み合わせて、データ並列セマンティクスを提供します。 並列コンテキスト内に vector 宣言の複数のインスタンスが起動する場合、順次に実行されません。

!DIR$ ATTRIBUTES VECTOR

呼び出し位置でベクトル演算またはループと組み合わせて、データ並列セマンティクスを提供します。並列コンテキスト内に vector 宣言の複数のインスタンスが起動する場合、順次に実行されません。

  • PROCESSOR

  • VECTORLENGTH

  • LINEAR

  • UNIFORM

  • [NO]MASK

自動ベクトル化ヒント

!DIR$ IVDEP

ベクトル依存性が存在していると推定されてもそれを無視するようにコンパイラーに指示します。

!DIR$ VECTOR [ALWAYS]

ループをベクトル化する方法を指定し、効率ヒューリスティックについては無視したほうが良いことを示します。ASSERT キーワードを VECTOR [ALWAYS] 宣言子とともに使用すると、コンパイラーの効率性ヒューリスティックはループがベクトル化できないことを示している旨のエラーメッセージを生成します。 !DIR$ IVDEP を使用して、想定された依存性を無視してください。

!DIR$ NOVECTOR

ループをベクトル化しないように指定します。

これらの宣言子はインテル製マイクロプロセッサーおよび互換マイクロプロセッサーで利用可能ですが、インテル製マイクロプロセッサーにおいてより多くの最適化が行われる場合があります。

ユーザー指示による宣言子

!DIR$ SIMD

ループのベクトル化を実行します。

関連情報


このヘルプトピックについてのフィードバックを送信