Я пытаюсь построить кластер beowulf с Raspberry Pi. Я загрузил следующие пакеты OpenMPI: openmpi-bin, openmpi-common, libopenmpi1.3, libopenmpi-dbg, libopenmpi-dev. Я использовал статический IP-адрес на каждом из Raspberrys и проверил соединение между ними, и оно работало. Я также включил ssh и использовал его для входа с одной Raspberry на все остальные Raspberry.
Я использовал следующий код:
#include <mpi.h>
int main(int argc, char *argv[])
{
int tid,nthreads;
char *cpu_name;
/* add in MPI startup routines */
/* 1st: launch the MPI processes on each node */
MPI_Init(&argc,&argv);
/* 2nd: request a thread id, sometimes called a "rank" from
the MPI master process, which has rank or tid == 0
*/
MPI_Comm_rank(MPI_COMM_WORLD, &tid);
/* 3rd: this is often useful, get the number of threads
or processes launched by MPI, this should be NCPUs-1
*/
MPI_Comm_size(MPI_COMM_WORLD, &nthreads);
/* on EVERY process, allocate space for the machine name */
cpu_name = (char *)calloc(80,sizeof(char));
/* get the machine name of this particular host ... well
at least the first 80 characters of it ... */
gethostname(cpu_name,80);
printf("hello MPI user: from process = %i on machine=%s, of NCPU=%i processes\n",
tid, cpu_name, nthreads);
MPI_Finalize();
return(0);
}
Сначала я протестировал код только с двумя платами, и он работал нормально, без проблем, без ошибок, и он напечатал оператор printf в коде. Я создал файл хоста, который включает в себя следующее:
Pi0
Pi1
Pi2
Pi3
У меня 4 малиновых писанки. Я скопировал код на каждом из них и скомпилировал код, также используя следующие операторы:
mpicc -g -0O -c hello-mpi.c -o hello-mpi.o
mpicc -g hello-mpi.o -o hello-mpi
Я выполнил код со следующей инструкцией:
mpirun -np 4 -hostfile hostfile hello-mpi
когда я запускаю программу, ничего не происходит, она просто выдает новую пустую строку. Ошибок также не указано. Любое предложение, что я могу сделать, чтобы заставить его работать
-output-filename
для перенаправления вывода в файлы. Я бы также сбросил stdout сразу послеprintf
, используяfflush(stdout);
, потому что я параноик. - person Steve Weston   schedule 04.05.2015