Трансляция объекта с MPI - PullRequest
0 голосов
/ 17 ноября 2011

Есть ли способ передать объект или мне нужно будет передать все значения, которые он содержит, другим способом?

1 Ответ

0 голосов
/ 17 ноября 2011

Я предполагаю, что язык C ++ - это только язык, имеющий объекты и определенный интерфейс MPI в стандарте. Если я не прав, просто скажи. Для других языков основной принцип такой:

В принципе, если вы можете сделать memcpy объекта или сохранить его в файл (write) и прочитать его из файла (read), вы можете сделать MPI_Bcast памяти, в которой хранится объект .

Для этого ваш объект должен

  • может быть составлен только с типами POD (обычные старые данные: char, int, float, double) или другими объектами с таким же свойством
  • не имеет указателей внутри, потому что после отправки в другой процесс MPI память будет не такой, как в процессе отправки.

Если ваш объект более сложный, его следует сериализовать (маршалировать) в некоторый буфер перед отправкой и десериализовать (не маршалировать) после получения. Вы можете использовать повышение сериализации - но даже этот вариант не универсален (существуют ограничения на то, как объект может быть организован для сериализации)

PS-сериализация наддува встроена в Boost.MPI

...