インテル® Fortran コンパイラー 14.0 ユーザー・リファレンス・ガイド
Co-Array は、OS X* システムでは利用できません。
Co-Array は Fortran 2008 標準のデータ共有概念で、1 つのプログラムの複数のコピーを使用して並列処理を可能にします。それぞれのコピーはイメージと呼ばれ、通常のローカル変数に加えて、Co-Array または共通変数 (covariable) と呼ばれる共有変数を持ちます。共通変数は配列またはスカラーのいずれかで、プログラムのすべてのイメージで共有されます。この PGAS (Partitioned Global Address Space) モデルでは、各イメージが共通変数のそれぞれの部分にローカル変数としてアクセスすることができ、また角括弧で囲まれた共通インデックス (coindex) を使用してほかのイメージの部分にもアクセスすることができます。
インテル® Fortran は、マルチコアまたはマルチプロセッサー・システムで共有メモリーを使用して実行する Co-Array プログラムをサポートします。オプションのライセンスを使用することで、分散メモリー型の Linux* または Windows* クラスターでも Co-Array プログラムを実行することができます。また、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャー・ベースの Linux* システムでも実行することができます。
詳細は、リリースノートのシステム要件を参照してください。
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
ATOMIC_DEFINE および ATOMIC_REF (アトミック変数の定義と参照)
Co-Array コンパイラー・オプションの使用
[Q]coarray コンパイラー・オプションを使用して、コンパイラーで Co-Array 構文が認識されるようにする必要があります。 このコンパイラー・オプションを使用しないと、Co-Array の構文や機能を使用するプログラムではコンパイル時にエラーが発生します。
リストでは、1 つのオプションのみコマンドラインで有効です。複数の Co-Array コンパイラー・オプションが指定された場合、最後に指定されたオプションが使用されます。この規則の例外は、single キーワードを指定した [Q]coarray コンパイラー・オプションです。指定された場合、コマンドラインの位置に関係なく、このオプションが優先されます。
キーワードなしで [Q]coarray を使用することは、1 つのノード (共有メモリー) で実行するのと同じです。
shared キーワードを指定して [Q]coarray を使用すると、インテル® メッセージ・パッシング・インターフェース (MPI) ライブラリーの並列化が 1 つのノード (共有メモリー型のマルチコアまたはマルチプロセッサー) で実行されます。
distributed キーワードを指定して [Q]coarray を使用すると、インテル® MPI ライブラリーの並列化がマルチノード環境 (分散メモリー型のマルチ CPU) で実行されます。インテル® クラスター・ツールキットのライセンスが必要です。
-coarray=coprocessor (Linux*) を使用すると、最初のイメージをホストで実行し、ほかのイメージをホストまたはターゲットで実行します。 設定ファイルに正確な構成とイメージを実行する場所を指定します。-coarray-config-file=filename コンパイラー・オプションを使用して設定ファイルを指定します。
single キーワードを指定して [Q]coarray を使用すると、複製されない実行ファイル (1 つの実行イメージ) が生成されます (ほかの Co-Array キーワードが指定された場合は自己複製が行われます)。このオプションは、デバッグに役立ちます。
Co-Array を含むプログラムを実行するのに特別な手順は必要ありません。単に実行ファイルを実行するだけです。並列化の実装にはインテル® MPI ライブラリーを使用します。コンパイラーをインストールすると、共有メモリーで実行するのに必要なインテル® MPI ランタイム・ライブラリーが自動でインストールされます。同様に、インテル® クラスター・ツールキットをインストールすると、分散メモリーで実行するのに必要なインテル® MPI ライブラリーのランタイム・ライブラリーが自動でインストールされます。その他の MPI 実装や OpenMP* との Co-Array アプリケーションの使用はサポートされていません。
デフォルトでは、作成されるイメージ数は現在のシステムの実行ユニットの数と同じです。メインプログラムをコンパイルする ifort コマンドラインで [Q]coarray-num-images コンパイラー・オプションを使用してイメージ数を指定することができます。 環境変数 FOR_COARRAY_NUM_IMAGES に実行時のイメージ数を指定することもできます。
設定ファイルの使用
config-file オプションの使用は、限られたケースにおいてのみ適切です。
前述したように、-coarray=coprocessor コンパイラー・オプション (Linux*) 構文を使用する場合は設定ファイルを指定する必要があります。
Co-Array 環境でインテル® MPI ライブラリーの機能を活用するには、"mpiexec -config filename" を filename ファイルに指定し、/[Q]coarray-config-file: コンパイラー・オプションを使用してファイル名をインテル® MPI ライブラリーに渡します。 コマンドラインで [Q]coarray-num-images コンパイラー・オプションを指定した場合、設定ファイルの指定が優先されます。 MPI 設定ファイルを使用する際の規則は次のとおりです。
設定ファイルの形式は、インテル® MPI ライブラリーのドキュメントで説明されています。Co-Array をマルチノード (分散メモリー) システムで動作させるには、設定ファイルに MPI オプション "-genv FOR_ICAF_STATUS launched" を追加する必要があります。
環境変数 FOR_COARRAY_CONFIG_FILE に実行時に使用するインテル® MPI ライブラリーの設定ファイル名とパスを設定することもできます。
Windows* の例:
/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* の例:
-coarray=shared -coarray-num-images=8 は、共有メモリーシステムで 8 つのイメージを使用して Co-Array プログラムを実行します。
-coarray=distributed -coarray-num-images=8 は、共有メモリーシステムで 8 つのイメージを使用して Co-Array プログラムを実行します (インテル® クラスター・ツールキットのライセンスが必要です)。
-coarray=coprocessor -coarray-config-file=filename は、最初のイメージをホストで実行し、ほかのイメージをホスト・プロセッサーまたはインテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャー・ベースのコプロセッサーの組み合わせで実行する構成で Co-Array プログラムを実行します。このコマンドラインは、filename のインテル® MPI ライブラリー設定を使用します。
コンパイラーをインストールすると、コプロセッサーのファイルシステムに必要なインテル® MPI ランタイム・ライブラリーとバイナリーが提供されます。これらのファイルは、カードを再起動するたびにカードのファイルシステムに手動でコピーする必要があります。
インテル® MPI ファイルは次のようにコピーします。
sudo scp /opt/intel/composer_xe_2013_sp1.NN/mpirt/lib/mic/libmpi_mt.so mic0:/lib64/libmpi_mt.so
sudo scp /opt/intel/composer_xe_2013_sp1.NN/mpirt/bin/mic/mpiexec.hydra mic0:/bin/mpiexec.hydra
sudo scp /opt/intel/composer_xe_2013_sp1.NN/mpirt/bin/mic/pmi_proxy mic0:/bin/pmi_proxy
Co-Array サポート用インテル® Fortran ランタイム・ライブラリーをカードのファイルシステムにコピーします。
sudo scp /opt/intel/composer_xe_2013_sp1.NN/mpirt/lib/mic/libmpi_mt.so mic0:/lib64/libmpi_mt.so
sudo scp /opt/intel/composer_xe_2013_sp1.NN/mpirt/bin/mic/mpiexec.hydra mic0:/bin/mpiexec.hydra
sudo scp /opt/intel/composer_xe_2013_sp1.NN/mpirt/bin/mic/pmi_proxy mic0:/bin/pmi_proxy
いくつかの構成例を次に示します。
構成例: インテル® MIC アーキテクチャー・ベースのコプロセッサーでイメージ 1 ~ N を実行する
この構成では、Co-Array プログラムはイメージをすべてコプロセッサーで実行します。
この構成では、次のように指定します。
ifort -coarray -mmic myProg.f90 -o myProg.mic
myProg.mic を実行する方法は 2 つあります。
1 つ目の方法は、micnativeloadex ツールを使用します。
/opt/intel/mic/coi/tools/micnativeloadex/release/micnativeloadex myProg.mic
micnativeloadex の詳細は、インテル® メニー・インテグレーテッド・コア (インテル® MIC) プラットフォーム・ソフトウェア・スタック (MPSS) のドキュメントを参照してください。
myProg.mic を実行する 2 つ目の方法は、カードのファイルシステムにコピーして、カードから実行します。
この構成では、コンパイル時に -coarray=coprocessor を使用する必要はありません。
構成例: ホストでイメージ 1、インテル® MIC アーキテクチャー・ベースのコプロセッサーでイメージ 2 ~ N を実行する
この構成では、Co-Array プログラムは一部のイメージをホストで実行し、一部のイメージをコプロセッサーで実行します。
この構成では、次のように指定します。
ifort -coarray=coprocessor -coarray-config-file=MixedPlatform.conf myProg.f90 -o myProg
myProg および myProgMIC の 2 つの実行ファイルが生成されます。 myProgMIC をカードのファイルシステムにコピーし、その場所を設定ファイルで指定します。
MixedPlatform.conf ファイルには次の内容が含まれます。
-n 1 -host <hostid-of-CPU> -genv FOR_ICAF_STATUS=T ./myProg : \
-n 4 -host <hostid-of-mic> genv FOR_ICAF_STATUS=T /home/mydir/myProgMIC
構成例: ホストでイメージ 1、ホストとコプロセッサーでイメージ 2 ~ N を実行する
前の例のバリエーションです。設定ファイルでホストまたはコプロセッサーに追加のイメージを指定します。各ホストのイメージ数を指定するため、-n X オプションが使用されています。 例えば、CPU で 4 つのイメージ、4 つのコプロセッサーでそれぞれ 2 つのイメージを実行するには、設定ファイルで次のように指定します。
-n 4 -host MYCPU -genv FOR_ICAF_STATUS=true ./myProg : \ -n 2 -host CARD1 -genv FOR_ICAF_STATUS=true /home/mydir/myProgMIC :\ -n 2 -host CARD2 -genv FOR_ICAF_STATUS=true /home/mydir/myProgMIC :\ -n 2 -host CARD3 -genv FOR_ICAF_STATUS=true /home/mydir/myProgMIC :\ -n 2 -host CARD4 -genv FOR_ICAF_STATUS=true /home/mydir/myProgMIC
上記のように設定ファイルで指定した場合、myProg の num_images() は 12 になります。
構成例: ホストでイメージ 1 ~ N を実行し、コプロセッサーにコードをオフロードする
この構成では、すべての Co-Array イメージをホスト・プロセッサーで実行しますが、各イメージにコプロセッサーで実行するオフロードコードが含まれます。
この構成では、次のように指定します。
ifort -coarray -coarray-num-images=X myProg.f90 -o myProg
この構成では、コードにオフロード領域を追加し、次のように宣言子でマークする必要があります。
!DIR$ OFFLOAD BEGIN <ユーザーコード> !DIR$ END OFFLOAD
コードには次の制限も適用されます。
共通インデックスが付けられたオブジェクトはオフロード領域内で使用できません。
イメージ制御文はオフロード領域内で使用できません。
共通インデックスが付けられたオブジェクトは OpenMP* 領域内で使用できません。
イメージ制御文は OpenMP* 領域内で使用できません。
インテル® コンパイラーは、互換マイクロプロセッサー向けには、インテル製マイクロプロセッサー向けと同等レベルの最適化が行われない可能性があります。これには、インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2)、インテル® ストリーミング SIMD 拡張命令 3 (インテル® SSE3)、ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 命令セットに関連する最適化およびその他の最適化が含まれます。インテルでは、インテル製ではないマイクロプロセッサーに対して、最適化の提供、機能、効果を保証していません。本製品のマイクロプロセッサー固有の最適化は、インテル製マイクロプロセッサーでの使用を目的としています。インテル® マイクロアーキテクチャーに非固有の特定の最適化は、インテル製マイクロプロセッサー向けに予約されています。この注意事項の適用対象である特定の命令セットの詳細は、該当する製品のユーザー・リファレンス・ガイドを参照してください。 改訂 #20110804 |