0

MS VC++ プログラムをロック クラスターで実行するように移植しようとしています。私は Linux があまり得意ではありませんが、学ぶことに熱心であり、Linux を移植することは私にとって不可能な作業ではないと思います。ただし、クラスター ノードを利用する方法がわかりません。コード実行はフロントエンドサーバーでのみ実行されるように見えるためです(明らかに)。

MPI について少し読んだことがありますが、MPI を使用してノード間で通信する必要があるようです。プログラムは現在、すべてのワーカー スレッドを同期するメイン スレッドを持つように作成されています。メインスレッドは、シミュレーションを操作したり、その状態を照会したりするためのコマンドも受け取ります。シミュレーションが適切にセットアップされていれば、実行中のスレッド間の通信を大幅に最小限に抑えることができます。理解できないのは、計算ノードでプロセスを開始する方法と、ノードでの障害を処理する方法です。また、プログラムをクラスターで実行するように移植するときに、他にも考慮すべきことがあるでしょうか?

4

1 に答える 1

1

最初のステップは、スレッド化された MS VC++ プログラムを単一の Linux マシンで実行できるように移植することです。

その時点を過ぎたら、スレッドに加えて (またはスレッドの代わりに) MPI を使用するようにプログラムを変更します。これは、1 台のコンピューターでも実行できます。

クラスター上の複数のノードでプログラムを実行するには、クラスターが使用するスケジューリング システムにプログラムを送信する必要があります。このコマンドは、Rocks クラスターに使用されるスケジューリング ソフトウェアによって異なります。管理者に問い合わせてください。のように見えるかもしれませんmpirun -np 32 yourprogram

障害の処理はノードであり、広範な問題です。最初のパスはおそらく失敗を報告し、その後プログラムを失敗させるはずです。プログラムがクラスターでの計算にそれほど時間がかからない場合は、プログラムを再起動して、障害が発生したノードを調整するだけで十分な場合があります。さらに、アプリケーションは中断したところから再開するために必要な中間情報をディスクに書き込むことができます。これは、アプリケーションのチェックポイントと呼ばれます。したがって、ノードに障害が発生すると、ジョブは失敗しますが、ジョブを再起動しても最初から開始されません。はるかに高度な方法は、実際にノードの障害を検出し、障害が発生したノードにあった作業単位を再スケジュールしようとすることです。これは、作業単位に冪等でない副作用がないことを前提としています。この種のことは本当に複雑になります。チェックポインティングはおそらく十分です。

于 2013-07-01T04:31:04.287 に答える