Я новичок в использовании MPI. Здесь я написал очень простую программу для проверки работоспособности MPI. Вот мой hello.c:
#include <stdio.h>
#include <mpi.h>
int main(int argc, char *argv[]) {
int numprocs, rank, namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
MPI_Barrier(MPI_COMM_WORLD);
printf("Process %d on %s out of %d\n", rank, processor_name, numprocs);
MPI_Finalize();
}
Я использую to node для тестирования, файл хоста: node1 node2
Итак, у меня есть две машины с именами node1 и node2. Я могу общаться друг с другом по ssh без пароля.
Запускаю программу, набирая: mpirun -np 2 -f hostfile ./hello
.
Исполняемый файл hello находится в одном каталоге на обеих машинах.
Затем после запуска я получаю сообщение об ошибке:
Неустранимая ошибка в PMPI_Barrier: Другая ошибка MPI, стек ошибок: PMPI_Barrier (425) .........: Ошибка MPI_Barrier (MPI_COMM_WORLD) MPIR_Barrier_impl (331) ....: Ошибка во время коллективного MPIR_Barrier_impl (313) ... .: MPIR_Barrier_intra (83) ....: dequeue_and_set_error (596): Ошибка связи с рангом 0 Неустранимая ошибка в PMPI_Barrier: Другая ошибка MPI, стек ошибок: PMPI_Barrier (425) .........: MPI_Barrier (MPI_COMM_WORLD ) failed MPIR_Barrier_impl (331) ....: сбой во время коллективного MPIR_Barrier_impl (313) ....: MPIR_Barrier_intra (83) ....: dequeue_and_set_error (596): ошибка связи с рангом 1
Если я закомментирую MPI_Barrier (), он может работать правильно. Кажется, проблема со связью между машинами? Или я неправильно установил openmpi? Любые идеи?
Я использую Ubuntu 12.10
У меня есть подсказки: это не работает в MPICH2, если я использую openmpi, то это работает. Я установил MPICH с помощью sudo apt-get install mpich2. Я что-то упускаю? Размер mpich2 намного меньше, чем openmpi