MPIプログラム開発用コンパイル・オプション

対象 MPIプログラム PGIコンパイラ オプション

 このページでは、PGI コンパイラを使用して MPI 開発環境に関して説明します。現在のシステムは、1プロセッサに複数のマルチコアを搭載しているため、MPI のプログラム開発も 1 ノード上の複数の並列プロセスを使用して開発できるようになりました。こうした環境では、1ノード内のローカルなマルチコア環境で MPI 並列の開発ができることから、 PGI の Workstation/Server ライセンスにおいても、ローカルノード上での MPI 用のデバッガ、プロファイラを含めた開発環境を提供しています。このページでは、主に、MPIプログラムをコンパイル・リンクする方法について説明します。なお、ローカル並びにリモート・ノードも含めた MPI の開発環境は、 PGI CDK ライセンス製品で可能となっております。
2019年2月8日更新 Copyright © 株式会社ソフテック

PGIコンパイラ製品の MPIライブラリの実装状況

PGI Professional Network Floating(Linux 64ビット版)旧 PGI Cluster Development Kit (CDK) 製品(Linux 版)は、PGI 19.1 以降は Open MPI 3.1.3、PGI 17.10 以降は Open MPI 2.1.2、PGI 16.10 以降、Open MPI 1.10.2 がデフォルトで実装されます。従来の PGI CDK 製品は、PGI Professional Network Floating(Linux 64ビット版)製品に統合されました。

PGI Workstation / Server / Community / Professional Node-locked 製品(Linux 64ビット版)は、PGI 19.1 以降は Open MPI 3.1.3、PGI 17.10以降は Open MPI 2.1.2、PGI 16.1 以降、以前の MPICH version 3 に代えて Open MPI 1.10.x をバンドルしました。 PGI 14.1 以降 PGI 15.10 までは、MPICH version 3 over Ethernet をバンドルしていました(MPI-3 規格準拠ライブラリ)。PGI 7.1~PGI 13.10 までは、、MPICH-1 ライブラリをバンドルし、インストール時にライブラリ一式を実装していました。PGI 14.1 以降をお持ちのお客様は、MPICH v3 の並列デバッギング並びにプロファイリングの機能が使用できます。PGI 7.1 ~ PGI 13.10 のライセンスを有するお客様は、 MPICH1 プログラムの MPI 並列デバッギング並びにプロファイリングの機能が使用できます。その他の MPICH2 や Open MPI等のソフトウェアは、ご自身で構築していただく必要があります。自身で構築した MPI ライブラリの並列デバッグ機能はありません。

PGI Workstation / Server / Community / Professional 製品(Windows 64ビット版)は、 Microsoft(R) HPC Pack SDKで提供されている、MS-MPI ライブラリをコンパイル・オプションレベルで使用できるようになっております。PGI 7.1 以降の Windows 版では、業界で初めて、MS-MPI 対応の MPI 並列デバッガとプロファイラを提供しました。PGI コンパイラを使用することによって、ローカルなノード上で、MPI 開発環境を即座に構築することが可能です。PGI 2013から、MS-MPI ライブラリが PGI ソフトウェアの中にバンドルされており、PGI をインストール時に MS-MPI ライブラリが同時に実装されます。

PGI Community Edition(OS X 64ビット版)は、MPIライブラリをバンドルしておりません。

MPIライブラリを使用する際のコンパイル・オプション(サマリー)

 PGI 2016 以降、Linux用には Open MPI ライブラリがバンドルされました。コンパイル時のコマンドは mpif90/mpicc 等のドライバコマンドを使用します。PGI 2014 ~ PGI 2015では、PGI Workstation/Server ライセンスにおいは、以下の -Mmpi= オプションが使用できます。なお、MPIの実行はローカルな 1 台のシステム内での実行となります(クラスタ・ノード間での実行はできません)。また、Open MPI(Linux版)、MS-MPI(Windows版)以外の MPI ライブラリは実装されておりませんので、他のライブラリが必要な場合はご自身で MPI ライブラリを実装する必要があります。
 PGI CDK for Linux 製品は、同様に MPICH3 が付属しており、mpiexec の実行は、ローカルノード上だけでなく、クラスタ・ワイドで実行出来ます。オプション MPI ライブラリとして、PGI 用のプリコンパイルされた MVAPICH2 と Open MPI が付属しておりますが、これは別途、インストールする必要があります。

