На кластере установлена оптимизированная для коммуникационной сети SCI реализация интерфейса MPI, поставляемая в составе пакета SSP компании Scali Computer - ScaMPI. ScaMPI поддерживает передачу данных как между различными узлами через сеть SCI, так и в рамках одного узла через общую память. Кроме того, ScaMPI обеспечивает безопасную многопоточность (thread-safety) для распараллеливания на несколько процессоров в рамках одного узла.


Компоненты ScaMPI

  • libmpi - библиотека, компонуемая с приложениями. Для программ на Фортране дополнительно компонуется библиотека libfmpi, содержащая привязки функций MPI к языку Fortran.
  • mpimon ("MPI-монитор") - пользовательский интерфейс для запуска MPI-программ. mpimon может быть вызван из mpirun или непосредственно пользователем. На нашем кластере, как правило, mpimon вызывается одним из процессов системы очередей, работающих на головной машине.
  • mpisubmon - субмонитор, контролирующий исполнение процессов пользовательского приложения и выделение коммуникационных ресурсов на данном узле.
  • mpid ("MPI-сервис") - сервисный процесс, работающий на каждом узле и служащий для удаленного запуска MPI-процессов (вместо стандартных сервисов Unix, таких как rsh)

Запуск MPI-приложений

Пользователь (или система очередей) вызывает MPI-монитор на хост-компьютере (сервере). Этот процесс связывается с MPI-сервисом на каждом из узлов, где будет работать приложение. Далее, MPI-сервис на каждом узле порождает субмонитор - процесс mpisubmon, который связывается с MPI-монитором на сервере и получает от него информацию для запуска приложения. Далее, субмонитор порождает необходимое число MPI-процессов данного приложения, которые будут работать на данном узле.

Все контрольные сообщения передаются через интерфейс сокетов (TCP/IP). Сеть SCI используется только для передачи сообщений приложениями.


Коммуникационные протоколы и ресурсы

ScaMPI выделяет все коммуникационные ресурсы при необходимости ("on demand"). Точнее, субмонитор выполняет выделение соответствующих ресурсов в общей памяти по требованию процесса, который посылает информацию. Ипользуются ресурсы трех типов: "каналы" (channel), буфера (eagerbuffer) и "передатчики" (transporter).

ScaMPI использует для передачи сообщений различные протоколы, в зависимости от размера сообщения (см. рисунок).

Для самых маленьких сообщений используется техника включения всего сообщения в заголовок (inlining). Порог размера сообщения, которое включается в заголовок, по умолчанию равен 560 байтам, но может быть изменен специальным параметром MPI-монитора. Для сообщений большего размера используется техника немедленной буферизации (eagerbuffering). В этом случае, посылающий процесс выделяет буфер и копирует туда сообщение, а принимающий процесс получает это сообщение и освобождает буфер без явной синхронизации с первым процессом. Наконец, для больших сообщений используется протокол типа "рандеву", когда посылается только заголовок сообщения, а принимающий процесс сигнализирует о его получении, и только затем происходит передача самого сообщения с использованием специальных буферов.

Подробнее об этом читайте в руководстве пользователя ScaMPI, доступном на нашем сервере (ScaMPI_UG.pdf, формат PDF, 252 Кбайта) или на веб-сайте Scali.


Запуск MPI-приложений

MPI-приложения в ScaMPI запускаются вызовом MPI-монитора, командная строка которого имеет следующий вид:

		mpimon <опции MPI-монитора> <программа> <опции программы> 
			   -- узел1 <число процессов> ... узелN <число процессов>

Таким образом, пользователь имеет возможность явно указать, на каких узлах будет запущена программа и сколько процессов будет запущено на каждом. Кроме того, в составе оболочки ScaDesktop имеется графический интерфейс к MPI-монитору.

Опции приложения автоматически передаются всем его процессам на всех узлах.

Альтернативным методом запуска программ является использование утилиты mpirun, которая подбирает узлы автоматически. При работающей на кластере системе очередей непосредственный доступ к mpimon запрещен.


Параметры MPI-монитора

В следующей таблице перечислены наиболе употребительные параметры утилиты запуска mpimon. Остальные параметры можно найти в руководстве пользователя ScaMPI на странице 22 или получить по команде "mpimon -help". В частности, опции mpimon позволяют задать размеры и количество различных коммуникационных буферов.

ОпцияОписание
-init_comm_worldИнициализирует ресурсы для коммуникатора MPI_COMM_WORLD сразу при запуске приложения
-debug all
или -debug <список процессов>
запуск всех или части процессов в отладчике
-debugger <отладчик> выбор отладчика
-manual all
или -manual <список процессов>
ручной запуск всех или части процессов
-display выбор X-дисплея для отладочной сессии
-inherit_limits наследование процессами определяемых пользователем лимитов
-timeout <время> устанавливает максимальное время работы приложения в секундах
-verbose перед началом работы приложения будут выведены параметры MPI-монитора
-statistics по окончании работы приложения будет выведена статистика использования коммуникационных ресурсов
-separate_output выдача различных процессов будет помещена в отдельные файлы
-stdin all
или -stdin <список процессов>
стандартный поток ввода будет перенаправлен всем или только указанным процессам
-inter_channel_inline_threshold
-inter_channel_size
-inter_chunk_size
-inter_eager_count
-inter_eager_size
-inter_pool_size
-inter_transporter_count
-inter_transporter_size
Коммуникационные параметры для пересылок между узлами (см. руководство пользователя ScaMPI).
-intra_channel_inline_threshold
-intra_channel_size
-intra_chunk_size
-intra_eager_count
-intra_eager_size
-intra_pool_size
-intra_transporter_count
-intra_transporter_size
Коммуникационные параметры для пересылок внутри узла (см. руководство пользователя ScaMPI).