MPI имеет функцию, называемую типами данных.Полное объяснение заняло бы действительно много времени, но вы, вероятно, захотите взглянуть на структуры там (хотя вы можете избежать появления векторов в зависимости от того, как распределяется ваша память).
Однако вы, вероятно, не можете просто использовать типы данных MPI, потому что вы просто будете передавать набор указателей, которые ничего не будут значить для процесса на другом конце.Вместо этого вы должны решить, какие части вам действительно нужно отправить и сериализовать, так, чтобы это имело смысл.
Так что у вас есть несколько вариантов, я думаю.
Изменитьто, как ваше дерево расположено в памяти, так что это массив непрерывной памяти, где все указатели, которые вы указали выше, становятся индексами в массиве.
- Это может не иметь смысла в контексте вашегоприложение, но это делает "дерево" очень легко для передачи.На этом этапе вы можете либо просто отправить большой массив байтов, либо создать типы данных MPI для описания каждой ячейки в массиве и отправить массив из 2000 таких элементов.
Повторно создайте дерево в другом процессе из исходных данных (будь то файл или что-то еще).
- Вероятно, это не тот ответ, который вы искали, и он не поможет, если выВы сгенерировали эти данные из всего, что нетривиально в середине вашего приложения.
Используйте общую память POSIX.
- Поскольку вы говорите "core »в описании вашего вопроса я предполагаю, что вы хотите передавать данные между процессами ОС на одной физической машине.Если это так, вы можете использовать разделяемую память, и вам вообще не нужно передавать сообщения.Просто откройте область общей памяти, присоедините к ней другой процесс и «пуф» всех данных будет доступен на другом конце.Пока вы разделяете всю память, на которую указывают эти указатели, я думаю, у вас все будет хорошо.