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"を呼び出すことになります。
通信ジョブ ラッパー スクリプトの例については、Sample Plugin Scriptsを参照してください。