MPICH / SLURM分配主机等级

时间:2017-03-01 21:39:02

标签: c mpi mpich slurm

我正在使用MPICH和SLURM,并且我正在尝试为特定节点分配排名(由于硬件差异,我希望特定节点始终为0级)。 MPICH正在使用Hydra Process Manager。检查文档我应该能够获得一个排名文件(或机器文件,不确定区别)与循环分配的主机列表。

以下是我用于测试的示例程序:

#include <stdio.h>
#include <mpi.h>
#include <unistd.h>

int main(int argc, char **argv) {
    char hostname[256];
    int rank;
    int size;

    MPI_Init(&argc,&argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    gethostname(hostname,255);

    printf("I am rank: %d on host %s\n", rank, hostname);

    if (rank == 0) {
        for (int x = 1; x < size; x++) {
            int recv;
            MPI_Recv(&recv, 1, MPI_INT, x, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
            printf("host %s : rank %d received %d\n", hostname, rank, recv);
        }
    } else {
        printf("host %s : rank %d is sending a message\n", hostname, rank);
        MPI_Send(&rank, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
    }
    MPI_Barrier(MPI_COMM_WORLD);
    MPI_Finalize();
    return 0;
}

我的排名档案内容如下:

node02
node01

因为我希望node02被分配为零。然后我运行以下内容:

salloc -N2 -c 24 -p debug mpiexec -machinefile ./rankfile.txt ./mpi_test

输出和错误失败:

I am rank: 0 on host node01
I am rank: 1 on host node02
host node02 : rank 1 is sending a message
Fatal error in MPI_Send: Unknown error class, error stack:
MPI_Send(174)..............: MPI_Send(buf=0x7fff9503155c, count=1, MPI_INT, dest=0, tag=0, MPI_COMM_WORLD) failed
MPID_nem_tcp_connpoll(1835): Communication error with rank 0: Connection refused

搜索此错误没有帮助,设置HYDRA_DEBUG不提供有关错误的其他信息。我能够很好地在两个节点之间进行SSH,在没有-f(或-machinefile)标志的情况下运行并且rankfile工作正常,并且交换等级文件中的主机顺序(相当于没有等级文件运行,有效)运行正常。奇怪的是,打印出使用rankfile运行的排名和主机名信息仍显示node01为零排名...另一个奇怪的行为是将rankfile更改为:

node03
node01

SLURM完全失败说“请求的节点配置不可用”但是,使用-N3运行并使用所有三个节点都没有问题(node03是调试池中的有效节点)。

这是配置问题吗?我使用错误的旗帜或错误的旗帜吗?似乎OpenMPI比MPICH更好地支持分配排名,但是由于集群设置,设置SLURM和MPICH并不是微不足道的,所以我对使用OpenMPI重新开始犹豫不决。

0 个答案:

没有答案