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