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