общая память, MPI и системы массового обслуживания

Мое приложение C++ Unix/окон уже параллелизируется с помощью MPI: задание является splitted в CPU N, и каждый блок выполняется параллельно, довольно эффективное, очень хорошее масштабирование скорости, задание сделано правильно.

Но некоторые данные повторяются в каждом процессе, и для технических причин эти данные не могут быть легко splitted по MPI (...). Например:

  • 5 Гбит статических данных, точно та же самая вещь, загруженная для каждого процесса
  • 4 Гбита данных, которые могут быть распределены в MPI, больше центральных процессоров, используются, меньше, эта RAM на ЦП.

На 4 заданиях ЦП это означало бы, по крайней мере, загрузку RAM на 20 ГБ, большая часть 'потраченной впустую' памяти, это ужасно.

Я думаю с помощью общей памяти для сокращения полной нагрузки, "статический" блок был бы загружен только однажды на компьютер.

Так, основной вопрос:

  • Действительно ли там кто-либо - стандартный способ MPI совместно использовать память на узле? Некоторое легко доступное + свободная библиотека?

    • В противном случае я использовал бы boost.interprocess и используйте вызовы MPI для распределения локальных идентификаторов общей памяти.
    • Общая память была бы считана "локальным ведущим устройством" на каждом узле и совместно использована только для чтения. Никакая потребность в любом виде семафора/синхронизации, потому что это изменение привычки.
  • Какой-либо хит производительности или конкретные вопросы для опасаний?

    • (Там привычка быть любыми "строками" или чрезмерно странными структурами данных, все может быть понижено до массивов и указателей структуры),
  • Задание будет выполняться в PBS (или SGE), система массового обслуживания, в случае процесса грязный выход, интересно, будут ли они очистка определенная для узла общая память.

20
задан Blklight 26 December 2009 в 18:28
поделиться