Главная
Вычислительные ресурсы
C чего начать
Вопросы - ответы
Документация
Исследования
Контакты

Руководство по использованию сети МВС-Экспресс на К-100.

Ю. А. Климов, А. О. Лацис.

1. Общие сведения.

На К-100 вводится в опытную эксплуатацию сегмент коммуникационной системы МВС-Экспресс. Это дополнительная к Infiniband коммуникационная система (сеть), оптимизированная для передачи данных с минимальными задержками. В части задержек при передаче коротких сообщений МВС-Экспресс лучше, чем Infiniband, в части скорости при передаче длинных сообщений – несколько хуже. Прикладная программа может использовать сеть МВС-Экспресс как вместо сети Infiniband, так и вместе с ней (см. ниже).

Сеть МВС-Экспресс в настоящее время охватывает только часть машины (24 вычислительных узла, с 1-го по 24-й включительно). При запуске программы, использующей эту сеть, программа гарантированно попадает именно на эти узлы. Программам, не использующим сеть МВС-Экспресс, оснащенные этой сетью узлы выделяются в последнюю очередь, только тогда, когда все остальные узлы заняты.

Попадание Вашей задачи на необходимые вычислительные узлы может неоправданно затянуться, если Вы заказали все 24 узла, а хотя бы один из них в это время неисправен. О текущем состоянии сегмента сети МВС-Экспресс всегда можно справиться у Администратора К-100.

Вычислительные узлы, оснащенные сетью МВС-Экспресс, по общей системной конфигурации немного отличаются от остальных. Каждый такой узел содержит не 11, а только 10 ядер, доступных для размещения процессов прикладной программы, и имеет только 80, а не 96ГБ оперативной памяти. На расчете количества процессоров, например, в выдаче команды mfree, это не отражается – система запуска задач считает, что процессоров на каждом из выделенных узлов по 11. Чтобы учесть их реальное количество, следует при запуске задачи явно задавать значение для ключа –ppn.

И сеть Infiniband, и сеть МВС-Экспресс допускают возможность использования (возможно, совместного) двух библиотек передачи данных между процессами – MPI и shmem. В качестве основного мы рекомендуем пользователям такой вариант совместного использования двух сетей, когда MPI работает по сети Infiniband, а shmem – по сети МВС-Экспресс. Другие варианты возможны, но здесь не рассматриваются. Если Вы хотите использовать только shmem на основе МВС-Экспресс, без MPI, то для простоты следует оформить программу так, как будто бы Вы все же собирались использовать MPI тоже.

Зачем программисту может понадобиться использовать дополнительную сеть? Точнее, зачем вообще использовать в своих программах что-то, кроме версии MPI по умолчанию, особенно на такой машине, как К-100, оснащенной очень качественной версией MPI на базе очень качественного варианта Infiniband? На этот вопрос имеется, как минимум, 2 ответа.

1). Некоторые программисты используют сложно организованные, разбросанные по памяти мелкими порциями данные, при параллельной работе с которыми shmem удобнее, чем MPI, а малые задержки важнее, чем большая пропускная способность. Такие программисты используют shmem, как наиболее соответствующий их задачам вариант коммуникационной библиотеки, и могут ускорить выполнение своих программ, если используют реализацию shmem именно на базе сети МВС-Экспресс. В некоторых случаях, хотя бы просто потому, что две сети, вообще говоря, работают быстрее, чем одна.

2). Те программисты, которые используют не очень сложно организованные данные, и не имеют возможности и/или желания посвящать всю свою жизнь кропотливой «шлифовке» текста своих программ, могут, как ни странно, получить от использования сети МВС-Экспресс гораздо больше преимуществ, причем на качественном уровне.

Разработчики системного программного обеспечения для параллельных машин хорошо знают, каким образом можно значительно упростить разработку параллельных программ, ускорить их написание и отладку, по сравнению с традиционной технологией непосредственного использования прикладным программистом MPI и/или shmem. Для этого необходимо предоставить прикладному программисту возможность использования виртуальной общей памяти, доступной всем процессам параллельной программы. Тогда явно пересылать данные между процессами, хоть «более удобным», хоть «менее удобным» способом, вообще не потребуется. Именно так обстоит дело при использовании, например, OpenMP, на многопроцессорных машинах с физически общей памятью.

