Co-Array は Fortran 2008 標準のデータ共有概念で、1 つのプログラムの複数のコピーを使用して並列処理を可能にします。それぞれのコピーはイメージと呼ばれ、通常のローカル変数に加えて、Co-Array または共通変数 (covariable) と呼ばれる共有変数を持ちます。共通変数は配列またはスカラーのいずれかで、プログラムのすべてのイメージで共有されます。この PGAS (Partitioned Global Address Space) モデルでは、各イメージが共通変数のそれぞれの部分にローカル変数としてアクセスすることができ、また角括弧で囲まれた共通インデックス (coindex) を使用してほかのイメージの部分にもアクセスすることができます。
インテル® Fortran は、マルチコアまたはマルチプロセッサー・システムで共有メモリーを使用して実行する Co-Array プログラムをサポートします。オプションのラインセンスを使用することで、分散メモリー型の Linux* OS または Windows* OS クラスターでも Co-Array プログラムを実行することができます。詳細は、製品のシステム要件を参照してください。
Co-Array は Mac OS* X ではサポートされていません。
Co-Array を使用してプログラムを作成する方法については、Fortran 2008 言語や ISO Fortran 2008 標準に関する書籍を参照してください。
Co-Array 構文の使用
Co-Array では、次のような追加の構文が必要になります。
CODIMENSION 属性と "[共通境界 (cobound)]" は、オブジェクトを Co-Array (共通変数) として宣言します。
[共通インデックス] は共通変数またはほかのイメージを参照します。
SYNC ALL、SYNC IMAGES、および SYNC MEMORY 文はイメージが共有データの同期を行わなければならない場所を示します。
CRITICAL と END CRITICAL 文は同時に 1 つのイメージのみが実行できるコード領域をブロック化します。
LOCK と UNLOCK 文は特定のイメージの動作を同期するのに使用されるロックと呼ばれるオブジェクトを制御します。
ERROR STOP 文はすべてのイメージを終了します。
ALLOCATE と DEALLOCATE 文は Co-Array を指定します。
組み込みプロシージャー IMAGE_INDEX、LCOBOUND、NUM_IMAGES、THIS_IMAGE、および UCOBOUND
Co-Array コンパイラー・オプションの使用
/Qcoarray (Windows* OS) または -coarray (Linux* OS) コンパイラー・オプションを使用してコンパイラーにより Co-Array 構文が認識されるようにする必要があります。 このコンパイラー・オプションを使用しないと、Co-Array の構文や機能を使用するプログラムではコンパイル時にエラーが発生します。
/Qcoarrays:shared (Windows* OS) または -coarrays=shared (Linux* OS) を使用すると、インテル® メッセージ・パッシング・インターフェース (MPI) の並列化がシングルノード環境 (共有メモリー型のマルチコアまたはマルチ・プロセッサー環境) で実行されます。 /Qcoarrays:distributed (Windows* OS) または -coarrays=distributed (Linux* OS) を使用するにはインテル® クラスター・ツールキットのライセンス必要で、このオプションを使用するとインテル® MPI ライブラリーの並列化がマルチコア環境 (分散メモリー型のマルチ CPU 環境) で実行されます。 引数なしで /Qcoarrays (Windows* OS) または -coarrays (Linux* OS) を使用することは、シングルノード (共有メモリー) で実行するのと同じです。
Co-Array を含むプログラムを実行するのに特別な手順は必要ありません。単に実行ファイルを実行するだけです。 Co-Array ではインテル® MPI ライブラリーの並列実装が使用されます。コンパイラーをインストールすると、共有メモリーで実行するのに必要なインテル® MPI ライブラリーのランタイム・ライブラリーが自動でインストールされます。 同様に、インテル® クラスター・ツールキットをインストールすると、分散メモリーで実行するのに必要なインテル® MPI ライブラリーのランタイム・ライブラリーが自動でインストールされます。 その他の MPI 実装や OpenMP* との Co-Array アプリケーションの使用はサポートされていません。
デフォルトでは、作成されるイメージの数は現在のシステムの実行ユニットの数と同じです。 ifort コマンドラインでメインプログラムをコンパイルする際に、/Qcoarray-num-images:n (Windows* OS) または-coarray-num-images=n (Linux* OS) を使用してこの値を変更できます。 また、実行時に環境変数 FOR_COARRAY_NUM_IMAGES でイメージ数を指定することもできます。
Co-Array 環境でインテル® MPI ライブラリーの機能を活用するには、"mpiexec -config filename" を filename ファイルに追加して、/Qcoarray-config-file:filename (Windows* OS) または -coarray-config-file=filename (Linux* OS) とともにインテル® MPI ライブラリーに渡します。
ほとんどの場合、config-file オプションを使用する必要はありません。config-file オプションの使用は、環境で必要ないくつかの MPI 機能を呼び出す必要がある場合など、限られたケースにおいてのみ適切です。
MPI 設定ファイルを使用する際の規則は次のとおりです。
/Qcoarray-config-file:filename (Windows* OS) または -coarray-config-file=filename (Linux* OS) を使用する場合、/Qcoarray-num-images (Windows* OS) または -coarray-num-images (Linux* OS) はコマンドラインで指定できません。
設定ファイルの形式は、インテル® MPI ライブラリーのドキュメントで説明されています。Co-Array がマルチノード (分散メモリー) システムで動作するためには、設定ファイルに MPI オプション "-genv FOR_ICAF_STATUS launched" を追加する必要があります。
または、環境変数 FOR_COARRAY_CONFIG_FILE に実行時に使用するインテル® MPI ライブラリーの設定ファイル名とパスを設定することもできます。
Windows* OS の例:
/Qcoarray:shared /Qcoarray-num-images:8 は、共有メモリーシステムで 8 つのイメージを使用して Co-Array プログラムを実行します。
/Qcoarray:shared /Qcoarray-confi-file:filename は、共有メモリーシステムで filename の MPI 設定を使用して Co-Array プログラムを実行します。
/Qcoarray:distributed /Qcoarray-config-file:filename は、分散メモリーシステムで filename のインテル® MPI ライブラリー設定を使用して Co-Array プログラムを実行します (インテル® クラスター・ツールキットのライセンスが必要です)。
Linux* OS の例:
-coarray=shared -coarray-num-images=8 は、共有メモリーシステムで 8 つのイメージを使用して Co-Array プログラムを実行します。
-coarray=distributed -coarray-num-images=8 は、共有メモリーシステムで 8 つのイメージを使用して Co-Array プログラムを実行します (インテル® クラスター・ツールキットのライセンスが必要です)。
-coarray=distributed -coarray-confi-file=filename は、分散メモリーシステムで filename のインテル® MPI ライブラリー設定を使用して Co-Array プログラムを実行します。
最適化に関する注意事項 |
---|
インテル® コンパイラー、関連ライブラリーおよび関連開発ツールには、インテル製マイクロプロセッサーおよび互換マイクロプロセッサーで利用可能な命令セット (SIMD 命令セットなど) 向けの最適化オプションが含まれているか、あるいはオプションを利用している可能性がありますが、両者では結果が異なります。また、インテル® コンパイラー用の特定のコンパイラー・オプション (インテル® マイクロアーキテクチャーに非固有のオプションを含む) は、インテル製マイクロプロセッサー向けに予約されています。これらのコンパイラー・オプションと関連する命令セットおよび特定のマイクロプロセッサーの詳細は、『インテル® コンパイラー・ユーザー・リファレンス・ガイド』の「コンパイラー・オプション」を参照してください。インテル® コンパイラー製品のライブラリー・ルーチンの多くは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーでより高度に最適化されます。インテル® コンパイラー製品のコンパイラーとライブラリーは、選択されたオプション、コード、およびその他の要因に基づいてインテル製マイクロプロセッサーおよび互換マイクロプロセッサー向けに最適化されますが、インテル製マイクロプロセッサーにおいてより優れたパフォーマンスが得られる傾向にあります。 インテル® コンパイラー、関連ライブラリーおよび関連開発ツールは、互換マイクロプロセッサー向けには、インテル製マイクロプロセッサー向けと同等レベルの最適化が行われない可能性があります。これには、インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2)、インテル® ストリーミング SIMD 拡張命令 3 (インテル® SSE3)、ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 命令セットに関連する最適化およびその他の最適化が含まれます。インテルでは、インテル製ではないマイクロプロセッサーに対して、最適化の提供、機能、効果を保証していません。本製品のマイクロプロセッサー固有の最適化は、インテル製マイクロプロセッサーでの使用を目的としています。 インテルでは、インテル® コンパイラーおよびライブラリーがインテル製マイクロプロセッサーおよび互換マイクロプロセッサーにおいて、優れたパフォーマンスを引き出すのに役立つ選択肢であると信じておりますが、お客様の要件に最適なコンパイラーを選択いただくよう、他のコンパイラーの評価を行うことを推奨しています。インテルでは、あらゆるコンパイラーやライブラリーで優れたパフォーマンスが引き出され、お客様のビジネスの成功のお役に立ちたいと願っております。お気づきの点がございましたら、お知らせください。 改訂 #20110307 |
© 1996-2011 Intel Corporation. 無断での引用、転載を禁じます。