Коммуникационные сети Blue Gene/P

Сеть «трехмерный тор»

Все MPI-операции типа «точка-точка» осуществляются через сеть трехмерного тора. При этом имеются две следующие стратегии маршрутизирования пакетов.

  • Маршрутизация по закрепленному маршруту (deterministic routing)
    • Пакеты от отправителя к получателю всегда направляются по одному и тому же пути. Преимущество этого подхода состоит в том, что порядок пакетов всегда поддерживается без привлечения дополнительной логики. Однако, такой механизм может привести к появлению активных участков в сети (network hot spots), если одновременно происходит несколько коммуникаций типа «точка-точка», а их маршруты пересекаются в некоем вычислительном узле.
  • Адаптивная, или динамическая, маршрутизация (adaptive routing)
    • Различные пакеты от отправителя к получателю посылаются по разным путям. Конкретный маршрут определяется на этапе исполнения в зависимости от текущей нагрузки сети. Подобный подход обеспечивает более сбалансированную загрузку сети, но привносит задержку доставки данных (latency penalty).

Выбор типа маршрутизации определяется протоколом коммуникации. Реализация MPI на Blue Gene/P поддерживает три вида протоколов, которые мы сейчас рассмотрим.

  • Краткий протокол (MPI short protocol)
    • Используется для коротких сообщений (менее 224 байт), состоящих из единственного пакета. В этом случае всегда используется маршрутизация по закрепленному маршруту.
  • Жадный протокол (MPI eager protocol)
    • Применяется для сообщений среднего размера. Отправитель посылает сообщение без предварительной проверки того, что принимающая сторона готова к его получению. Протокол тоже использует маршрутизацию по закрепленному маршруту.
  • Протокол с предварительной установкой контакта (MPI rendezvous protocol)
    • Большие (более 1200 байт) сообщения посылаются с использованием этого протокола. Сначала установливается соединения между отправителем и получателем, и только после этого принимающая сторона обращается к механизму прямого доступа к памяти (direct memory access, DMA), чтобы забрать данные у посылающей. Протокол использует динамическую маршрутизацию, и оптимизирован для максимальной пропускной способности. Понятно, что первоначальное установление связи приводит к увеличению задержки доставки данных (latency).

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

  • Уменьшите значение порога выбора протокола (т.е. rendezvous-протокол будет использован, начиная с меньших значений размеров сообщений), если
    • большое число маленьких сообщений перегружают сеть;
    • жадные сообщения приводят к появлению искусственных активных участков сети (artificial hot spots);
    • программа не очень сильно зависит от задержки доставки данных (latency-insensitive).
  • Увеличьте значение порога выбора протокола (т.е. rendezvous-протокол будет использован, начиная с больших значений размеров сообщений), если
    • большая часть взаимодействий происходит между соседними или близкими в смысле манхэттенской метрики узлами;
    • преимущественно используются длинные сообщения;
    • для сообщений средних размеров необходимо минимизировать интервал задержки доставки данных.

При программировании с использованием MPI необходимо придерживаться следующих рекомендаций.

  • Совмещайте коммуникации и вычисления, используя неблокирующие вызовы MPI_Irecv() и MPI_Isend(), что позволит устройству прямого доступа к памяти (direct memory access, DMA) работать в фоновом режиме. Замечание: сети коллективных операций и барьеров не используют DMA-механизм, в этом случае операции не могут быть выполнены в фоновом режиме.
  • Избегайте дисбаланса нагрузки. Эта рекомендация применима ко всем параллельным системам, но особенно актуальна для Blue Gene/P, когда задача должна масштабироваться до тысяч процессоров.
  • Избегайте буферизованных MPI_Bsend()- и синхронных MPI_Ssend()-посылок, так как первая требует выделения дополнительной памяти, что замедляет приложение, а вторая имеет нелокальную сементику завершения.
  • Вызывайте функции инициации получения данных (MPI_Irecv()) как можно раньше, желательно до отправки сообщения. Т.е. рекомендуется, чтобы к моменту обращения отправителем к MPI_Isend() принимающая сторона уже была готова принять сообщение.
  • Избегайте векторных и непоследовательных типов данных. Несмотря на то, что определяемые пользователем типы данных позволяют в MPI элегантно организовать пересылку сложных структур данных, как правило, это идет в ущерб эффективности. Более того, MPI-реализация на Blue Gene/P использует аппаратные инструкции сохранения и загрузки четверных слов, и для оптимальной производительности данные должны быть расположены в памяти последовательно и правильно выровнены.

Сеть коллективных операций

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

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