我使用Windows HPC Pack 2008 R2 SP4来运行MPI应用程序。我在让Job Scheduler在所有可用内核上运行应用程序时遇到问题。这是我的代码......
using (IScheduler scheduler = new Scheduler())
{
scheduler.Connect("MyCluster");
var newJob = scheduler.CreateJob();
newJob.Name = "My job";
//newJob.IsExclusive = true;
var singleTask = newJob.CreateTask();
singleTask.WorkDirectory = @"C:\MpiWorkspace";
singleTask.CommandLine = @"mpiexec MyMpiApp.exe";
newJob.AddTask(singleTask);
scheduler.SubmitJob(newJob, null, null);
}
如上所述,我在群集中的两个计算节点中分配了16个(可用)核心。我能得到的最好的方法是取消注释行newJob.IsExclusive = true;
,然后在其中一个计算节点(8个核心)上分配所有核心。
如果我从命令行运行,我可以使用mpiexec
开关/np *
来使用所有可用内核,但这似乎被作业调度程序覆盖。
如何在代码中获得相同的效果,如何在不明确声明任务的最小和最大内核数量的情况下在所有可用内核上运行?
答案 0 :(得分:0)
不确定是否已解决。我有类似的问题。 我能想到的一件事是,您的HPC调度程序会覆盖您的亲和力。转到“配置”->“配置作业计划程序策略和设置”->“相似性”,设置为“无作业”
您还需要向mpiexec添加参数
mpiexec -np * -al 2:L -c 8 MyMpiApp.exe
/ al设置亲和力 / c设置每个节点的内核数
不确定节点的核心数不同时该怎么做。
希望这会有所帮助