インテル® Fortran コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス

Co-Array の使用

Co-Array は、macOS* システムでは利用できません。

Co-Array は、Fortran 2008 で標準化され Fortran 2018 で拡張されたデータ共有概念で、1 つのプログラムの複数のコピーを使用して並列処理を可能にします。それぞれのコピーはイメージと呼ばれ、通常のローカル変数に加えて、Co-Array または共通変数 (covariable) と呼ばれる共有変数を持ちます。共通変数は配列またはスカラーのいずれかで、プログラムのすべてのイメージで共有されます。この PGAS (Partitioned Global Address Space) モデルでは、各イメージが共通変数のそれぞれの部分にローカル変数としてアクセスすることができ、また角括弧で囲まれた共通インデックス (coindex) を使用してほかのイメージの部分にもアクセスすることができます。

インテル® Fortran は、マルチコアまたはマルチプロセッサー・システムで共有メモリーを使用して実行する Co-Array プログラムをサポートします。一部の製品では (「機能要件」を参照してください)、分散メモリー型の Linux* または Windows* クラスターでも Co-Array プログラムを実行することができます。また、インテル® Xeon Phi™ 製品をターゲットとする場合、Linux* システムでも実行できます。

詳細は、リリースノートのシステム要件を参照してください。

Co-Array を使用してプログラムを作成する方法については、Fortran 2008 言語や ISO Fortran 2008 標準に関する書籍を参照してください。

Co-Array 構文の使用

Fortran 2008 の Co-Array では、次のような追加の構文が必要になります。

次の Fortran 2018 の Co-Array 拡張がサポートされています。

Co-Array コンパイラー・オプションの使用

-coarray (Linux*) または /Qcoarray (Windows*) コンパイラー・オプション (以降、[Q]coarray) を使用して、コンパイラーで Co-Array 構文が認識されるようにする必要があります。このコンパイラー・オプションを使用しないと、Co-Array の構文や機能を使用するプログラムではコンパイル時にエラーが発生します。

リストでは、1 つのオプションのみコマンドラインで有効です。複数の Co-Array コンパイラー・オプションが指定された場合、最後に指定されたオプションが使用されます。この規則の例外は、キーワード single を指定した [Q]coarray コンパイラー・オプションです。指定された場合、コマンドラインの位置に関係なく、このオプションが優先されます。

Co-Array を含むプログラムを実行するのに特別な手順は必要ありません。単に実行ファイルを実行するだけです。並列化の実装にはインテル® MPI ライブラリーを使用します。コンパイラーをインストールすると、共有メモリーで実行するのに必要なインテル® MPI ランタイム・ライブラリーが自動でインストールされます。クラスターをサポートする製品をインストールすると、分散メモリーで実行するのに必要なインテル® MPI ライブラリーのランタイム・ライブラリーが自動でインストールされます。その他の MPI 実装や OpenMP* との Co-Array アプリケーションの使用はサポートされていません。

デフォルトでは、作成されるイメージ数は現在のシステムの実行ユニットの数と同じです。メインプログラムをコンパイルする ifort コマンドラインで [Q]coarray-num-images コンパイラー・オプションを使用してイメージ数を指定することができます。環境変数 FOR_COARRAY_NUM_IMAGES に実行時のイメージ数を指定することもできます。

設定ファイルの使用

config-file オプションの使用は、限られたケースにおいてのみ適切です。

Windows* の例:

Linux* の例:

インテル® MIC アーキテクチャー・ベースのコプロセッサーで実行する場合の注意事項

コンパイラーをインストールすると、コプロセッサーのファイルシステムに必要なインテル® MPI ランタイム・ライブラリーとバイナリーが提供されます。これらのファイルは、カードを再起動するたびにカードのファイルシステムに手動でコピーする必要があります。

次のように、mpirt ディレクトリーを移動し、インテル® MPI ファイルをコピーします。

sudo scp lib/mic/libmpi_mt.so mic0:/lib64/libmpi_mt.so

sudo scp bin/mic/mpiexec.hydra mic0:/bin/mpiexec.hydra

sudo scp bin/mic/pmi_proxy mic0:/bin/pmi_proxy

同じディレクトリーから、Co-Array サポート用インテル® Fortran ランタイム・ライブラリーもカードのファイルシステムにコピーします。

sudo scp lib/mic/libmpi_mt.so mic0:/lib64/libmpi_mt.so

sudo scp bin/mic/mpiexec.hydra mic0:/bin/mpiexec.hydra

sudo scp bin/mic/pmi_proxy mic0:/bin/pmi_proxy

コプロセッサーで実行する場合の Co-Array の構成例

いくつかの構成例を次に示します。

構成例: ホストでイメージ 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

上記のように設定ファイルで指定した場合、myPrognum_images() は 12 になります。

構成例: ホストでイメージ 1 ~ N を実行し、コプロセッサーにコードをオフロードする

この構成では、すべての Co-Array イメージをホスト・プロセッサーで実行しますが、各イメージにコプロセッサーで実行するオフロードコードが含まれます。

この構成では、次のように指定します。

ifort -coarray -coarray-num-images=X myProg.f90 -o myProg

この構成では、コードにオフロード領域を追加し、次のようにディレクティブでマークする必要があります。

!DIR$ OFFLOAD BEGIN
 <ユーザーコード>
 !DIR$ END OFFLOAD

コードには次の制限も適用されます。

最適化に関する注意事項

インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。

注意事項の改訂 #20110804

関連情報