アライドエンジニアリング

2001年10月29日

技術情報
本ページでは,MPICH のコンパイルについて説明します。
MPICH のコンパイル
MPIプログラムを書くには,コンピュータにMPIの実装系がインストールされていることが必要です。PCが1台あれば,それは簡単にできます。ここでは最も代表的な,フリーの実装系 MPICH 1.2 の Linux上 でのコンパイルとインストール,実行方法を紹介します。

MPICHはMPIの開発者らが開発したMPIの実装系です。

  1. MPICHのコンパイルとインストール
    例として,LinuxをOS とする3台のPC (以下ホストと呼びます。ここではデュアルプロセッサマシンとしていますが,もちろんシングルでもよいです) を想定し,それらがネットワークで結ばれており,NFSが動いているものとします。ここではそれらホストのホスト名をserver01,server02,server03とします。ホストはUNIX系OSが載っているマシンならばまず問題ありません。1台以上何台でも良く,1台の場合,NFSはもちろん要りません。

    MPICHでは各ホストのコマンドの実行にrshを使っており(オプションによりsshを使うことも可能),MPICHのコンパイルの前にrshが動くかどうかを,たとえば

    $ rsh ホスト名 ls
    などとして確かめます。もしこのコマンドがなかったり,あっても所要の結果が得られないときには,マニュアルを参照するなどしてrshのインストールあるいは設定を行なう必要があります。

    (1) MPICH の入手
    ANLのMPIのページ http://www-unix.mcs.anl.gov/mpi/mpich/ から,

    mpich.tar.gz
    がドキュメントとともに入手できます。

    (2) MPICH のコンパイル
    (a) 展開
    適当な場所に,mpich.tar.gzを展開する作業用ディレクトリを作り,ここにmpich.tar.gzを置きます。(Linuxでは)次のように展開します。

    $ tar zxvf mpich.tar.gz
    これにより,ディレクトリmpich-1.2.x ができるので,この中に移動します。

    $ cd mpich-1.2.x
    (b) configure
    mpich-1.2.x のインストールディレクトリを決めて,configureを行います。configureは(a)で展開されたスクリプトです。ここでは

    /usr/local/mpich-1.2.x
    にインストールするものとし,

    $ ./configure --prefix=/usr/local/mpich-1.2.x
    と実行します。結果を作業用ディレクトリの中だけに置いておくことも可能で,この場合は --prefix以下は不要です。configureのヘルプは

    $ ./configure --help
    で見られます。

    (c) make
    configureにより Makefile が生成されているので,make します。

    $ make
    (d) make install
    インストール先を指定したので,rootで,

    # make install
    を行ないます。これで先ほど指定したように /usr/local/ の下にディレクトリmpich-1.2.x が作られ,必要なファイルがコピーされています。

    (e) マシンファイルの設定
    実行用のmpirunが読む,ホスト名一覧のファイルが

    /usr/local/mpich-1.2.x/share/machines.LINUX
    です。ここには,デフォルトで,server01が次のように5つ並んでいます。

    # 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"
    server01
    server01
    server01
    server01
    server01
    これを自分の環境に合わせて修正します。ここではserver02,server03を追加します。

    # コメント行省略
    server01:2
    server02:2
    server03:2
    このマシンファイルはmpirunがデフォルトで読む。例えばmpiccでコンパイルされたプログラムxxxxの実行は

    $ mpirun -np 3 xxxx
    としますが,このときに上の

    /usr/local/mpich-1.2.x/share/machines.LINUX
    が読まれます。マシンファイルmachinfilenameを明示的に指定することもできます。

    $ mpirun -np 3 -machinefile machinfilename xxxx
    注意. machines.LINUXのコメントにもあるように,":n" のnはSMPマシンの共有メモリによる通信を用いる場合に,そのCPU数です。これに対して,TCPを用いることも可能で,この場合には

    # コメント行省略
    server01
    server02
    server03
    server01
    server02
    server03
    と書きます。この順序はホストの参照の順番を与えていることになります。

    (f) パスの設定
    最後に,パスを通します。例えば

    .bash_profile
    のPATHに,例えば/usr/local/mpich-1.2.x/binを追加します。

    PATH=$PATH:/usr/local/mpich-1.2.x/bin
    以上でMPICHのインストールが完了しました。

  2. MPIプログラムのコンパイルと実行
    コンパイルには,上の(f)のシェルスクリプトmpiccを用います。例えばCプログラム foo.c のコンパイルは

    $ mpicc foo.c -o foo
    とします。mpicc は,環境下の C コンパイラ (たとえば gcc) を起動します。コンパイラのオプション類は mpicc に続けてそのまま書けます。プログラムfooの実行は,たとえば

    $ mpirun -np 3 foo
    とします。"-np 3" の3は起動するプロセスの数(プロセッサの数ではない)です。foo に与えるべき引数は foo の後に続けて書けます。プロセスとプロセッサとの対応は上の(e)で述べたマシンファイルに既述されています。
問い合わせ
お問い合せは
postmaster@alde.co.jp

までお願いします。

技術情報へ戻る

(C) 2001-2012 Allied Engineering Corporation. All rights reserved.