ШЕМ
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. На каждом компьютере работает копия программы ( SPMD ); каждая копия называется 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 ШМЕМ [9]
- IBM ШМЕМ [9]
- GPSHMEM [9]
Реализации OpenSHMEM
[ редактировать ]OpenSHMEM — это стандартная разработка SGI и Open Source Software Solutions, Inc.
- Хьюстонский университет: Справочник OpenSHMEM [4] [9]
- Mellanox МасштабируемыйSHMEM [9]
- Portals-SHMEM (поверх интерфейса порталов )
- Университет Флориды: Gator SHMEM [9]
- Open MPI включает реализацию OpenSHMEM. [11]
- Сопроцессор Адаптева Епифания [12]
- Sandia OpenSHMEM (SOS) поддерживает несколько сетевых API. [13]
Недостатки
[ редактировать ]В первые годы SHMEM был доступен только на некоторых машинах Cray Research (позже дополнительно на SGI). [1] оснащены специальными сетями, что ограничивает широкое распространение библиотек и привязано к поставщику (например, Cray Research рекомендовала частично переписать программы MPI, чтобы объединить вызовы MPI и shmem, что делает программу непереносимой в другую среду с чистым MPI).
SHMEM не был определен как стандарт, [9] [1] поэтому другими поставщиками было создано несколько несовместимых вариантов библиотек SHMEM. Библиотеки имели разные имена файлов, разные имена функций управления для запуска PE или получения текущего идентификатора PE, [9] и некоторые функции были изменены или не поддерживаются.
Некоторые процедуры SHMEM были разработаны в соответствии с ограничениями архитектуры Cray T3D, например, сокращение и широковещательная передача могли быть запущены только на подмножествах PE, размер которых равен степени двойки . [2] [9]
Варианты библиотек SHMEM могут работать поверх любой библиотеки MPI, даже если в кластере имеется только Ethernet, не оптимизированный для RDMA , однако производительность обычно будет хуже, чем у других расширенных сетевых протоколов.
Память в общей области следует выделять с помощью специальных функций ( шмаллок / shfree ), а не в системе маллок . [9]
SHMEM доступен только для C и Fortran (некоторые версии также для C++). [9]
Многие недостатки SHMEM были преодолены за счет использования OpenSHMEM в популярных субмикросекундных соединениях, что стало возможным благодаря экзафлосной разработке. [7]
См. также
[ редактировать ]- Интерфейс передачи сообщений (особенно односторонние операции MPI-2)
- Активные сообщения
- Unified Parallel C (один из языков PGAS, может быть реализован поверх SHMEM)
Ссылки
[ редактировать ]- ^ Jump up to: а б с ШМЕМ // Крей, документ 004-2178-002, глава 3
- ^ Jump up to: а б Введение в параллельные вычисления. 3.11. Сопутствующая работа // курс cse590o, Вашингтонский университет, зима 2002 г.; стр. 154
- ^ «Новые ускорения параллельного программирования» (PDF) . Мелланокс. 2012 . Проверено 18 января 2014 г.
SHMEM используется/предлагается в качестве интерфейса нижнего уровня для реализаций PGAS.
- ^ Jump up to: а б с Пул, Стивен (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 ...»
- ^ Jump up to: а б «ОпенШМЭМ 2015» . www.csm.ornl.gov . Проверено 10 апреля 2017 г.
- ^ man shmem_get (SGI TPL)
- ^ Jump up to: а б с д и ж г час я дж к л м Учебное пособие по OpenSHMEM // Университет Хьюстона, Техас, 2012 г.
- ^ Руководство по программированию Шмем // Квадрикс, 2000-2001 гг.
- ^ OpenMPI
- ^ Джеймс Росс и Дэвид Ричи. Реализация OpenSHMEM для сопроцессора Adapteva Epiphany. В материалах третьего семинара по OpenSHMEM и родственным технологиям, «ОпенШМЭМ 2016» . www.csm.ornl.gov . . Спрингер, 2016.
- ^ Сандия OpenSHMEM (SOS) на Github
Дальнейшее чтение
[ редактировать ]- Подпрограммы доступа к общей памяти (SHMEM) // Cray Research, 1995.
Внешние ссылки
[ редактировать ]- Использование SHMEM на CRAY T3E
- man intro_shmem (SGI TPL) — Введение в модель программирования SHMEM.
- OpenSHMEM : попытка создать спецификацию стандартизированного API для параллельного программирования в разделенном глобальном адресном пространстве.