Использование MPIX-расширений системы Blue Gene/P

В MPI-реализации на Blue Gene/P доступны три дополнительные функции, расширяющие функциональность механизма передачи сообщений с учетом особенностей аппаратуры системы. Они используются в рамках коммуникаций по сети трехмерного тора и упрощают отображение процессов на наборы процессоров.

Разделение вычислительных узлов и узлов ввода-вывода приводит к возникновению понятия набора процессоров (processor set, pset). Набором процессоров, или набором вычислительных узлов, называется множество процессоров, совместно использующих один и тот же узел ввода-вывода.

Для использования MPIX-расширений необходимо включить в исходный код файл mpix.h. В языке программирования Си для этого служит директива препроцессора #include:

#include <mpix.h>

В Фортране используется инструкция include:

include "mpix.h"

Полная документация по MPIX-расширениям доступна на wiki-страницах проекта DCMF.

Создание четырехмерного декартового коммуникатора

Функция

int MPIX_Cart_comm_create(MPI_Comm *cart_comm);

создает четырехмерный декартов (Cartesian) коммуникатор, который отражает используемые вычислительные ресурсы. Измерения X, Y и Z совпадают с измерениями, заданными для аппаратного раздела, а T-измерение принимает значение 1 в SMP-режиме, значение 2 в DUAL-режиме и значение 4 в VN-режиме. Коммуникатор учитывает связи трехмерной сетки или тора, которые имеются в аппаратном разделе. Координаты узла в коммуникаторы совпадают с таковыми в аппаратном разделе.

Операция является коллективной, и должна быть выполнена на всех вычислительных узлах. В некоторых случаях она может закончиться неудачно. Как правило, это бывает связано с тем, что оно была вызвана не на всех вычислительных узлах раздела. Код завершения MPI_SUCCESS сигнализирует об успешно выполнении процедуры.

Текущая версия программного обеспечения системы Blue Gene/P позволяет обращаться к функции MPIX_Cart_comm_create() только при используемом по умолчанию отображении MPI-процессов. Если вы хотите создать отражающий топологию машины декартов коммуникатор при другом типе отображения MPI-процессов, то вам необходимо воспользоваться стандартной MPI-функцией MPI_Cart_create() (см. реализацию функции MPIX_Cart_comm_create(): ссылка (а) ссылка (б), ссылка (в)). (В настоящее время [02 декабря 2010 года] в режимах DUAL и VN рекомендуется реализовывать функцию, аналогичную MPIX_Cart_comm_create(), самостоятельно.)

Объединение процессов, принадлежащих одному набору процессоров

Коллективная операция

int MPIX_Pset_same_comm_create(MPI_Comm *pset_comm);

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

Наиболее типичное использование этой функции состоит в координировании доступа к I/O-картам. Например, нулевой процесс каждого коммуникатора можно использовать для сбора данных с остальных процессов и последующей их записи на диск.

Создаваемые коммуникаторы проиллюстрированы на рисунке.

Результат вызова MPIX_Pset_same_comm_create() на IBM Blue Gene/P

Объединение процессов, принадлежащих разным наборам процессоров

В результате обращения к коллективной функции

int MPIX_Pset_diff_comm_create(MPI_Comm *pset_comm);

будут созданы коммуникаторы, объединяющие узлы, принадлежащие разным наборам процессоров, т.е. никакие два процесса каждого коммуникатора не будут иметь общего для них узла ввода-вывода.

Эта функция обычно используется совместно с описанной выше MPIX_Pset_same_comm_create(). Например, ненулевые процессы из коммуникатора, объединяющего узлы, принадлежащие одному набору процессоров, будут выделены исключительно для вычислений, а нулевые процессы, отвечающие за ввод-вывод, будут координировать свои действия, находясь в коммуникаторе, созданном функцией MPIX_Pset_diff_comm_create().

Создаваемые коммуникаторы проиллюстрированы на рисунке.

Результат вызова MPIX_Pset_diff_comm_create() на IBM Blue Gene/P

Текст составлен на основе материала раздела 7.3.1, «Blue Gene/P MPI extensions», 2-го издания книги «IBM System Blue Gene Solution: Blue Gene/P Application Development»