0

我整个星期都在努力尝试获得一个 3 机器集群运行扭矩 + mpich2。我的计划是将它用作我的开发环境,并最终在 EC2 或其他一些云中运行生产代码。由于它是一个开发环境,我只是使用一些备用机器(2 64 位,1 32 位以防万一)。这些机器正在使用 Ubuntu 的各种发行版(特立独行、哈迪和业力)。

我遇到的问题是,在一个简单的发送/接收测试程序上,我进行的接收调用似乎内存不足,我不知道为什么。机器上有大约 1.2G 的 RAM 可用,其中 1 个 int 正在发送/接收。

继承人的代码:

/*
 * A very simple send/recv program
 */

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

#define MAXHOSTNAMELEN 64

int main(int argc, char **argv) 
{
    int pid, from;
    int nproc;
    MPI_Status status;
    int to_recv;
    int to_send = 1;
    char hostname[MAXHOSTNAMELEN];

    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
    MPI_Comm_rank(MPI_COMM_WORLD, &pid);

    gethostname(hostname, MAXHOSTNAMELEN);
    printf("%d of %d:%s Checking in\n", pid, nproc, hostname);

    if (pid == 0) {
        MPI_Recv(&to_recv, 1, MPI_INT, 2, 0, MPI_COMM_WORLD, &status);
        from = status.MPI_SOURCE;
        printf("%d of %d:%s Recieved Value %d from %d\n", pid, nproc, hostname, to_recv, from);

        MPI_Recv(&to_recv, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &status);
        from = status.MPI_SOURCE;
        printf("%d of %d:%s Recieved Value %d from %d\n", pid, nproc, hostname, to_recv, from);
    } else {
        MPI_Send(&to_send, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
        printf("%d of %d:%s Sent value\n", pid, nproc, hostname);
    }   

    MPI_Finalize();
    exit(0);
}

这是输出:

0 of 3:master Checking in
2 of 3:node1 Checking in
1 of 3:node2 Checking in
1 of 3:node2 Sent value
Fatal error in MPI_Recv: Other MPI error, error stack:
MPI_Recv(186)...........................: MPI_Recv(buf=0x7fff33bed040, count=1, MPI_INT, src=2, tag=0, MPI_COMM_WORLD, status=0x7fff33bed020) failed
MPIDI_CH3I_Progress(402)................: 
MPID_nem_mpich2_blocking_recv(905)......: 
MPID_nem_tcp_connpoll(1838).............: 
state_commrdy_handler(1676).............: 
MPID_nem_tcp_recv_handler(1564).........: 
MPID_nem_handle_pkt(636)................: 
MPIDI_CH3_PktHandler_EagerShortSend(441): Out of memory
Fatal error in MPI_Send: Other MPI error, error stack:
MPI_Send(173)..............: MPI_Send(buf=0x7fff8ee5396c, count=1, MPI_INT, dest=0, tag=0, MPI_COMM_WORLD) failed
MPID_nem_tcp_connpoll(1826): Communication error with rank 0: Connection refused

如果有任何我没有包含的必要信息,请告诉我,我会添加它。

MPICH2 版本:mpich2-1.4.1p1 从每台机器上的源代码编译
gcc 版本:
master:4.2.4
node1:4.4.5
node2:4.4.1

此外,如果它很重要,node2 是 32 位机器。提前感谢您的帮助。

编辑:我在我过去使用过的集群上运行它,该集群已设置并已知工作以测试代码。该代码似乎可以正常工作,我相信我看到的问题与我的开发集群上的 MPI 配置有关。

4

1 回答 1

3

不幸的是,MPICH2 不支持异构平台。您可以为 32 位构建 MPICH2 和您的应用程序并在所有机器上运行它。

于 2012-02-25T09:37:28.257 回答