Co-Array の使用

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

Co-Array は、Fortran 2008 で標準化され Fortran 2018 で拡張されたデータ共有概念で、1 つのプログラムの複数のコピーを使用して並列処理を可能にします。それぞれのコピーはイメージと呼ばれ、通常のローカル変数に加えて、Co-Array または covariable と呼ばれる共有変数を持ちます。

covariable は配列またはスカラーのいずれかで、プログラムのすべてのイメージで共有されます。この PGAS (Partitioned Global Address Space) モデルでは、各イメージが共変数のそれぞれの部分にローカル変数としてアクセスすることができ、また角括弧で囲まれた coindex を使用してほかのイメージの部分にもアクセスすることができます。

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

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

Co-Array は 64 ビット・アーキテクチャーでのみサポートされます。

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 つの [Q]coarray オプションのみ有効です。複数の [Q]coarray オプションを指定すると、最後に指定されたものが使用されます。この規則の例外は、キーワード single を指定した [Q]coarray コンパイラー・オプションです。指定された場合、コマンドラインの位置に関係なく、このオプションが優先されます。

オプションのキーワードは次のとおりです。

Co-Array を含むプログラムを実行するのに特別な手順は必要ありません。単に実行ファイルを実行するだけです。

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

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

設定ファイルの使用

[Q]coarray-num-images コンパイラー・オプションを指定して設定ファイルを使用することは、限られたケースでのみ適切です。

主な理由として、Co-Array 環境でインテル® MPI ライブラリーの機能を活用する場合が挙げられます。この場合、"mpiexec -config filename" を filename ファイルに指定し、[Q]coarray-config-file コンパイラー・オプションを使用してファイル名をインテル® MPI ライブラリーに渡します。

コマンドラインで [Q]coarray-num-images コンパイラー・オプションを指定した場合、設定ファイルの指定が優先されます。

インテル® MPI ライブラリーの設定ファイルを使用する際の規則は次のとおりです。

設定環境変数の使用

インテル® Fortran は、インテル® MPI ライブラリーを Co-Array 機能のトランスポート・レイヤーとして使用します。インテル® MPI ライブラリーは、環境変数を使用して特定の使用パターンに合わせて調整できます。

インテル® Fortran では、インテル® MPI ライブラリーのいくつかの制御変数を、ほとんどのユーザーや多くの Co-Array 使用パターンに適した値に設定しています。インテル® Fortran が設定していないほかの変数を設定することも可能です。インテル® Fortran が設定しない変数は、ほかの使用パターンでパフォーマンスが低下する可能性があったり、古いバージョンのインテル® MPI ライブラリーで使用するとエラーが発生する可能性があるためです。

インテル® MPI ライブラリー 2019 Update 5 以降の共有メモリーで動作するアプリケーションでは、次の 2 つの変数を "shm'" に設定することで利点が得られます。

I_MPI_FABRICS

I_MPI_DEVICE

Linux* システムで上記の環境変数を設定すると、共有メモリーの使用量が増えるため、Red Hat* 7.2 および Ubuntu* ではハングアップすることがあります。Linux* のバスエラー (SIGBUS) を回避するには、/dev/shm のサイズを大きくする必要があります。

オーバーサブスクライブする (マシンの実際のプロセッサー数よりも多くの Co-Array イメージを実行する) アプリケーションでは、以下の変数を 1 に設定するとよいでしょう。

I_MPI_WAIT_MODE

オーバーサブスクライブが多いアプリケーション (1 プロセッサーあたり 5 イメージ以上) では、以下の変数を 3 に設定するとよいでしょう。

I_MPI_THREAD_YIELD

これらは、設定環境変数の使用に関する基本です。インテル® MPI ライブラリーの調整に使用できる環境変数はほかにも多数あります。詳細は、『Intel® MPI Library Developer Reference』の「Other Environment Variables」を参照してください。

Windows* の例:

Linux* の例:

関連情報