1

現在、計算負荷の高いシミュレーションをいくつか実行していますが、完了するまでに時間がかかります。プロセッサで使用可能なすべての物理コアにワークロードを既に分割しています。私が疑問に思っているのは、ワークロードをさらに分割して他のコンピューターに割り当てる方法です。数台の Xeon サーバーを購入し、それらを数値計算に使用することを考えています。

私が抱えている大きな問題の 1 つは、現在 Visual Studio ( Ctrl F5) 内でプログラムを実行していることです。これは、常に小さな変更を加えている 2 つのメソッドがあるためです。

ワークロードを他のコンピューターに割り当てる方法/可能かどうか/VSでプログラムを引き続き実行できるかどうか、または実行するたびに *.exe を作成する必要があるかどうかについての提案はありますか?

4

3 に答える 3

1

解決する問題によって異なります。

SETI@Home のように簡単に並列化できる場合は、map/reduce と Hadoop を使用できます。

線形代数のように、そうでない場合は MPI のようなものを使用できます。

于 2013-05-01T14:26:24.930 に答える
0

WMI サービスを使用して、リモート コンピューターでプロセスを開始できます。リモート コンピューターから見える共有ディレクトリに exe をビルドし、リモート コンピューターで WMI を使用して exe を起動します。

これを行う例はたくさんありますが、説明のために、認証の複雑さを想定しない簡単な方法は、.VBS スクリプト ファイルを使用することです。

strComputer = "acomputer"
strCommandLine = "calc.exe"

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objProcess = objWMIService.Get("Win32_Process")

intReturnValue = objProcess.Create(strCommandLine, , , intPID)
WScript.Echo "Process ID: " & intPID

SysInternals のPsExec を使用して、この作業を行うためのすべての詳細を処理することもできます。

Visual Studio で exe をビルドした後、ローカル マシンで実行して目的の動作を確認し、リモート システムで起動する準備ができたら、上記の VBS と同様のバッチ スクリプトを実行して起動できます。リモート システム上の exe。

ワークロードを分割する何らかのメカニズムを提供して、各クライアントが問題のどの部分に取り組むべきかを認識できるようにする必要があります。この情報は、リモート アプリの起動に使用するコマンド ライン、exe を含むディレクトリ内の構成ファイル、データベース テーブルで提供するか、クライアントが接続する別のコマンド アンド コントロール タイプのサーバーを使用することができます (ただし、そのアプローチでは、独自のソリューションを作成するよりも、既存のソリューションを使用することを学ぶ方が適切な段階にすぐに到達します)。

ある種のリモート「キル スイッチ」を含めることもできます。SysInternals の PsKill を使用できます。または、より適切なシャットダウンが必要な場合は、exe と同じディレクトリに特定のファイルが存在するなどの単純なものが、リモート プロセスがシャットダウンするためのフラグとして機能します。

クライアントにCSScriptサポートを追加して、リモート クライアント プログラムを静的にし、CSScript ファイルをロードしてコンパイルして作業を実行することも検討できます。これは、クライアント プログラムを頻繁に再展開して再起動する際に何らかの問題が発生した場合、またはすべてを少しだけ変更する必要がある場合 (たとえば、クライアントごとに個別のスクリプト ファイルを生成するプログラムを作成する場合) に役立ちます。

于 2013-05-01T16:57:39.173 に答える