インテル® Fortran コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
ここでは、コードのベクトル化に役立つ特定の Fortran 言語機能について説明します。 SIMD ベクトル化機能は、インテル製マイクロプロセッサーおよび互換マイクロプロセッサーの両方で利用可能です。ベクトル化により呼び出されるライブラリー・ルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーにおいてより優れたパフォーマンスが得られる可能性があります。また、ベクトル化は、/arch や /Qx (Windows*) または -m や -x (Linux* および OS X*) などの特定のオプションによる影響を受けます。
__declspec(align(n)) 宣言を使用することで、ハードウェアのアライメント条件を変更できます。 restrict 指示子と自動ベクトル化ヒントは、語彙スコープ、データの依存性、両義性の解決による書き方に関する問題を処理します。 SIMD 機能の宣言子によりループのベクトル化を実行できます。
cDEC$ ATTRIBUTES VECTOR::FUNCTION-NAME-LIST と cDEC$ ATTRIBUTES VECTOR[:CLAUSES]::FUNCTION-NAME-LIST 宣言子は、ユーザー指示による関数およびループをベクトル化するのに使用できます。 SIMD の使用では、vector 関数はベクトル化されるループから呼び出されます。 この関数はループの一部として、ベクトル演算に実装されなければなりません。
配列表記では、問題のサイズにかかわらず同じ演算を記述し、演算の実装に SIMD、ループ、タスキングを組み合わせて最適な構造が使用されるようにできます。 これらのセマンティクスにより、さらに精巧なプログラミングを選択し、推奨される並列実行とベクトル実行を行うため、タスク構造と配列演算の両方を使用して 2 レベルで単一の次元演算を表現できます。
タスク並列処理の実装は呼び出し位置で行われるのに対して、宣言VECTOR 宣言子オプションの使用モデルでは、関数用に生成されたコードは実際に配列の小さなセクション (VECTORLENGTH または VECTORLENGTHFOR) を値で受け取り、SIMD 並列処理を活用します。
次の表は、コードのベクトル化に役立つ言語機能をまとめたものです。