Когда я использую 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! Я хочу, чтобы только одна вычислительная часть работала параллельно на нескольких вычислительных узлах, а все остальные части выполнялись последовательно. Так есть ли другой способ решить эту проблему?