Почему я получаю фатальную ошибку при использовании барьеров MPI [c ++] - PullRequest
1 голос
/ 02 марта 2020

Я новичок в MPI и получаю фатальную ошибку при попытке использовать барьеры. У меня есть простой для l oop, который распределяет индексы для каждого процесса в циклическом порядке, сразу же после барьера MPI:

mpi. cc

#include <iostream>
#include <mpi.h>
#include <vector>
#include <sstream>

int main() {
    int name_len, rank, comm_size;
    char processor_name[MPI_MAX_PROCESSOR_NAME];
    MPI_Init(NULL, NULL);
    MPI_Get_processor_name(processor_name, &name_len);
    MPI_Comm comm = MPI_COMM_WORLD;
    MPI_Comm_rank(comm, &rank);
    MPI_Comm_size(comm, &comm_size);
    std::stringstream ss;    
    ss << "hello from: " << processor_name << " " << "Rank: " << rank << " Comm size: " << comm_size << "\n";

    for (int i =0; i < 20; i++) {
        if (i%comm_size != rank) continue;
        ss << "   " << i << "\n";
    }

    MPI_Barrier(comm);                          // Fails here
    std::cout << ss.str();
    MPI_Finalize();
}

Я компилирую с:

mpicxx mpi.cc -o mpi

И затем запускаю на моем 2-узловом кластере, используя:

mpirun -ppn 1 --hosts node1,node2 ./mpi

И получаю следующую ошибку:

Fatal error in PMPI_Barrier: Unknown error class, error stack:
PMPI_Barrier(414).....................: MPI_Barrier(MPI_COMM_WORLD) failed
MPIR_Barrier_impl(321)................: Failure during collective
MPIR_Barrier_impl(316)................: 
MPIR_Barrier(281).....................: 
MPIR_Barrier_intra(162)...............: 
MPIDU_Complete_posted_with_error(1137): Process failed
Fatal error in PMPI_Barrier: Unknown error class, error stack:
PMPI_Barrier(414).....................: MPI_Barrier(MPI_COMM_WORLD) failed
MPIR_Barrier_impl(321)................: Failure during collective
MPIR_Barrier_impl(316)................: 
MPIR_Barrier(281).....................: 
MPIR_Barrier_intra(162)...............: 
MPIDU_Complete_posted_with_error(1137): Process failed

Работа на одном узле работает, но не работает при работе на 2. Есть идеи, где я могу ошибаться?

1 Ответ

1 голос
/ 02 марта 2020

Мне удалось решить мою проблему. Вместо

mpirun -ppn 1 --hosts node1,node2 ./mpi

я явно использовал ip-адреса узла 1 и узла 2 соответственно, и проблема больше не возникает. Кажется, проблема была в моем файле / etc / hosts:

127.0.0.1   localhost
127.0.0.1   node1

Кажется, что хосты пытались достичь localhost вместо node1. Дополнительная информация здесь .

...