ソフテック・トップページへ
ホーム 製品 セキュリティ・サービス HPCサービス ダウンロード 企業情報

PGI compiler TIPS
MPICH1 ライブラリの生成方法
技術情報・TIPS > MPICH ライブラリの作成

 全てのコンパイル・オプション

PGI コンパイラを使用して MPICH1 のライブラリを作成する

PGI コンパイラを使用して、並列メッセージ・パッシング・インタフェース MPICH1 を作成する方法を以下に述べます。なお、これは、MPICH2 をインストールする方法ではありませんのでご注意ください。MPICH のフルセットのライブラリ・ユーティリティを作成するためには、FORTRAN 77、Fortran 90 並びに C、 C++ の言語コンパイラが必要です。PGI を使用して MPICH を作成するには、 pgf77, pgf90, pgcc, pgCC の各言語コンパイラを使用するため、PGI Workstation Complete 製品をご利用いただければ、以下のインストラクションに従って、MPICH ライブラリを作成することができます。

(PGI 7.1 以降)
PGI 7.1 から全ての Linux 版に MPICH-1 ライブラリがバンドルされました。この使用方法等については、以下のページで説明しております

● MPICHのソースファイルを入手する

以下の URL から mpich のソースファイル (mpich.tar.gz) をダウンロードします。ここでは、2006年 12 月時点でのバージョン mpich-1.2.7p1 バージョンの生成について述べます。
 http://www-unix.mcs.anl.gov/mpi/mpich1/

● ソースファイルのアーカイブを展開する

ダウンロードした mpich.tar.gz のアーカイブを Linux システム上の作業エリア(ここでは、/tmp 配下)に移動します。このアーカイブを以下のコマンドで展開します。

   # tar xzvf mpich.tar.gz

展開すると、mpich-1.2.7 と言うディレクトリが作成されますので、そのディレクトリへ移動します。

   # cd mpich-1.2.7p1

このディレクトリ配下に、configure と言うスクリプトファイルがありますので、このスクリプトを実行して、mpich 作成用の Makefile を自動生成します。PGI コンパイラを使用した configure スクリプトに対する引数は、以下に説明します。

● MPICH の configure シェルを実行し、Makfile を作成する

以下に示す環境変数をセットしてから、 "configure" スクリプトを実行します。

env CFLAGS="-fast" CXXFLAGS="-fast" FFLAGS="-fast" F90FLAGS="-fast" LDFLAGS="-fast" \
OPTFLAGS="-fast"  CC="pgcc" CXX="pgCC"  F90="pgf90"  FC="pgf77"  CPP="pgCC -E" \
./configure  --prefix=/export/mpich127 --enable-debug 
  • FC/F77 環境変数は、MPICH の生成において使用する FORTRAN77 コンパイラのコマンド名を記述します。
  • F90 環境変数は、MPICH の生成において使用する Fortran90 コンパイラのコマンド名を記述します。
  • CC 環境変数は、MPICH の生成において使用する C コンパイラのコマンド名を記述します。PGI C コンパイラ (pgcc) がない場合は、gcc で代用します。その際は、CFLAGS="-O2"としてください。また、OPTFLAGS="-fast" LDFLAGS="-fast"を指定しないでください。
  • CXX 環境変数は、MPICH の生成において使用する C++ コンパイラのコマンド名を記述します。PGI C++ コンパイラ (pgCC) がない場合は、g++ で代用します。その際は、CFLAGS="-O2"としてください。また、OPTFLAGS="-fast" LDFLAGS="-fast"を指定しないでください。
  • CFLAGS, FFLAGS, CXXFLAGS, F90FLAGS 環境変数は、各コンパイラに与えるコンパイル・オプションをそれぞれ指定します。
  • OPTFLAGS 環境変数は、mpich ソースをコンパイルする際の全体に渡るコンパイラ最適化オプションを指定します。
  • -prefix オプションは、mpich ライブラリ並びにユーティリティをインストールする正式なディレクトリ名を指定します。上記の例では、ライブラリの正規のインストール先が /export/mpich127 配下にインストールせよと言う意味になります。--enable-debug は、デバッガを使用する際のデバッグ情報を出力するためのオプションで、必要がなければ付加する必要はありません。

