
合計 NUMTOT 個のプログラム (C、Mathematica、ns-2 などの数学環境) を起動する必要があります。問題は、これらのプロセスが実行されるコンピューターが、実行の最大数 (たとえば MAX) のみを許可することです (MAX < NUMTOT)。
私はこれらのプログラムをターミナルで次の行で実行します
./run.sh -d directory num
繰り返しますが、run.sh は数学プログラムを呼び出すスクリプトです。directory はプログラムがあるディレクトリで、num は新しい実行回数 (integer*num = NUM) を示します。スクリプト 'run.sh' は 'directory' (プログラム) のコピーを含む 'num' 個のディレクトリを作成し、プログラムのインスタンスを 'num' 個起動します。私の場合は Matlab インスタンスです。
実行中のプロセスの数を自動的に追跡し、最大数が (MAX-num) まで減少すると、'num' がすでに終了しているため、合計 NUM のシミュレーションが完了するまで Matlab の次の 'num' シミュレーションを起動するスクリプトが必要です。
スクリプトが、1 つのプログラムだけが終了したときに次のプログラムを呼び出すだけで、可能な最大プロセス数を維持できれば、さらに良いでしょう。
実際、実行中のプロセスの数を知るには、次のスクリプトを実行します。
ps axu |grep plopez|grep simulacion|grep MATLAB|awk '{ $2} END{print NR}'
現時点で実行中の Matlab の合計数を示します。
シミュレーションのセット全体を 1 つのスクリプトから作成するにはどうすればよいでしょうか?
答え1
ユーザーによるプロセスの最大数を強制する通常の方法は、 を使用することですpam_limits(8)
。limits.conf(5)
詳細と例については、マニュアルページを確認し、/etc/security/limits.conf
それに応じて を変更してください。
具体的には、次のパラメータを設定しますnproc
。
nproc
maximum number of processes
このパラメータが使用されているマニュアルページの例:
@faculty soft nproc 20
@faculty hard nproc 50
答え2
NUM
実行中のインスタンスの数を定期的にチェックする代わりに、その数に達するまでプログラムを何度も実行するスクリプトを作成し、このスクリプトをMAX
並列で開始することをお勧めします。
SIGCHLD
子プロセスが終了したときに発せられるシグナルをトラップすることもできます。これはまず で有効にする必要がありますset -o monitor
。より詳細な例と代替案は にあります。Stackoverflowのスレッド。
答え3
MATLABジョブが非対話型(つまりバッチスクリプトを実行する)の場合は、次のようなバッチスケジューリングソフトウェアを検討することをお勧めします。トルクまたはスラム- この種のリソース管理は、まさにそのために設計されています。
これらは通常、HPC クラスターで使用されますが、この場合は、コンピューティング ノードが 1 つだけのクラスターになります。
Slurm には、他のスケジューラでの長年の経験を生かした、最新のよく設計されたシステムであるという利点があります。Torque/PBS には、使い慣れているという利点があります。すでに多くの人が他のクラスターで使用しています。Slurm には互換性ラッパーのセットが用意されているため、PBS や Torque に慣れている人は、使い慣れたコマンドですぐに使い始めることができます。
どちらも、CPU コア、メモリ、使用可能なライセンスなど、ジョブのスケジュールを制御するための多くのオプションを提供します。また、ユーザーごとの累積使用量を追跡または制限する必要がある場合は、アカウンティングも提供します。たとえば、Slurm には、最近あまりジョブを実行していないユーザーのジョブを、システムを頻繁に使用しているユーザーよりも優先するために使用できる、公平使用重み付けオプションがあります。これは、合計 CPU 時間の固定ハード クォータよりも優れていることがよくあります。
制限付きライセンスを回避するもう1つの方法は、MATLABスクリプトを次の言語と互換性のあるものにすることです。GNU オクターブMATLABでも同様に実行できます。その後、必要なだけテスト/開発実行を実行し、結果を公開したり他の研究者と共同作業したりする必要がある場合は、MATLABで最終実行を行うことができます。OctaveはMATLABとほぼ互換性がありますが、いくつかの違いがあります。まとめ。
答え4
アンbash のサブプロセス数の制限に関する別のスレッドでの回答次のスニペットは、10 秒ごとにチェックしながら、4 つのジョブのうちの 1 つが完了するまで待機します。
while [ $(jobs | wc -l) -ge 4 ] ; do sleep 10 ; done
このような積極的な睡眠戦略は、むしろ非効率的で、粗雑で、不正確であることに留意してください。