Разбросать вектор в переменную MPI

Я пытаюсь отправить из процесса с рангом = 0 всем другим процессам (1,2,3,4) значение из вектора n_pointsBuffer, Проблема в том, что просто процесс 0 получает свое значение, а другие нет. Может кто-нибудь объяснить мне, если это возможно, что я пытаюсь сделать, и если да, то как? Это первый раз, когда я использую MPI.

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

using namespace std;

int main(int argc, char* argv[]) {

MPI::Init(argc, argv);

int num_procs = MPI::COMM_WORLD.Get_size();
int rank = MPI::COMM_WORLD.Get_rank();

srand(getpid());
int n_points;

if (rank == 0) {
int n_pointsBuffer[] = { 1000000, 1203100, 1231230, 1231000, 1312322 };
MPI::COMM_WORLD.Scatter(n_pointsBuffer, 1, MPI::INT, &n_points, 1,
MPI::INT, 0);
}

cout << "Rank = " << rank << ", n_points = " << n_points << "\n";

double sum = 0;

for (int i = 0; i < n_points; i++) {
double x = rand() / ((double) (RAND_MAX));
double f = 1.0 / (1.0 + x * x);
sum += f;
}

double avg_sum = 0;
MPI::COMM_WORLD.Reduce(&sum, &avg_sum, 1, MPI::DOUBLE, MPI::SUM, 0);

if (rank == 0) {
double pi = 4.0 * (avg_sum / num_procs / ((double) (n_points)));
cout << "Pi is approx " << pi << " with error " << pi - M_PI << ".\n";
}

MPI::Finalize();

return 0;
}

1

Решение

Это потому, что каждый должен позвонить Scatter(), Не только корень. Цитирую из другого Ответ :

Функция MPI_Scatter содержит логику отправки и получения.
корневой процесс (указанный здесь как 0) отправляет данные, и все
получатели получают; каждый участник должен вызвать рутину.
Scatter — пример коллективной операции MPI, где все задачи
в коммуникаторе надо вызывать ту же рутину. Трансляция, барьер,
операции сокращения и операции сбора — другие примеры.

Обратите внимание, что то же самое относится к каждый коллективная операция. Примером использования Broadcast является Вот (Вы можете также найти некоторые другие программы в том же репозитории, они были написаны мной для тестирования моего кластера MPI, созданного из дампированных машин).

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]