実行する必要があるすべてのタスクをコマンド ラインで実行できる場合は、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 マシンに対してローカルにする)。