(注意) 生成した MPICH ライブラリを -mcmodel=medium でコンパイルしたオブジェクトとリンクするような状況が見込まれるときは、以下のオプションを追加してください。-mcmodel=medium オプションは、配列データ領域 2GB 以上の実行モジュールを生成する際に使用するオプションです。 各言語のコンパイルオプションに -fpic を追加します。

env CFLAGS="-fast -fpic" CXXFLAGS="-fast -fpic" FFLAGS="-fast -fpic" \
    F90FLAGS="-fast -fpic" LDFLAGS="-fast" OPTFLAGS="-fast" \
    CC="pgcc" CXX="pgCC"  F90="pgf90"  \
    FC="pgf77"  CPP="pgCC -E" \
./configure  --prefix=/export/mpich127 --enable-debug 

● Makefile が作成された後に、make を実行し、ライブラリの生成を行う

# make
  • ./configure を実行した後に、Makefile が自動生成されますので、このファイルを使用して make を実行します。順次、コンパイル・リンクされ、ライブラリと実行コマンドが生成されます。

● 生成されたライブラリ等を正規の場所にインストールする

# make install
if [ "/export/mpich126" = "/export/mpich127" ] ; then \
    ./bin/mpiinstall  ; \
else \
    ./bin/mpiinstall -prefix=/export/mpich127  ; \
fi
Installing documentation ...
Done installing documentation
Installing manuals
Done installing manuals
Installing MPE
Copying MPE include files to /export/mpich127/include
Copying MPE libraries to /export/mpich127/lib
Copying MPE utility programs to /export/mpich127/bin
(以下、略)

ルート権限で、make install のコマンドで、正規のインストール先にライブラリ並びにコマンド群がインストールされます。
"make install" の実行においては、その実行の後半でテストプログラムのコンパイル・リンクのチェックがありますが、Xライブラリのリンクができない等のエラーでその試験は実行されないことがあります。これは無視して結構です。MPICHのライブラリ自体は、インストールされております。

● デフォルトの machinefile の設定

MPICH を使用した並列実行では、並列処理(計算)に使用するマシンを設定しておく必要があります。これは、mpirun コマンドの引数である -machinefile <host_file> でも明示的に指定できますが、その並列計算に使用するマシン構成のデフォルトを設定するためには、以下のファイルにホスト名を定義します。ここでは、MPICH ライブラリが、 /export/mpich127 にインストールされたとした場合について述べます。

 # cd /export/mpich127/share  に移動

この配下に、machines.LINUX ファイルがありますので、並列計算で使用するホスト名を順番に記述します。ホスト名 photon1 〜 photon5 を使用する場合は、以下の例のようになります。

 # Change this file to contain the machines that you want to use
 # to run MPI jobs on. The format is one host name per line, with either
 # hostname
 # or
 # hostname:n
 # where n is the number of processors in an SMP. The hostname should
 # be the same as the result from the command "hostname"
 photon1
 photon2
 photon3
 photon4
 photon5

並列実行においては、上記で指定したホスト名の順番(ラウンドロビン)に、並列使用する CPU の割当を行っていきます。
なお、SMPシステムのような複数の CPU をもつ場合は、host_name: x と言う形式で指定します。 x はcpu数を意味します。このように指定した場合、SMP内の 2CPU が順番に並列プロセスによって使用されます。

 photon6:2  (この場合は、2CPU をもつ SMP システム [photon6] であることを意味します)

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

● MPI プログラムのコンパイル・コマンドと実行コマンド

MPI プログラムをコンパイル・リンクする際には、必要とされる MPICH のライブラリとインクルードファイルを明示的に指定する必要がありますが、この指定を明示的に行わないで済むコマンドが、上記のMPICH の生成時に作成されています。

 # cd /export/mpich127/bin  に移動

この配下には、PGI コンパイラをベースとした各 MPI コンパイラコマンド(ドライバ)が置かれています。

 mpif77 : FORTRAN 77 コマンド 
 mpif90 : Fortran 90/95 コマンド
 mpicc  : C コマンド
 mpicxx : C++ コマンド

