Мы разработали библиотеку алгоритмов на C ++, которая позволяет пользователю реализовывать свои собственные типы данных для обмена данными между отдельными алгоритмами (также реализованными пользователем).Это прекрасно работает, но мы хотим обеспечить распараллеливание на уровне библиотеки.Отдельные алгоритмы должны выполняться параллельно на разных узлах машин с распределенной памятью.
Мы решили использовать MPI для распараллеливания, поскольку его можно использовать для машин с распределенной и общей памятью без изменений кода.К сожалению, сейчас мы боремся с проблемой, как распределить реализованные пользователем типы данных между узлами.У нас есть следующие проблемы:
- Мы не знаем, насколько большими могут быть данные, они могут даже меняться от запуска к запуску.
- Мы не знаем, какие данные находятся внутриструктура данных.
- Объем данных может быть очень большим - до 1 ГБ (это не должно быть проблемой для MPI)
- Пользователь не должен видеть никакой разницы в реализации типов данных или алгоритмов для параллельноговыполнение (для алгоритма на самом деле проблем нет)
Есть ли возможность использовать MPI для обмена этими данными между узлами, или есть подходы, которые могут лучше подходить для такого родапроблема.Мы хотели бы иметь решение, которое работает, по крайней мере, на машинах с общей памятью, однако мы хотели бы иметь решение, которое работает без изменений кода на машинах с общей и распределенной памятью.