Коммуникационная библиотека ScaMPI
На кластере установлена оптимизированная для коммуникационной сети 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).
| |