ШМЕМ - SHMEM

ШМЕМ (из библиотеки Cray Research «Общая память»[1]) - это семейство библиотек параллельного программирования, обеспечивающее одностороннее, RDMA, интерфейсы параллельной обработки для суперкомпьютеров с распределенной памятью с малой задержкой. Аббревиатура SHMEM была впоследствии реконструирована и обозначена как «симметричная иерархическая память».[2] Позже он был расширен до распределенная память параллельные компьютерные кластеры, и используется как интерфейс параллельного программирования или как интерфейс низкого уровня для построения разделенное глобальное адресное пространство (PGAS) системы и языки.[3] «Libsma», первая библиотека SHMEM, была создана Ричардом Смитом из Cray Research в 1993 году как набор тонких интерфейсов для доступа к аппаратным средствам межпроцессорной связи CRAY T3D. SHMEM реализован Cray Research, SGI, Cray Inc., Quadrics, HP, GSHMEM, IBM, QLogic, Mellanox, университетами Хьюстона и Флориды; есть также OpenSHMEM с открытым исходным кодом.[4]

SHMEM заложил основы односторонней связи с малой задержкой (субмикросекунды).[5] После использования на CRAY T3E,[6] его популярность пошла на убыль, так как немногие машины могли обеспечивать задержку, близкую к микросекундам, необходимую для поддержания эффективности его характерной индивидуальной передачи слов. С появлением популярных субмикросекундных межсоединений, SHMEM стал использоваться для удовлетворения потребности в сверхэффективных портативных методах параллельной связи для экзадачных вычислений.[7]

Программы, написанные с использованием SHMEM, могут быть запущены на нескольких компьютерах, связанных между собой какой-либо высокопроизводительной сетью, поддерживаемой используемой библиотекой SHMEM. На каждом компьютере работает копия программы (СПМД ); каждая копия называется PE (обрабатывающий элемент). PE могут запрашивать у библиотеки SHMEM выполнение операций удаленного доступа к памяти, таких как чтение (операция "shmem_get") или запись (операция "shmem_put") данных. Одноранговые операции являются односторонними, что означает, что для завершения действия не требуется никакого активного взаимодействия с удаленным потоком (но он может опросить свою локальную память на предмет изменений с помощью shmem_wait). Операции могут выполняться с короткими типами, такими как байты или слова, или с более длинными типами данных, такими как массивы, иногда с равномерным разделением или индексированием (отправляются только некоторые элементы массива). Для коротких типов данных SHMEM может выполнять атомарные операции (CAS, выборка и добавление, атомарное приращение и т. д.) даже в удаленной памяти. Также есть два разных метода синхронизации:[4] синхронизация управления задачами (барьеры и блокировки) и функции для принудительного ограничения и упорядочения памяти. SHMEM имеет несколько коллективных операций, которые должны запускаться всеми PE, например, сокращение, трансляция, сбор.

У каждого PE часть своей памяти объявлена ​​как «симметричный» сегмент (или область разделяемой памяти), а другая память является частной. Только "общая" память может быть доступна в одностороннем порядке с удаленных PE. Программисты могут использовать конструкции статической памяти или процедуры shmalloc / shfree для создания объектов с симметричным адресом, охватывающих PE.

Типичные функции SHMEM

  • start_pes (N) - запустить N обрабатывающих элементов (PE)
  • _my_pe () - попросить SHMEM вернуть PE-идентификатор текущего потока
  • shmem_barrier_all () - дождаться, пока все PE дойдут до барьера; затем дайте им возможность пойти дальше
  • shmem_put (target, source, length, pe) - записать данные длины «length» на удаленный адрес «target» на PE с идентификатором «pe» с локального адреса «source»
  • shmem_get (target, source, length, pe) - читать данные длины «length» с удаленного адреса «source» на PE с идентификатором «pe» и сохранять для чтения значений в локальный адрес «target»[8]

