1

我正在使用 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 个可用核心中分配了 1 个(微不足道的)核心。我能得到的最好的方法是取消注释该行newJob.IsExclusive = true;,然后将所有核心分配给我一个计算节点(8 个核心)。

如果我从命令行运行,我可以使用mpiexec开关/np *来使用所有可用的内核,但这似乎被 Job Scheduler 覆盖。

如何在代码中获得相同的效果,如何在不明确声明任务的最小和最大内核数的情况下在所有可用内核上运行?

4

1 回答 1

0

不知道你有没有解决。我有类似的问题。我能想到的一件事是您的 HPC 调度程序会覆盖您的亲和力。转到“配置”->“配置作业调度程序策略和设置”->“关联性”,设置为“无作业”

您还需要向 mpiexec 添加参数

mpiexec -np * -al 2:L -c 8 MyMpiApp.exe

/al 设置亲和性 /c 设置每个节点的核心

当您的节点具有不同数量的核心时,不确定该怎么做。

希望这可以帮助

于 2019-06-25T17:45:48.043 回答