Я пытаюсь ввести число на один компьютер, а затем передать его на все остальные компьютеры с помощью MPI.
#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
int main (int argc, char** argv)
{
int myid, numprocs, processor_name_length;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init (0, 0);
MPI_Comm_rank (MPI_COMM_WORLD, &myid);
MPI_Comm_size (MPI_COMM_WORLD, &numprocs);
MPI_Get_processor_name (processor_name, &processor_name_length);
int number = 0;
if (myid == 0) {
printf ("Input number: ");
scanf ("%d", &number);
}
MPI_Bcast(&number, 1, MPI_INT, 0, MPI_COMM_WORLD);
printf ("Hello from process %d of %d. Number: %d [%s]\n", myid, numprocs, number, processor_name);
MPI_Finalize ();
return 0;
}
когда я его компилирую и запускаю:
mpicc -o bcast bcast.c
mpiexec -hosts umaster,uslavea -n 2 ./bcast
Он запрашивает ввод на главной машине, затем печатает это сообщение с помощью printf после того, как я ввожу номер, а затем зависает.
Выход:
Input number: 10
Hello from process 0 of 2. Number: 10 [umaster]
Должно быть сообщение:
Hello from process 1 of 2. Number: 10 [uslavea]
РЕДАКТИРОВАТЬ:
Если я запускаю эту команду:
mpiexec -hosts master -n 4 ./bcast
Все работает, также у меня есть еще один пример, где я использую MPI_Send(...)
, и я получаю сообщение об ошибке отказа в подключении, однако, если я запускаю этот пример на одном компьютере, все работает нормально. Я предполагаю, что моя конфигурация/кластер не в порядке. Следующий пример отлично работает:
#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
int main (int argc, char** argv)
{
int myid, numprocs;
MPI_Init (0, 0);
MPI_Comm_rank (MPI_COMM_WORLD, &myid);
MPI_Comm_size (MPI_COMM_WORLD, &numprocs);
printf ("Hello from process %d of %d.\n", myid, numprocs);
MPI_Finalize ();
return 0;
}
запустив его с помощью:
mpiexec -hosts master,uslavea,uslaveb,uslavec -n 4 ./hello
Я создал 4 виртуальные машины, сгенерировал ключи dsa, и я могу войти с каждой из них на каждую, используя ssh, не запрашивая пароль. (например, от мастера: ssh mpiuser@uslavea). На всех машинах пользователь mpiuser и пароль одинаковый для каждой машины.
В чем может быть проблема? Повторяю, запуск только на мастере с -n X
работает нормально.
MPI_Get_processor_name(...)
, может потому чтоprocessor_name_length
никогда не ставится. - person Soana   schedule 18.12.2015MPI_Bcast(...)
, программа завершается нормально, иначе она зависает. - person clzola   schedule 18.12.2015