Implementation OS/Product -Mmpi= オプション バンドルしているPGI製品 適用バージョン
MPICH1 Linux -Mmpi=mpich1 PGI Linux版に付属 PGI 13.10以前
MPICH2 Linux -Mmpi=mpich2 PGI CDKに付属 PGI 13.10以前
MPICH3 Linux -Mmpi=mpich Linux版に付属 PGI 14.1~PGI 15.10
Open MPI Linux mpif90/mpiccラッパー使用 Linux版に付属 PGI 16.1以降
Open MPI Linux CDK mpif90/mpiccラッパー使用 PGI CDK 版に付属 PGI 14.1以降
MVAPICH1 Linux CDK -Mmpi=mvapich1 PGI CDKに付属 PGI 13.10以前
MVAPICH2 Linux CDK mpif90/mpiccラッパー使用 PGI CDK 版に付属 PGI 14.1以降
MPICH3 Linux CDK -Mmpi=mpich PGI CDK版に付属 PGI 14.1以降
SGI MPI Linux and CDK -Mmpi=sgimpi -- PGI 13.5以降
MS-MPI Windows -Mmpi=msmpi PGI 2013から
PGI Windows版に付属
PGI 7.1以降

MPIプログラムのコンパイル方法

● PGI Workstation and PGI Server 製品 (PGI 16.1 以降)

(Linux 版)
 mpif90/mpicc/mpic++ -fastsse -Minfo {file_name}  (Open MPIライブラリ使用)
  pgfortran/pgcc/pgc++ -fastsse -Minfo {file_name} -Mmpi=sgimpi (SGI MPI ライブラリを別途実装した場合)
 
(Windows 版 MS-MPI)
 pgfortran -fastsse -Minfo test.f90 -Mmpi=msmpi
  pgcc -fastsse -Minfo test.c -Mmpi=msmpi  
  (なお、C++コンパイラは終息しました)

● PGI Workstation and PGI Server 製品 (PGI 14.1 ~ 15.10)

(Linux 版)
 pgfortran/pgcc/pgc++ -fastsse -Minfo {file_name} -Mmpi=mpich (MPICH3 ライブラリ使用)
  pgfortran/pgcc/pgc++ -fastsse -Minfo {file_name} -Mmpi=sgimpi (SGI MPI ライブラリを別途実装した場合)
  なお、OS X 版の pgc++ コマンドは PGI 15.1 から提供開始。それ以前のバージョンでは、pgCC を使用する
  他の Open MPI を使用したい場合は、ご自身でオープンソースからビルドが必要

(Windows 版 MS-MPI : PGI 2013からバンドルされた)
 pgfortran -fastsse -Minfo test.f -Mmpi=msmpi
  pgcc/pgCC -fastsse -Minfo test.c -Mmpi=msmpi 

● PGI Workstation and PGI Server 製品 (PGI 8.0 以降)

(Linux 版)
 pgfortran/pgcc/pgCC -fastsse -Minfo {file_name} -Mmpi=mpich1 (MPICH-1 ライブラリ使用)
  pgfortran/pgcc/pgCC -fastsse -Minfo {file_name} -Mmpi=sgimpi (SGI MPI ライブラリを別途実装した場合)
  他の MPICH2、Open MPIを使用したい場合は、ご自身でオープンソースからビルドが必要

