MPICH2 недостаточно памяти при отправке INT - PullRequest
0 голосов
/ 24 февраля 2012

Я работаю всю неделю, чтобы попытаться получить крутящий момент в 3-х машинном кластере + mpich2. Я планирую использовать его в качестве среды разработки и в конечном итоге запустить производственный код в EC2 или каком-либо другом облаке. Поскольку это среда разработки, я просто использую несколько запасных машин (2 64-битных, 1 32-битная на случай, если это имеет значение). В машинах используются различные дистрибутивы Ubuntu (индивидуальный, выносливый и кармический).

Проблема, с которой я сталкиваюсь, заключается в том, что в простой тестовой программе send / recv, которую я сделал, вызов recv, похоже, не хватает памяти, и я понятия не имею, почему. ~ 1,2 ГБ свободной памяти на машине с отправкой / восстановлением 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:
мастер: 4.2.4
узел1: 4.4.5
узел2: 4.4.1

Кроме того, в случае важности node2 является 32-разрядным компьютером. Заранее спасибо за любую помощь.

РЕДАКТИРОВАТЬ : Я запустил это на кластере, который я использовал в прошлом, который является установочным и известен как работающий для тестирования кода. Кажется, что код работает правильно, я считаю, что проблема, с которой я сталкиваюсь, связана с настройкой MPI в моем кластере разработки.

1 Ответ

3 голосов
/ 25 февраля 2012

К сожалению, MPICH2 не поддерживает гетерогенные платформы. Вы можете собрать MPICH2 и ваше приложение для 32-битной системы и запустить его на всех машинах.

...