Как транслировать вектор усиления с использованием MPI? - PullRequest
2 голосов
/ 20 марта 2019

Я пытаюсь передать вектор усиления другим процессам из моего процесса менеджера следующим образом:

MPI_Bcast(&b, N, MPI_DOUBLE, 0, MPI_COMM_WORLD);

, где b определяется как:

boost::numeric::ublas::vector<double> b(N);

Вектор b инициализируется процессом менеджера и затем передается рабочим процессам, однако, если я распечатываю вектор b, я все равно получаю случайные результаты для всех процессов, которые не являются процессом менеджера. Я вещаю неправильно? (Для ясности, все процессы вызывают MPI_Bcast, а не только процесс менеджера.)

1 Ответ

1 голос
/ 20 марта 2019

Вещательный звонок требует доступа к необработанным данным.Усиление вектора uBLAS является непрозрачной структурой данных, которая не гарантирует, что необработанные данные находятся в начале вектора (это может быть длина, или указатель, или то, что разработчик считает целесообразным для создания вектора uBLAS), или не будет ли он менять порядокмежду релизами BOOST.Типичная уловка, которая работает и для вектора STL, состоит в том, чтобы получить первый элемент вектора и взять его адрес

boost::numeric::ublas::vector<double> b(N);

MPI_Bcast(&b[0], N, MPI_DOUBLE, 0, MPI_COMM_WORLD);
...