0

Windows hpc sheduler を使用して、既存のプログラムを使用して 48 配布コアで配布タスクを作成する必要があります。

変数ファイルを入力として単純な作業を配布できるタスクを作成するにはどうすればよいですか?

たとえば、実行したい:

pgm.exe img1.png >core 1 machine 1
pgm.exe img2.png >core 2 machine 1
pgm.exe img3.png >core 3 machine 1

既存の exe コード pgm.exe を変更する必要はありません (そして変更したくありません)。

あなたの答えに感謝します。

4

1 に答える 1

0

実行する必要があるすべてのタスクをコマンド ラインで実行できる場合は、HPC を介して実行する簡単なアプリケーションを作成できます。

たとえば、ディレクトリ MyPNGFiles 内のすべての PNG ファイルに対してコマンドを実行する場合、コマンドを HPC に foreach することができます。FileInfo オブジェクトの List としてファイルを既に取得し、このメソッドに渡していると仮定します。

また、MS が公開した DurableSession または Session オブジェクトをラップする HPCSession クラスがあるとします。このクラスは、StartInfo の作成を処理し、引数を受け取って HPC との接続を開き、そこからスケジューラを生成できるようにします。

IScheduler scheduler = new Scheduler();
scheduler.connect(HPCSession.HeadNode);

ISchedulerJob job = scheduler.CreateJob();
job.Name = "CMDLine HPCJob";

IScheduler task;
int i = 1;

foreach(FileInfo fi in files)
{
    task = job.CreateTask();
    task.Name = "Task Number " + i.ToString();
    task.CommandLine = "pgm.exe " + fi.FullName;
    job.AddTask(task);
    task.Commit();
    job.SubmitTask(task);
    task = null;
    i++;
}

job.Commit();
//A Job must be in a Configuring state before submission; usually isn't a problem but lets be sure
if (job.State != JobState.Configuring)
    scheduler.ConfigureJob(job.JobID);

scheduler.SubmitJob(job, "userName", "password");

すべてに対して完全修飾パスを使用することに注意してください。コマンドラインツールを含みます。コマンド ライン タスクを介して HPC で実行されるジョブは、そのマシンにログインし、コマンド プロンプトを開いてコマンドを実行するのとまったく同じです。そのため、コマンド ライン コマンドはそれを念頭に置いて記述する必要があります。

これは非常に単純な実装です。TaskStateChange イベントにサブスクライブしてクラスターの動作を調べるなど、他のことを実行できます。たとえば、1 つのノードから 15 のタスクがすべて失敗したものの、他のタスクは失敗していない場合は、そのノードをプログラムで削除することができます。スケジューラを作成し、そのノードを除外ノード リストに追加しました。しかし、耐障害性の考慮事項は、アプリケーションを適切に実行した後に発生する可能性があります:)。

また、ジョブを実行する HPC ノードに、a) ファイルが存在するパスへの読み取りまたは読み取り/書き込みアクセス権があることを確認する必要があります。b) exe への読み取り/書き込み/実行アクセス権を持っている (または exe を HPC マシンに対してローカルにする)。

于 2013-03-08T13:27:37.123 に答える