並列化のためにMPIを使用するプログラムがあります。実際には、複数のコアでのみ正常に実行できますが(CentOS 6.6)ベースのHPCグリッドの複数のノードで実行できると思います。同じコンピューティングノードの。
たとえば、qsub
グリッドから20個のコアを要求し、グリッドエンジンがそれを2つの異なるノードに分割することを決定すると、プログラムは失敗します。ただし、使用可能なコアが20個のノードがあり、グリッドエンジンがコアをすべてそのノードに送信すると、プログラムは正常に実行されます。 qsubスクリプトには、#$ -pe mpi 20
コア数を選択するコマンドが含まれています。
したがって、現在qstat -f -u "*"
利用可能な20コアを持つコンピューティングノードを手動で識別し、次のコマンドを使用してそのノードにコミットします。qsub -q general.q@node-X-X
私はGrid Engineに待機し、必要な数の利用可能なコアを持つ単一のコンピューティングノードにのみジョブを送信するように指示する方法を探しています。これにより、自動的に課題を送信できます。
コマンドを解析するためにbashスクリプトを書くつもりですが、qstat -f -u "*"
よりエレガントな解決策が必要です。 qsubのマニュアルを見てみましたが、適切なフラグまたはコマンドライン引数が見つかりませんでした。
現在、プログラム自体を変更することはできず、システム管理者でもありません。
利用可能なさまざまなソフトウェアバージョンに関する情報は次のとおりです。
MPI/グリッドエンジン情報:
> ompi_info | grep gridengine
MCA ras: gridengine (MCA v2.0, API v2.0, Component v1.6.2)
グリッドエンジンのバージョンはOGS / GE 2011.11p1です。
答え1
Gridengineが単一のノードで20のコアタスクをスケジュールできるようにするには、新しい並列環境を作成するか、使用している環境を調整する必要があります。必要な設定は
allocation_rule $pe_slots
からman sge_pe
:
特別な分母 $pe_slots を使用する場合は、qsub(1) -pe スイッチで指定されたすべてのプロセスを単一のホストに割り当てる必要があります。
キューに新しいPEを追加することを忘れないでください。
複数のノードで MPI タスクを実行することに関連する元の質問を解決するために、より詳細な情報を含む 2 番目の質問を行うことができます。
答え2
-pe smp 20
代わりに使用する場合は、-pe mpi 20
MPIの代わりにSMP(「共有メモリ並列処理」)環境を使用します。
SMPは並列性へのより簡単なアプローチです。1台のコンピュータで実行、スレッド間でローカルシステムメモリを共有します。したがって、要求されたすべてのスロットを複数のコンピューティングノードに分割するのではなく、単一のノード(利用可能な場合)に配置します。
私にとっては、これが問題を解決したようです。