Как предотвратить распараллеливание всего кода при использовании библиотеки MPI? - PullRequest
1 голос
/ 23 января 2020

Когда я использую mpirun с флагом -np для запуска параллельной программы, кажется, что все процессы начнут свое выполнение в начале main.

Например, для базовая c Программа MPI:

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

using namespace std;

int main(int argc, char* argv[]) {
    cout << "Hello, World!" << endl;

    MPI_Init(NULL, NULL);

    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
    char processor_name[MPI_MAX_PROCESSOR_NAME];
    int name_len;
    MPI_Get_processor_name(processor_name, &name_len);
    printf("From processor %s, rank %d out of %d processors\n",processor_name, world_rank, world_size);

    MPI_Finalize();

    return 0;
}

Она напечатает Hello, World! несколько раз, не так, как я ожидал. Как я могу позволить Hello, World! (последовательная часть) выполнить только один раз? Может быть, я должен добавить некоторые ограничения для решения этой проблемы, например, использовать if (rank == 0). Но это очень простой пример. У меня действительно большой проект MPI! Я хочу, чтобы только одна вычислительная часть работала параллельно на нескольких вычислительных узлах, а все остальные части выполнялись последовательно. Так есть ли другой способ решить эту проблему?

...