MPI_Barrier не работает должным образом в Ubuntu

Я новичок в использовании 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


mpi
person Yan Li    schedule 13.04.2013    source источник
comment
1) Имена компьютеров в хост-файле должны быть в отдельных строках, так ли это? 2) Каков вывод программы, если прокомментировать строку MPI_Barrier? 3) Как вы скомпилировали программу?   -  person zonksoft    schedule 13.04.2013
comment
stackoverflow .com / questions / 12854879 / звучит как связанный   -  person zonksoft    schedule 13.04.2013
comment
@RafaelReiter прав; Обычно это проблема конфигурации. Между двумя узлами необходим SSH без пароля, но MPI обычно также требует, чтобы был открыт широкий диапазон портов, поэтому проверьте все брандмауэры, правила iptables и т. Д .: wiki.mpich.org/mpich/index.php/   -  person Jonathan Dursi    schedule 13.04.2013
comment
Я могу использовать эту программу с помощью openmpi, так что определенно ничего не связано с сетью. Мой хост-файл находится в отдельных строках.   -  person Yan Li    schedule 13.04.2013
comment
Я компилирую mpicc -o hello hello.c   -  person Yan Li    schedule 13.04.2013
comment
Если я прокомментирую эту строку, она выдаст правильный рейтинг   -  person Yan Li    schedule 13.04.2013
comment
Я нашел причину. В хостах у меня есть два 127.0.0.1, один - localcost, другой - мое настоящее имя хоста. Я меняю одно из своих имен хостов на реальный IP, и тогда он работает.   -  person Yan Li    schedule 14.04.2013


Ответы (1)


В / etc / hosts более новые версии некоторых дистрибутивов Linux добавляют следующие типы строк вверху файла:

127.0.0.1 localhost
127.0.0.1 [hostname]

Это следует изменить так, чтобы строка имени хоста содержала ваш фактический IP-адрес. Процесс MPI hydra будет прерван, если вы не внесете это изменение с такими ошибками, как:

Fatal error in PMPI_Barrier: Other MPI error, error stack:
PMPI_Barrier(425)...........: MPI_Barrier(MPI_COMM_WORLD) failed
MPIR_Barrier_impl(292)......: 
MPIR_Barrier_or_coll_fn(121): 
MPIR_Barrier_intra(83)......: 
dequeue_and_set_error(596)..: Communication error with rank 0
person Javaxtreme    schedule 27.06.2014