(Windows 版 MS-MPI : Windows HPC pack SDK搭載したシステム上のみ/PGI 2013 からバンドルされた)
 pgfortran/pgcc/pgCC -fastsse -Minfo {file_name} -Mmpi=msmpi 


● PGI Workstation and PGI Server 製品 (PGI 7.1,7.2)

(Linux 版 MPICH-1)
 pgf90/pgcc/pgCC -fastsse -Minfo test.f -Mmpi=mpich1 

(Windows 版 MS-MPI : Windows HPC pack SDK搭載したシステム上のみ)
 pgf90/pgcc/pgCC -fastsse -Minfo test.f -Mmpi=msmpi 

● PGI Cluster Development Kit (CDK) 製品

(PGI CDK 16.1 以降)適切な PATH 環境変数を設定すること
 pgfortran/pgcc/pgc++ -fastsse -Minfo test.f90 -Mmpi=mpich   (MPICH3ライブラリ使用)
 mpif90/mpicc/mpic++  -fastsse -Minfo test.f90  (MVAPICH2ライブラリ使用の場合、wrapper コマンド使用)
 mpif90/mpicc/mpic++  -fastsse -Minfo test.f90  (Open MPIライブラリ使用の場合、wrapper コマンド使用)

(PGI CDK 14.1~15.10)
 pgfortran/pgcc/pgc++ -fastsse -Minfo test.f90 -Mmpi=mpich (MPICH3ライブラリ使用)
 mpif90/mpicc -fastsse -Minfo test.f90  (MVAPICH2ライブラリ使用の場合、wrapper コマンド使用)
 mpif90/mpicc -fastsse -Minfo test.f90  (Open MPIライブラリ使用の場合、wrapper コマンド使用)

(PGI CDK 7.1 以降)
 pgfortran/pgcc/pgCC -fastsse -Minfo test.f -Mmpi=mpich1 (MPICH-1ライブラリ使用)
 pgfortran/pgcc/pgCC -fastsse -Minfo test.f -Mmpi=mpich2 (MPICH-2ライブラリ使用)
 pgfortran/pgcc/pgCC -fastsse -Minfo test.f -Mmpi=mvapich1 (MVAPICHライブラリ使用)

