Размещение MPI-процессов по процессорам Blue Gene/P

Обновление от 02 декабря 2010 года. Пожалуйста, обратите внимание, что информация в дополнении E, «Mapping», 2-го издания книги «IBM System Blue Gene Solution: Blue Gene/P Application Development» в той ее части, которая касалась размещения MPI-процессов по процессорам Blue Gene/P в режимах VN и DUAL, в настоящее время является неактуальной. На текущий момент следует использовать данные из приложения F, «Mapping», 4-го издания этой книги. Представленный ниже текст отражает актуальную информацию.

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

Если задача запущена в SMP-режиме, каждому узлу сопоставляется лишь один MPI-процесс, который помещается на ядро номер 0. В этом случае, по умолчанию, MPI-процессы размещаются в XYZT-порядке, где <X,Y,Z> — это координаты процессора в трехмерном торе, а T — номер ядра в вычислительном узле (T = 0, 1, 2, 3). А именно:

  • MPI-процесс 0 получает <X,Y,Z,T>-координаты <0,0,0,0>
  • MPI-процесс 1 получает <X,Y,Z,T>-координаты <1,0,0,0>
  • MPI-процесс 2 получает <X,Y,Z,T>-координаты <2,0,0,0>

Дальнейшая нумерация продолжается по этой же схеме: быстрее всего изменяется координата X, далее — Y и, наконец, — Z.

В VN- и DUAL-режимах, по умолчанию, используется TXYZ-порядок (а не XYZT-порядок, как говорилось ранее). Например, в VN-режиме первые четыре MPI-процесса попадают на ядра 0, 1, 2, 3 первого вычислительного узла, следующие четыре — на ядра 0, 1, 2, 3 второго вычислительного узла, и так далее, причем вычислительное узлы выбираются в XYZ-порядке.

На Blue Gene/P предопределены следующие 12 отображений:

  • XYZT, XZYT, YZXT, YXZT, ZXYT, ZYXT,
  • TXYZ, TXZY, TYZX, TYXZ, TZXY, TZYX.

Т.е. измерение T может самым быстро или самым медленно изменяющимся, при этом для остальных измерений возможны все комбинации.

Например, для аппаратного раздела 4 x 4 x 2 при TXYZ-порядке отображение MPI-процессов 0–7 на координаты <X,Y,Z,T> будет выглядеть как

0 1 2 3 4 5 6 7
X 0 0 0 0 1 1 1 1
Y 0 0 0 0 0 0 0 0
Z 0 0 0 0 0 0 0 0
T 0 1 2 3 0 1 2 3

А отображение в XYZT-порядке для того же раздела будет таким:

0 1 2 3 4 5 6 7
X 0 1 2 3 0 1 2 3
Y 0 0 0 0 1 1 1 1
Z 0 0 0 0 0 0 0 0
T 0 0 0 0 0 0 0 0

Каким именно методом будет специфицировано отображение определяется на этапе запуска задачи. Команда mpirun поддерживает следующие способы спецификации отображения через аргументы командной строки.

  • -mapfile TXYZ — укажет системе использовать TXYZ-порядок (можно указать любой из 12 предопределенных порядков)
  • -mapfile my.map — говорит системе, что информацию об отображении нужно прочитать из файла my.map
  • -env BG_MAPPING=TXYZ — информация необходимости использовать один из 12 предопределенных порядков передается через переменную окружения

Наибольшую гибкость обеспечивает использование использование файла с информацие об отображении. Он имеет следующий простой синтаксис. Число строк в нем равно числу MPI-процессов. В каждой строке записано четыре целых неотрицательных числа, разделенных пробелами. Каждая четверка чисел определяет координаты <X,Y,Z,T> в трехмерном торе для MPI-процесса, которому соответствует данная строка: первая строка — MPI-процессу номер 0, вторая — MPI-процессу номер 1, и т. д. Необходимо, чтобы содержание файла было непротиворечивым, а именно, чтобы существовало взаимнооднозначное соответствие между номером MPI-процесса и <X,Y,Z,T>-положением.

Общие рекомендации

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

Замыкание топологии трехмерной решетки в тор возможно на разделах, размер которых равен или кратен размеру midplane'а: 8 x 8 x 8 = 512 вычислительных узлов. Если решетка замкнута в тор, то для упомянутой одномерной задачи XYZT-порядок сохранит локальность коммуникаций всюду, за исключением ребер тора, на которых возникает дополнительный отрезок пути. Для разделов меньших размеров, например, для раздела, состоящего из 64 вычислительных узлов (топология трехмерной решетки 4 x 4 x 4) вместо отображения по умолчанию лучше задать змеевидное отображение с помощью файла.

Возможные размерности трехмерных решеток

В общем случае размерности трехмерных решеток при увеличении размера раздела изменяются следующим образом:

  • 32 — 4 x 4 x 2
  • 64 — 4 x 4 x 4
  • 128 — 4 x 4 x 8
  • 256 — 8 x 4 x 8
  • 512 — 8 x 8 x 8
  • 1024 — 8 x 8 x 16
  • 1024 — 8 x 16 x 8
  • 2048 — 8 x 16 x 16

Так как на системе Blue Gene/P, установленной на факультете ВМК МГУ, минимальный раздел состоит из 128 вычислительных узлов, то размерности 4 x 4 x 2 и 4 x 4 x 4 на ней недоступны.

Чтобы указать конкретную размерность решетки при использовании 1024 процессорных узлов, в командном файле планировщика необходимо указать bg_rotate=false и bg_shape=8x8x16, либо bg_shape=8x16x8.

В дополнении C, «Files on architectural features», 2-го издания книги «IBM System Blue Gene Solution: Blue Gene/P Application Development» (см. ссылки на официальную документацию) приведен код, с помощью которого можно узнать размерность раздела на этапе исполнения программы.

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