また、MPIプログラムを実行するためには、以下のコマンドを使用します。

 mpirun : MPIプログラムの実行コマンド

上記のコマンドをデフォルトとして使用したい場合は、/export/mpich126/binを PATH に追加してください。

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

MPI プログラムをコンパイルする例を示します。以下の例のように、必要となる PGI のコンパイル・オプションを入れてください。

 # mpif90 <PGI のコンパイルオプション> test.f -o test.exe

MPI ライブラリで生成された、mpif90 等の並列コンパイラ(ドライバ)を使いたくないと言う場合は、以下のような native な PGI コンパイラコマンドを使用して、MPICH のライブラリとインクルードファイルを明示的に指定し実行モジュールを作成します。下の例では、PGIの他のコンパイルオプションは指定していませんので、実際には適宜、指定してください(例: -fastsse 等)
 
# pgf90 -fastsse -I/export/mpich127/include test.f -L/export/mpich127/lib -lfmpich -lmpich
 (-I (アイ): MPICH インクルードファイルの在り処)  (-L : MPIライブラリの場所) (-l (エル) : MPIライブラリの指定)

● MPI プログラムの実行方法

上記の方法で、MPI プログラムをコンパイルして実行モジュール test.exe を作成したものとします。これを実行するためには、以下のコマンドを使用します。

 #mpirun -np 4 test.exe

(mpich のバージョンを調べたい場合は、 e.g. mpirun -np 1 a.out -mpiversion を実行)
-np で指定される数字は、並列計算に使用する CPU 数です。また、並列計算で使用されるホスト名は、上記のデフォルトの machinefile (machines.LINUX)の中のホストが順番に使用されます。このデフォルトのマシンを使用しない場合は、mpirun コマンドの引数に使用するホスト名を記述したファイル(ここでは、HOST)を明示的に指定します。

 # mpirun -np 4 -machinefile HOST test.exe

ここで、HOST ファイルには、並列使用するホスト名が記述されています。1 行につき、ホスト名を一つ記載します。

 # vi HOST
 photon10
 photon20
 photon30
 photon40
 photon50

mpirun コマンドを実行するマシン自体を MPI の並列計算に含めたくない場合(mpiru のデフォルトの動作は、必ず、コマンドを打ったマシン自体を並列リソースに含める)、mpirun の引数に -nolocal をつけて実行するとこのマシン自体を含めず並列リソースを構成します。また、常に、mpirun コマンドを実行するマシン自体を MPI の並列計算のリソースに含めたくない場合は、以下のように設定することにより実現できる。
MPICH のインストールディレクトリの bin 配下に、mpirun.args ファイルが存在しますが、その内容の一部を変更します。
このページにおける例では、

 /export/mpich127/bin/mpirun.args ファイルをエディタで開き、
 nolocal=0 と言う文字列を探す。
 この nolocal=0 を nolocal=1 に変更すると、上記で述べたような設定となる。

● MPI プログラムの簡単な例

Fortran 用テストプログラム (mpihello.f)

       program hello
       include 'mpif.h'
       integer ierr, myproc
       call mpi_init(ierr)
       call mpi_comm_rank(MPI_COMM_WORLD, myproc, ierr)
       print *, "Hello world!  I'm node", myproc
       call mpi_finalize(ierr)
       end

# mpif90 -o mpihello mpihello.f
# mpirun -np 4 ./mpihello
Hello world! I'm node 0
Hello world! I'm node 2
Hello world! I'm node 3
Hello world! I'm node 1

C 用テストプログラム (myname.c)

#include <unistd.h>
#include "mpi.h"
         main(int argc, char **argv){
          int len,ierr;
          char hname[32];
          len = 32;
          MPI_Init( &argc, &argv );
          gethostname(hname,len);
          printf("My name is %s\n",hname);
          MPI_Finalize( );
         }

# mpicc -o myname myname.c
# mpirun -np 4 ./myname
My name is photon22
My name is photon23
My name is photon21
My name is photon24


<< 戻る


 ソフテックは、PGI 製品の公認正規代理店です

サイトマップ お問合せ
Copyright 2004 SofTek Systems Inc. All Rights Reserved.