(PGI CDK 7.0 以前)
 pgf90/pgcc/pgCC -fastsse -Minfo test.f -Mmpi  (MPICH-1ライブラリ使用)
 pgf90/pgcc/pgCC -fastsse -Minfo test.f -Mmpi2 (MPICH-2ライブラリ使用)
  • PGI 16.1 以降の Linux 版では、Open MPI がデフォルト使用されるため、コンパイルには、mpif90/mpicc/mpic++ のラッパーを使用して下さい。適切な PATH 環境変数の設定が必要です。このラッパーコマンドを使用する場合は、 -Mmpi オプションは必要ありません。
  • Open MPI 以外はラッパーコマンドを使用しないで、-Mmpi=mpich3 等のオプションを使うことも出来ます。この指定により、PGI コンパイラ製品に実装された MPI ライブラリを使用し、当該 MPI のインクルードファイルを取り込み、リンク時には適切な MPI ライブラリをリンクできます。
  • Linux システム上では、このオプションは、コンパイル時に -I$MPIDIR/include をセットし、リンク・フェーズでは、-L$MPIDIR/libをコマンドライン上に挿入します(予め環境変数 MPIDIR が設定されております)。指定されたサブオプション(mpich1,mpich2,mpich,mvapich1,mvapich2等) は、MPICH-1 、MPICH-2、MPICH-3、MVAPICH-1、MVAPICH2 通信ライブラリを選択するものです。MPICH ライブラリを実装している 「ベース・ディレクトリ($MPIDIR)」 は、サイトのコンパイラ初期設定ファイル siterc に設定されております。PGI が提供するプリ・コンパイル MPICHライブラリは、コンパイラのインストール時に自動的にセットされますが、ユーザ自身がビルドした、MPICH ライブラリの場合でも、MPIDIR のそのベース・ディレクトリのパス名をセットすることにより、上記のようなオプションで MPI ライブラリを使用できます(詳細は、PGI User's Guide をご覧下さい)。なお、siterc ファイルは、例えば、$PGI/linux86-64/{version}/bin 配下に存在します。MPICH2の場合も同様に、環境変数 MPI2DIR と言うものがありますが、ご自身で実装した MPICH2 の場合は、このオプションではなく、mpif90/mpicc 等のコマンドを使用することを推奨します。
  • Windows(R) システム上では、-Mmpi=msmpi オプションにより、コンパイル時に-I$(CCP_INC)/include をセットし、リンク・フェーズでは、-L$(CCP_LIB**)/lib をコマンドライン上に挿入します。CCP_HOME、CCP_SDK 環境変数は、必ずセットされていなければなりませんが、これは一般に、Microsoft(R) HPC pack 2008 SDK をインストールするとき、この変数は、MSMPI ディレクトリの場所にセットされます。ご自身でセットする必要はありません。PGI 14.1 以降は、マイクロソフト社の MS-MPI の環境変数は、MSMPI_INC、MSMPI_LIB32、MPSMPI_LIB64 に変更されております。

MPI ライブラリの利用時のTIPS

PGI 16.1 以降の Linux における 2GB 以上のメモリ空間を有する場合のコンパイル法

 PGI 16.1 以降では、従来の MPICH3 に代えて、Open MPI がバンドルされデフォルトで使用されます。2GB 以上のメモリ空間を有するプログラムの場合は、-mcmodel=medium オプションを指定してください。

【Open MPIの場合】
$ mpif90 -fastsse -Minfo -mcmodel=medium  -o a.out mpihello.f
$ mpicc -fastsse -Minfo -mcmodel=medium -o a.out mpihello.c
$ mpic++ -fastsse -Minfo -mcmodel=medium -o a.out mpihello.cpp

PGI 14.1~15.10 の Linux における 2GB 以上のメモリ空間を有する場合のコンパイル法

 PGI 14.1 ~ PGI 15.10 では、MPICH3 がバンドルされました。これに伴い、2GB 以上のメモリ空間を有するプログラムの場合でも、-Mmpi=mpich と -mcmodel=medium オプションを指定するだけで、実行バイナリが生成されます。

【MPICH3 の場合】
$ pgfortran -fastsse -Minfo -Mmpi=mpich -mcmodel=medium  -o a.out mpihello.f
$ pgcc -fastsse -Minfo -Mmpi=mpich -mcmodel=medium -o a.out mpihello.c

PGI 13.10 以前の Linux における 2GB 以上のメモリ空間を有する場合のコンパイル法

 Linux では、2GB 以上のオブジェクトを作成する場合のオプション -mcmodel=medium があります。このオプションを使用してコンパイルする場合の方法を説明します。MPICH1 と MVAPICH1 の場合は、-Mmpi=**** のオプションでコンパイル・リンクする方法ではなく、MPIスクリプトコマンドの mpif90/mpicc 等を使用して -shlib オプションを付加してコンパイルして下さい。
 また、MPICH2 の場合もMPIスクリプトコマンドの mpif90/mpicc を使用して下さい。この場合は、-shlib オプションは必要ありません。

【MPICH1/MVAPICH1 の場合】
$ mpif90 -fastsse -Minfo -mcmodel=medium -shlib -o a.out mpihello.f
$ mpicc -fastsse -Minfo -mcmodel=medium -shlib -o a.out mpihello.c

------------------------------------------------------------------------------------
【MPICH2 の場合】
$ mpif90 -fastsse -Minfo -mcmodel=medium  -o a.out mpihello.f
$ mpicc -fastsse -Minfo -mcmodel=medium  -o a.out mpihello.c

各 MPI ライブラリ、並列ツールの具体的な使用方法