UNIX システム上での異なる MPI ビルドの使用
MPI のビルド
Linux® オペレーティング システムでは、Parallel Computing Toolbox™ で提供される MPI ビルドとは異なる MPI ビルドを使用できます。このトピックでは、汎用スケジューラ インターフェイスで使用する MPI ビルドを作成する手順について説明します。既に代替の MPI ビルドがある場合は、MPI ビルドの使用に進んでください。
MPI ソースをマシン上のターゲット ファイル システムにアンパックします。たとえば、
mpich2-distro.tgz
をダウンロードしており、それをビルドのために/opt
にアンパックするとします。# cd /opt # mkdir mpich2 && cd mpich2 # tar zxvf path/to/mpich2-distro.tgz # cd mpich2-1.4.1p1
enable-shared
オプションを使用して MPI をビルドします (これは、R2013b から R2018b ではMPICH2-1.4.1p1
、R2019a 以降ではMPICH3.2.1
と互換性のあるバイナリである共有ライブラリ MPI のビルドが必要であるため不可欠です)。たとえば、次のコマンドによりnemesis
チャネル デバイスおよびgforker
起動ツールを指定して MPI をビルドします。#./configure -prefix=/opt/mpich2/mpich2-1.4.1p1 \ --enable-shared --with-device=ch3:nemesis \ --with-pm=gforker 2>&1 | tee log # make 2>&1 | tee -a log # make install 2>&1 | tee -a log
MPI ビルドの使用
ここでは MPI ビルドを準備した後に、汎用スケジューラで使用する手順について説明します。異なる MPI ビルドでクラスターを動作させるには、次の手順に従います。
mpiexec
実行可能ファイルを実行してビルドをテストします。MPI がインストールされている場所にbin/mpiexec
とlib/libmpich.so
があれば、ビルドをテストする準備ができています。MPI のビルドの例に続き、
/opt/mpich2/mpich2-1.4.1p1/bin/mpiexec
と/opt/mpich2/mpich2-1.4.1p1/lib/libmpich.so
は使用できる状態になっているので、次を実行してビルドをテストできます。$ /opt/mpich2/mpich2-1.4.1p1/bin/mpiexec -n 4 hostname
新しい MPI を使用するように Parallel Computing Toolbox に指示する関数
mpiLibConf
(Parallel Computing Toolbox) を作成します。ビルドの適切な情報を返すようにmpiLibConf.m
を記述します。以下に例を示します。function [primary, extras] = mpiLibConf primary = '/opt/mpich2/mpich2-1.4.1p1/lib/libmpich.so'; extras = {};
primary
パスは "クラスター上" で有効 "でなければなりません"。また、mpiLibConf.m
ファイルはクラスター ワーカーのパスで
より上位になければなりません (matlabroot
/toolbox/parallel/mpimpiLibConf.m
を添付ファイルとして送信しても機能しません。ワーカー パス上の関数mpiLibConf.m
を取得するには、ファイルをパス上のフォルダーに移動させるか、スケジューラのコマンドでcd
を使用し、スケジューラがこの関数が格納されているフォルダー内から MATLAB® ワーカーを起動するようにします)。必要なデーモンとコマンド ライン オプションを判別します。
必要なすべてのデーモンを判別します (一般的には
mpdboot
やsmpd
など)。この節のgforker
ビルドの例では、クラスター上で稼働するサービスやデーモンを必要としない MPI を使用しますが、これはローカル マシンのみを使用できます。mpiexec
に渡す正しいコマンド ライン オプションを判別します。
新しい MPI ビルドを使用するようにクラスターを設定するには、正しい
mpiexec
を使用するように通信ジョブ ラッパー スクリプトを変更します。また、ラッパー スクリプトに MPI プロセス マネージャー デーモンが起動される段階があるかもしれません。通信ジョブ ラッパー スクリプトは、以下を行わなければなりません。
スケジューラによって割り当てられたノードを判別します。
必要なデーモン プロセスを起動します。たとえば、MPD プロセス マネージャーでは、
"mpdboot -f <nodefile>"
を呼び出すことになります。ワーカーの起動に使用する
mpiexec
実行可能ファイルを定義します。デーモン プロセスを停止します。たとえば、MPD プロセス マネージャーでは、
"mpdallexit"
を呼び出すことになります。
通信ジョブ ラッパー スクリプトの例については、サンプルのプラグイン スクリプト (Parallel Computing Toolbox)を参照してください。