ШМЕМ


Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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)
  • Quadrics: Q-SHMEM [10] для кластеров Linux с межсоединением QsNet [9]
  • Циклоп-64 ШМЕМ
  • HP SHMEM [9]
  • IBM SHMEM [9]
  • GPSHMEM [9]

Реализации OpenSHMEM

OpenSHMEM - это стандартная разработка SGI и Open Source Software Solutions, Inc.

  • Университет Хьюстона: ссылка OpenSHMEM [4] [9]
  • Mellanox ScalableSHMEM [9]
  • Portals-SHMEM (поверх интерфейса Portals )
  • Университет Флориды: Gator SHMEM [9]
  • Open MPI включает реализацию OpenSHMEM [11]
  • Адаптева Богоявленский Сопроцессор [12]

Недостатки

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

SHMEM не был определен как стандарт [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)
  • Активные сообщения
  • Unified Parallel C (один из языков PGAS, может быть реализован поверх SHMEM)

использованная литература

  1. ^ a b c SHMEM // Cray, Документ 004-2178-002, глава 3
  2. ^ a b Введение в параллельные вычисления - 3.11 Сопутствующие работы // курс cse590o, Вашингтонский университет, зима 2002 г .; стр. 154
  3. ^ «Новые ускорения для параллельного программирования» (PDF) . Mellanox. 2012 . Проверено 18 января 2014 года . SHMEM используется / предлагается как интерфейс нижнего уровня для реализаций PGAS.
  4. ^ a b c Пул, Стивен (2011). OpenSHMEM - к единой модели RMA . Энциклопедия параллельных вычислений . С. 1379–1391. DOI : 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 . Проверено 10 апреля 2017 .
  8. ^ человек shmem_get (SGI TPL)
  9. ^ a b c d e f g h i j k l m Учебник по OpenSHMEM // Хьюстонский университет, штат Техас, 2012 г.
  10. ^ Руководство по программированию Shmem // Quadrics, 2000-2001
  11. ^ OpenMPI
  12. ^ Джеймс Росс и Дэвид Ричи. Реализация OpenSHMEM для сопроцессора Adapteva Epiphany. В материалах третьего семинара по OpenSHMEM и родственным технологиям «OpenSHMEM 2016» . www.csm.ornl.gov .. Спрингер, 2016.

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

  • Подпрограммы доступа к общей памяти (SHMEM) // Cray Research, 1995

внешние ссылки

  • Использование SHMEM на CRAY T3E
  • man intro_shmem (SGI TPL) - Введение в модель программирования SHMEM
  • OpenSHMEM : попытка создать спецификацию стандартизированного API для параллельного программирования в многораздельном глобальном адресном пространстве.
Источник « https://en.wikipedia.org/w/index.php?title=SHMEM&oldid=1031726187 »