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

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

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

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

PGI Workstation / Server 製品(Linux 版)は、 PGI 7.1 以降、MPICH-1 ライブラリをバンドルし、インストール時にライブラリ一式を実装できるようになりました。これに伴い、PGI 7.1 以上のライセンスを有するお客様は、この製品系列においても MPICH1 プログラムの MPI 並列デバッギング並びにプロファイリングの機能が使用できるようになりました。その他の MPICH2 や Open MPI等のソフトウェアは、ご自身で構築していただく必要があります。MPICH2 の並列デバッグ機能はありません。これを利用したい場合は、PGI CDKライセンスが必要です。

PGI Cluster Development Kit (CDK) 製品(Linux 版)には、従来から、MPICH1、MPICH2 ライブラリがバンドルされており、これらのMPI ライブラリを使用することができます。さらに、PGI CDK 7.1 以降、高速通信媒体 InfiniBand 用の MVAPICH-1.1 ライブラリもバンドルされておりますので、この三種類の MPI ライブラリが使用でき、これらに対応可能なMPI並列デバッガとプロファイラを利用することができます。

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

PGI Workstation / Server 製品(Mac OS X版)は、Open MPIライブラリをバンドルし、インストール時にライブラリ一式を実装できるようになりました。コンパイルは、mpif90 コマンドで行います。

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

 PGI 9.0 以降、PGI Workstation/Server ライセンスにおいても、以下の -Mmpi= オプションが使用できます。但し、MPICH1(Linux版)、MS-MPI(Windows版)、Open MPI(Mac OS X版)以外の MPI ライブラリは実装されておりませんので、ご自身でMPIライブラリを実装する必要があります。また、PGI CDK for Linux 製品では、MPICH2ならびにMVAPICH1 が付属しており、以下のコンパイル・リンクオプションで使用できます。

Implementation Operating Systems -Mmpi= オプション バンドルしているPGI製品
MPICH1 Linux -Mmpi=mpich1 PGI Linux版に付属
MPICH2 Linux -Mmpi=mpich2 PGI CDKに付属
MVAPICH1 Linux -Mmpi=mvapich1 PGI CDKに付属
HP-MPI Linux -Mmpi=hpmpi --
MS-MPI Windows(R) -Mmpi=msmpi PGI Windows版に付属
Open MPI Mac OS X mpif90/mpicc PGI Mac OS X版に付属

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

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

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

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

(Mac OS X版 プリコンパイル OpenMPI が 実装済み)
 OpenMPI は、Mac OS X 10.4.x (Tiger)ではサポートしません。
  mpif90/mpicc -fastsse -Minfo test.f

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

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

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

● PGI Cluster Development Kit (CDK) 製品

(PGI CDK 7.2 以降追加)
  pgf95/pgcc/pgCC -fastsse -Minfo test.f -Mmpi=hpmpi (HP-MPIライブラリ使用)

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

(PGI CDK 7.0 以前)
 pgf95/pgcc/pgCC -fastsse -Minfo test.f -Mmpi  (MPICH-1ライブラリ使用)
 pgf95/pgcc/pgCC -fastsse -Minfo test.f -Mmpi2 (MPICH-2ライブラリ使用)
  • 一般に、-Mmpi オプションは、PGI コンパイラ製品に実装された MPI ライブラリを使用して MPI 実行モジュールを作成する際に、コンパイル時とリンク時に指定する必要があります。これにより、MPI のインクルードファイルを取り込み、リンク時には適切な MPI ライブラリをリンクできます。
  • Linux システム上では、このオプションは、コンパイル時に -I$MPIDIR/include をセットし、リンク・フェーズでは、-L$MPIDIR/libをコマンドライン上に挿入します。指定されたサブオプション(mpich1,mpich2,mvapich1,hpmpi) は、MPICH-1 、MPICH-2、MVAPICH-1、HP-MPI 通信ライブラリを選択するものです。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 ディレクトリの場所にセットされます。ご自身でセットする必要はありません。

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

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 ライブラリ、並列ツールの具体的な使用方法

PGI製品問合せはソフテックへ