Я предполагаю, что язык C ++ - это только язык, имеющий объекты и определенный интерфейс MPI в стандарте. Если я не прав, просто скажи. Для других языков основной принцип такой:
В принципе, если вы можете сделать memcpy объекта или сохранить его в файл (write
) и прочитать его из файла (read
), вы можете сделать MPI_Bcast памяти, в которой хранится объект .
Для этого ваш объект должен
- может быть составлен только с типами POD (обычные старые данные: char, int, float, double) или другими объектами с таким же свойством
- не имеет указателей внутри, потому что после отправки в другой процесс MPI память будет не такой, как в процессе отправки.
Если ваш объект более сложный, его следует сериализовать (маршалировать) в некоторый буфер перед отправкой и десериализовать (не маршалировать) после получения. Вы можете использовать повышение сериализации - но даже этот вариант не универсален (существуют ограничения на то, как объект может быть организован для сериализации)
PS-сериализация наддува встроена в Boost.MPI