Я работаю всю неделю, чтобы попытаться получить 3-х машинный кластер с крутящим моментом + mpich2. Мой план состоит в том, чтобы использовать его в качестве моей среды разработки и в конечном итоге запустить производственный код в EC2 или другом облаке. Поскольку это среда разработки, я просто использую некоторые запасные машины (2 64-разрядных, 1 32-разрядных, если это имеет значение). Машины используют различные дистрибутивы Ubuntu (maverick, hardy и karmic).MPICH2 Недостаточно памяти при отправке INT
Проблема, с которой я сталкиваюсь, заключается в том, что в простой тестовой программе send/recv я сделал вызов recv, который заканчивается из памяти, и я понятия не имею, почему. ~ 1,2 ГБ свободной памяти на машине с 1 int, отправляемым/выпущенным.
Heres код:
/*
* 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
node1: 4.4.5
node2: 4.4.1
Кроме того, в случае, если это важно, node2 - это 32-разрядная машина. Заранее благодарю за любую помощь.
EDIT: Я запускал это на кластере, который я использовал в прошлом, который настроен и известен для работы, чтобы проверить код. Кажется, что код работает правильно, я считаю, что проблема, которую я вижу, связана с конфигурацией MPI в моем кластере разработки.