2013-03-08 52 views
0

我需要使用Windows hpc sheduler來創建48分佈式核心與現有程序的分佈式任務。用於現有程序的Windows HPC 2008調度程序?

我該如何創建一個任務,允許我在輸入中分配一個帶有變量文件的簡單工作?

例如我想運行:

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

謝謝你的回答。

回答

0

如果您可以執行需要通過命令行執行的所有任務,則可以通過HPC編寫一個簡單的應用程序來完成此任務。

例如,如果您的命令將在目錄MyPNGFiles中的所有PNG文件上執行,則可以將該命令發送到HPC。我們假設我們已經將這些文件作爲FileInfo對象列表獲得並傳遞給了這個方法。

我們還假設您有一個HPCSession類,它封裝了MS暴露的DurableSession或Session對象。此類處理您創建的StartInfo,接受參數以打開與HPC的連接,並允許您從中產生Scheduler。

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事件以檢查羣集的運行方式,例如如果您從一個節點取回15個任務都失敗,但其他任務未失敗,則可能需要打開調度程序並將該節點添加到排除的節點列表中,以編程方式刪除該節點。但是,在正確執行應用程序之後,可以考慮容錯問題:)。

您還需要確保將執行您的作業a)的HPC節點具有對文件路徑的讀取或讀取/寫入訪問權限; b)對exe文件有讀/寫/執行權限(或者將exe文件放在HPC機器本地)。