Мое приложение C++ Unix/окон уже параллелизируется с помощью MPI: задание является splitted в CPU N, и каждый блок выполняется параллельно, довольно эффективное, очень хорошее масштабирование скорости, задание сделано правильно.
Но некоторые данные повторяются в каждом процессе, и для технических причин эти данные не могут быть легко splitted по MPI (...). Например:
На 4 заданиях ЦП это означало бы, по крайней мере, загрузку RAM на 20 ГБ, большая часть 'потраченной впустую' памяти, это ужасно.
Я думаю с помощью общей памяти для сокращения полной нагрузки, "статический" блок был бы загружен только однажды на компьютер.
Так, основной вопрос:
Действительно ли там кто-либо - стандартный способ MPI совместно использовать память на узле? Некоторое легко доступное + свободная библиотека?
boost.interprocess
и используйте вызовы MPI для распределения локальных идентификаторов общей памяти.Какой-либо хит производительности или конкретные вопросы для опасаний?
Задание будет выполняться в PBS (или SGE), система массового обслуживания, в случае процесса грязный выход, интересно, будут ли они очистка определенная для узла общая память.