Список реализаций SHMEM

  • Cray Research: оригинальный SHMEM для суперкомпьютеров CRAY T3D, CRAY T3E и Cray Research PVP[9]
  • SGI: SGI-SHMEM для систем с NUMALink и сборкой Altix с сетевыми адаптерами Infiniband
  • Cray Inc .: MP-SHMEM для Unicos MP (суперкомпьютер X1E)
  • Cray Inc .: LC-SHMEM для Unicos LC (Cray XT3, XT4, XT5)
  • Квадрики: Q-SHMEM[10] для кластеров Linux с подключением QsNet[9]
  • Циклоп-64 ШМЕМ
  • HP SHMEM[9]
  • IBM SHMEM[9]
  • GPSHMEM[9]
  • ----- Реализации OpenSHMEM (стандартная работа SGI и Open Source Software Solutions, Inc.)
  • Университет Хьюстона: Справочник по OpenSHMEM[4][9]
  • Mellanox ScalableSHMEM[9]
  • Порталы-ШМЭМ (поверх Интерфейс порталов )
  • Университет Флориды: Gator SHMEM[9]
  • Открыть MPI включает реализацию OpenSHMEM[11]
  • Адаптева Богоявленский Сопроцессор[12]

Недостатки

В первые годы SHMEM был доступен только на некоторых машинах Cray Research (позже дополнительно на SGI).[1] оборудованы специальными сетями, ограничивающими распространение библиотеки и привязка к поставщику (например, Cray Research рекомендовала частично переписать программы MPI, чтобы объединить вызовы MPI и shmem, что делает программу непереносимой в другую среду clear-MPI).

ШМЭМ не был определен как стандарт,[9][1] поэтому было создано несколько несовместимых вариантов библиотек SHMEM от других производителей. У библиотек были разные имена включаемых файлов, разные имена функций управления для запуска PE или получения текущего идентификатора PE,[9] и некоторые функции были изменены или не поддерживаются.

Некоторые подпрограммы SHMEM были разработаны в соответствии с ограничениями архитектуры CRAY T3D, например, сокращения и широковещательные рассылки могли запускаться только на подмножествах PE с размером, равным двойке.[2][9]

Варианты библиотек SHMEM могут работать поверх любой библиотеки MPI, даже если в кластере есть только Ethernet, не оптимизированный для rdma, однако производительность обычно будет хуже, чем у других расширенных сетевых протоколов.

Память в разделяемой области должна выделяться с помощью специальных функций (shmalloc / shfree), а не системной malloc.[9]

SHMEM доступен только для C и Fortran (некоторые версии также для C ++).[9]

Многие недостатки SHMEM были преодолены с использованием OpenSHMEM на популярных субмикросекундных межсоединениях, что было обусловлено разработкой экзадачной модели.[7]

Смотрите также

Рекомендации

  1. ^ а б c ШМЕМ // Cray, документ 004-2178-002, глава 3
  2. ^ а б Введение в параллельные вычисления - 3.11 Связанные работы // курс cse590o, Вашингтонский университет, зима 2002 г .; стр. 154
  3. ^ «Новые ускорения для параллельного программирования» (PDF). Mellanox. 2012 г.. Получено 18 января 2014. SHMEM используется / предлагается как интерфейс нижнего уровня для реализаций PGAS
  4. ^ а б c Пул, Стивен (2011). OpenSHMEM - На пути к единой модели RMA. Энциклопедия параллельных вычислений. С. 1379–1391. Дои:10.1007/978-0-387-09766-4_490. ISBN  978-0-387-09765-7.
  5. ^ Инструменты для сравнительного анализа, отслеживания и моделирования приложений SHMEM // CUG 2012, доклад суперкомпьютерного центра Сан-Диего и ORNL
  6. ^ Последние достижения в области параллельных виртуальных машин и передачи сообщений ..., Том 11 стр. 59: «Односторонняя коммуникация как парадигма программирования изначально стала популярной благодаря библиотеке SHMEM на Cray T3D и T3E ...»
  7. ^ а б «OpenSHMEM 2015». www.csm.ornl.gov. Получено 2017-04-10.
  8. ^ мужчина shmem_get (SGI TPL)
  9. ^ а б c d е ж грамм час я j k л м РУКОВОДСТВО ПО OpenSHMEM // Университет Хьюстона, Техас, 2012 г.
  10. ^ Руководство по программированию Shmem // Квадрики, 2000-2001 гг.
  11. ^ OpenMPI
  12. ^ Джеймс Росс и Дэвид Ричи. Реализация OpenSHMEM для сопроцессора Adapteva Epiphany. В материалах третьего семинара по OpenSHMEM и родственным технологиям, «OpenSHMEM 2016». www.csm.ornl.gov.. Спрингер, 2016.

дальнейшее чтение

внешняя ссылка

  • Использование SHMEM на CRAY T3E
  • мужчина intro_shmem (SGI TPL) - Введение в модель программирования SHMEM
  • OpenSHMEM: попытка создать спецификацию стандартизированного API для параллельного программирования в многораздельном глобальном адресном пространстве.