C ++; MPI: Отправить структуру с вектором векторов через MPI

Я пытаюсь отправить эту структуру через MPI, но я не знаю, правильно ли это.

struct Node {
int sum_node;
int depth_node;
vector<vector<int> > subset;
vector<int> sum_subset;
vector<int> depth_subset;
};

Отправка так:

Node zz = stack.back();
stack.pop_back();
MPI_Send(&zz, sizeof(struct Node), MPI_BYTE, 1, MSG_WORK_SENT, MPI_COMM_WORLD);

Получать так:

Node gg;
MPI_Recv(&gg, sizeof(struct Node), MPI_BYTE, status.MPI_SOURCE, MSG_WORK_SENT, MPI_COMM_WORLD, &status);
stack.push_back(gg);

И программа завершилась с ошибкой сегментации.
Кто-нибудь может мне помочь?

1

Решение

Вы отправляете данные не POD через MPI, что неверно.
Вам нужно сериализовать / десериализовать весь узел во время отправки / получения работы.

Например, если у меня есть узел и в его sum_subset есть 1000 элементов, теперь вы отправляете sizeof (Node) только через:

  Node d;
for(int i=0;i<1000;i++)
{
d.sum_subset.push_back(1);
}
cout << sizeof(Node) << endl;

проверять, выписываться http://www.boost.org/doc/libs/1_51_0/libs/serialization/doc/index.html для дополнительной информации

4

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

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

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