Попытки программной реализации общей памяти на вычислительных кластерах, или даже прямого переноса на кластеры виртуального OpenMP, предпринимались неоднократно, но всякий раз терпели неудачу. Падение эффективности параллельной реализации было таким, что его невозможно было оправдать никаким упрощением написания программы, а отладка усложнялась, вместо того, чтобы упроститься. Причина этих неудач, помимо прочего, заключалась в использовании для реализации виртуальной общей памяти плохих коммуникационных сетей. Причем «плохих» именно в том смысле, в каком shmem лучше, чем MPI, а МВС-Экспресс лучше, чем Infiniband.

Одновременно с вводом в строй коммуникационной системы МВС-Экспресс мы хотели бы предложить пользователям К-100 очень простую систему организации виртуальной общей памяти RefNUMA (описание – в отдельном документе, на К-100 – в /common/coarray/doc). Реализация этой библиотеки выполнена на базе shmem, и рассчитана изначально на очень хорошую сеть. Оказалось, что высокая эффективность сети именно в тех режимах работы, в которых сеть МВС-Экспресс работает лучше, чем Infiniband, как раз и дает возможность получить эффективную реализацию виртуальной общей памяти. Таким образом, нам удалось прозрачным для пользователя способом конвертировать количественные различия сетей по показателям эффективности в качественное, очевидное облегчение работы по созданию параллельных программ, причем без существенного снижения эффективности.

Библиотека RefNUMA реализована на shmem, и может использоваться совместно с реализацией shmem на базе Infiniband (см. описание RefNUMA). Уже такой вариант работает гораздо лучше, чем известные до сих пор реализации виртуальной общей памяти на кластерах. Однако, вариант с реализацией shmem на базе МВС-Экспресс работает еще гораздо лучше.

2. Как воспользоваться.

  1. Выбрать вариант системы программирования intelintelmpimvse. При этом Вы выбираете компиляторы Intel, Intel MPI и МВС-Экспресс shmem.

  2. Программа должна включать следующие заголовочные файлы:

    #include <mpi.h>
    #include <shmem.h>
    #include <shmem-mpi.h>

    Исполняемая часть программы должна начинаться с

    shmem_mpi_init( &argc, &argv );

    и заканчиваться

    shmem_mpi_finalize();

    Вызывать MPI_Init(), shmem_init(), MPI_Finalize(), shmem_finalize() НЕ НАДО.

  3. Трансляция программы выполняется командами, принятыми в Intel MPI:
     mpicc – для использования компиляторов gnu,
     mpiicc (рекомендуется) – для использования компиляторов Intel. В конце командной строки надо добавить слово $SHMEM, например:
    mpiicc -o myprog myprog.c $SHMEM

    Напомним, что команда трансляции текстов на MPI и C++ компилятором Intel называется mpiicpc.

    Также можно использовать команду shmemcc (для C) или shmemCC (для C++) без добавления слова $SHMEM, в том числе, для программ, использующих MPI, а не только shmem.

  4. Запуск программы – командой mpirun с обычными ключами. Запрос на использование именно тех модулей, на которых есть сеть МВС-Экспресс, добавляется автоматически.

3. Особенности shmem на базе МВС-Экспресс.

Предлагаемая версия shmem несколько отличается от ранних версий shmem-экспресс. Отличия в основном заключаются в приближении к традиционным реализациям.

Ликвидированы функции семейства shmem_cm_. Функция shmem_init() теперь не имеет аргументов, как и в традиционных реализациях shmem. Добавлена функция shmalloc(), на особенностях которой остановимся несколько подробнее.

Эта функция предназначена для выделения набора симметричных массивов во всех процессах. Если все процессы выполнили коллективную операцию

ptr = shmalloc( n );

то обращение

shmem_double_p( &ptr[k], val, m);

приведет к записи значения val в процессе номер m именно в ptr[k]. Область памяти, выделяемая при обращении к shmalloc(), берется из специального пула, не используемого больше ни для чего. Чтение (shmem_g_, shmem_get) из таких массивов очень медленное, а запись происходит быстрее, чем для «обычной» памяти. Однако, локальная обработка данных из массивов, выделенных обращением к shmalloc(), выполняется с нормальной скоростью только в случае, когда выполняющий обработку процесс располагается на одном из ядер процессора №0. Если процесс попал на ядро процессора №1, весь выигрыш от ускорения записи в чужую память будет с лихвой ликвидирован замедлением работы с собственной памятью. В описываемой версии shmem процессы с четными номерами размещаются в процессоре №0, а процессы с нечетными номерами – в процессоре №1. Тем не менее, в некоторых случаях, прежде всего – в гибридных программах, использование массивов, выделенных обращением к shmalloc(), может оказаться полезным.

 
 
 
 
 
 
 
  Тел. +7(499)220-79-72; E-mail: inform@kiam.ru