В MPI-реализации на Blue Gene/P доступны три дополнительные функции, расширяющие функциональность механизма передачи сообщений с учетом особенностей аппаратуры системы. Они используются в рамках коммуникаций по сети трехмерного тора и упрощают отображение процессов на наборы процессоров.
Разделение вычислительных узлов и узлов ввода-вывода приводит к возникновению понятия набора процессоров (processor set, pset). Набором процессоров, или набором вычислительных узлов, называется множество процессоров, совместно использующих один и тот же узел ввода-вывода.
Для использования MPIX-расширений необходимо включить в исходный код файл mpix.h. В языке программирования Си для этого служит директива препроцессора #include:
В Фортране используется инструкция include:
Полная документация по MPIX-расширениям доступна на wiki-страницах проекта DCMF.
Функция
создает четырехмерный декартов (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(), самостоятельно.)
Коллективная операция
создает набор коммуникаторов, в каждый из которых входят все вычислительные узлы из данного набора процессоров, т.е. те compute-карты, которые разделяют один и тот же узел ввода-вывода. Каждый вычислительный узел получает информацию только о том коммуникаторе, в который он входит.
Наиболее типичное использование этой функции состоит в координировании доступа к I/O-картам. Например, нулевой процесс каждого коммуникатора можно использовать для сбора данных с остальных процессов и последующей их записи на диск.
Создаваемые коммуникаторы проиллюстрированы на рисунке.
В результате обращения к коллективной функции
будут созданы коммуникаторы, объединяющие узлы, принадлежащие разным наборам процессоров, т.е. никакие два процесса каждого коммуникатора не будут иметь общего для них узла ввода-вывода.
Эта функция обычно используется совместно с описанной выше MPIX_Pset_same_comm_create(). Например, ненулевые процессы из коммуникатора, объединяющего узлы, принадлежащие одному набору процессоров, будут выделены исключительно для вычислений, а нулевые процессы, отвечающие за ввод-вывод, будут координировать свои действия, находясь в коммуникаторе, созданном функцией MPIX_Pset_diff_comm_create().
Создаваемые коммуникаторы проиллюстрированы на рисунке.
Текст составлен на основе материала раздела 7.3.1, «Blue Gene/P MPI extensions», 2-го издания книги «IBM System Blue Gene Solution: Blue Gene/P Application Development»