多くのシリアルプログラムを「並行して」実行する必要がある場合(問題は単純ですが時間がかかるため、同じプログラムに対して多くの異なるデータセットを読み込む必要があるため)、1つのノードのみを使用すれば解決策は簡単です。私がしているのは、各コマンドの後に、たとえばジョブスクリプトで、アンパサンドを使用してシリアルジョブを送信し続けることだけです。
./program1 &
./program2 &
./program3 &
./program4
これにより、各シリアルプログラムが異なるプロセッサで自然に実行されます。これは、ログインサーバーまたはスタンドアロンワークステーションでうまく機能します。もちろん、1つのノードのみを要求するバッチジョブでも機能します。
しかし、110の異なるデータセットを読み取るために同じプログラムの110の異なるインスタンスを実行する必要がある場合はどうなりますか?110 ./program#コマンドを送信するスクリプトを使用して複数のノード(たとえば14)に送信すると、バッチシステムは各ジョブを異なるノードの異なるプロセッサで実行しますか、それともすべて同じで実行しようとしますか? 8コアノード?
単純なMPIコードを使用してさまざまなデータを読み取ろうとしましたが、さまざまなエラーが発生し、110個のプロセスのうち約100個が成功し、他のプロセスがクラッシュしました。ジョブ配列も検討しましたが、システムがそれをサポートしているかどうかはわかりません。
シリアルプログラムを個々のデータセットで広範囲にテストしました。ランタイムエラーはなく、各ノードで使用可能なメモリを超えることはありません。