Jump to content

Транзакционная память

В информатике и инженерии , транзакционная память пытается упростить параллельное программирование позволяя группе инструкций загрузки и сохранения выполняться атомарным способом . Это механизм управления параллелизмом , аналогичный транзакциям базы данных , предназначенный для управления доступом к общей памяти при параллельных вычислениях . Системы транзакционной памяти обеспечивают абстракцию высокого уровня в качестве альтернативы синхронизации потоков низкого уровня. Эта абстракция позволяет координировать одновременные операции чтения и записи общих данных в параллельных системах. [1]

Мотивация

[ редактировать ]
Атомарность между двумя параллельными транзакциями с конфликтом

В параллельном программировании синхронизация требуется, когда параллельные потоки пытаются получить доступ к общему ресурсу. Конструкции синхронизации потоков низкого уровня, такие как блокировки, являются пессимистичными и запрещают потокам, находящимся за пределами критического раздела , выполнять код, защищенный критическим разделом. Процесс применения и снятия блокировок часто действует как дополнительные накладные расходы в рабочих нагрузках с небольшими конфликтами между потоками. Транзакционная память обеспечивает оптимистичный контроль параллелизма , позволяя потокам работать параллельно с минимальным вмешательством. [2] Целью систем транзакционной памяти является прозрачная поддержка областей кода, помеченных как транзакции, путем обеспечения атомарности , согласованности и изоляции .

Транзакция — это набор операций, которые могут выполнять и фиксировать изменения, пока не возникает конфликта. При обнаружении конфликта транзакция вернется в исходное состояние (до каких-либо изменений) и будет выполняться повторно до тех пор, пока все конфликты не будут устранены. До успешной фиксации результат любой операции внутри транзакции является чисто спекулятивным. В отличие от синхронизации на основе блокировок, при которой операции сериализуются для предотвращения повреждения данных, транзакции допускают дополнительный параллелизм, пока лишь немногие операции пытаются изменить общий ресурс. Поскольку программист не несет ответственности за явную идентификацию блокировок или порядок их получения, программы, использующие транзакционную память, не могут создавать взаимоблокировки . [2]

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

def transfer_money(from_account, to_account, amount):
    """Transfer money from one account to another."""
    with transaction():
        from_account.balance -= amount
        to_account.balance   += amount

В коде блоку, определенному «транзакцией», гарантируется атомарность, согласованность и изоляция базовой реализацией транзакционной памяти, и он прозрачен для программиста. Переменные внутри транзакции защищены от внешних конфликтов, гарантируя, что либо будет передана правильная сумма, либо вообще не будет предпринято никаких действий. Обратите внимание, что ошибки, связанные с параллелизмом, по-прежнему возможны в программах, использующих большое количество транзакций, особенно в программных реализациях, где библиотека, предоставляемая языком, не может обеспечить правильное использование. Ошибки, возникающие в результате транзакций, часто бывает трудно отладить, поскольку точки останова не могут быть размещены внутри транзакции. [2]

Транзакционная память ограничена тем, что требует абстракции общей памяти. Хотя программы с транзакционной памятью не могут вызвать взаимоблокировку, программы все равно могут страдать от блокировки или нехватки ресурсов . Например, более длинные транзакции могут неоднократно возвращаться в ответ на несколько более мелких транзакций, тратя впустую время и энергию. [2]

Аппаратное обеспечение против программного обеспечения

[ редактировать ]
Аппаратная транзакционная память, использующая биты чтения и записи.

Абстракция атомарности в транзакционной памяти требует аппаратного механизма для обнаружения конфликтов и отмены любых изменений, внесенных в общие данные. [3] Аппаратные системы транзакционной памяти могут включать модификации процессоров, кэша и протокола шины для поддержки транзакций. [4] [5] [6] [7] [8] Спекулятивные значения в транзакции должны помещаться в буфер и оставаться невидимыми для других потоков до момента фиксации. Большие буферы используются для хранения спекулятивных значений, избегая при этом распространения записи через базовый протокол когерентности кэша . Традиционно буферы реализовывались с использованием различных структур в иерархии памяти, таких как очереди хранения или кэши. Буферы, расположенные дальше от процессора, такие как кэш L2, могут хранить более спекулятивные значения (до нескольких мегабайт). Оптимальный размер буфера все еще обсуждается из-за ограниченного использования транзакций в коммерческих программах. [3] В реализации кэша строки кэша обычно дополняются битами чтения и записи. Когда аппаратный контроллер получает запрос, контроллер использует эти биты для обнаружения конфликта. Если в параллельной транзакции обнаружен конфликт сериализуемости, то спекулятивные значения отбрасываются. При использовании кэшей в системе может возникнуть риск ложных конфликтов из-за использования детализации строк кэша. [3] Условная загрузка/сохранение (LL/SC), предлагаемая многими RISC- процессорами, может рассматриваться как самая базовая поддержка транзакционной памяти; однако LL/SC обычно работает с данными размером с машинное слово, поэтому поддерживаются только однословные транзакции. [4] Хотя аппаратная транзакционная память обеспечивает максимальную производительность по сравнению с программными альтернативами, в настоящее время ее использование ограничено.

Программная транзакционная память обеспечивает семантику транзакционной памяти в библиотеке времени выполнения программного обеспечения или языке программирования. [9] и требует минимальной аппаратной поддержки (обычно операция атомарного сравнения и замены или эквивалентная). Обратной стороной является то, что программные реализации обычно приводят к снижению производительности по сравнению с аппаратными решениями. Аппаратное ускорение может снизить некоторые накладные расходы, связанные с программной транзакционной памятью.

Из-за более ограниченного характера аппаратной транзакционной памяти (в текущих реализациях) использующему ее программному обеспечению может потребоваться довольно обширная настройка, чтобы в полной мере воспользоваться ее преимуществами. Например, распределитель динамической памяти может оказывать существенное влияние на производительность, а заполнение структуры может влиять на производительность (из-за проблем с выравниванием кэша и ложным разделением); в контексте виртуальной машины различные фоновые потоки могут вызывать непредвиденное прерывание транзакций. [10]

Одной из первых реализаций транзакционной памяти был буфер закрытого хранилища, используемый в Transmeta Crusoe Efficeon и процессорах . Однако это использовалось только для облегчения спекулятивной оптимизации двоичной трансляции, а не для какой-либо формы спекулятивной многопоточности или предоставления ее непосредственно программистам. Azul Systems также внедрила аппаратную транзакционную память для ускорения своих Java -устройств, но это также было скрыто от посторонних. [11]

Компания Sun Microsystems реализовала аппаратную транзакционную память и ограниченную форму спекулятивной многопоточности в своем высокопроизводительном процессоре Rock . Эта реализация доказала, что ее можно использовать для устранения блокировок и более сложных гибридных систем транзакционной памяти, где транзакции обрабатываются с помощью комбинации аппаратного и программного обеспечения. Процессор Rock был отменен в 2009 году, незадолго до его приобретения Oracle ; хотя реальные продукты так и не были выпущены, исследователям был доступен ряд прототипов систем. [11]

В 2009 году AMD предложила Advanced Synchronization Facility (ASF) — набор расширений x86 , которые обеспечивают очень ограниченную форму аппаратной поддержки транзакционной памяти. Целью было предоставить аппаратные примитивы, которые можно было бы использовать для синхронизации более высокого уровня, такие как программная транзакционная память или алгоритмы без блокировки. Однако AMD не сообщила, будет ли ASF использоваться в продуктах, и если да, то в какие сроки. [11]

Совсем недавно, в 2011 году, IBM объявила, что Blue Gene/Q имеет аппаратную поддержку как транзакционной памяти, так и спекулятивной многопоточности. Транзакционная память может быть настроена в двух режимах; первый — это неупорядоченный режим с одной версией, в котором запись из одной транзакции вызывает конфликт с любыми транзакциями, читающими тот же адрес памяти. Второй режим предназначен для спекулятивной многопоточности, обеспечивая упорядоченную многоверсионную транзакционную память. Спекулятивные потоки могут иметь разные версии одного и того же адреса памяти, а аппаратная реализация отслеживает возраст каждого потока. Младшие потоки могут получать доступ к данным из более старых потоков (но не наоборот), а запись по одному и тому же адресу осуществляется в соответствии с порядком потоков. В некоторых случаях зависимости между потоками могут привести к аварийному завершению работы младших версий. [11]

( Intel Расширения транзакционной синхронизации TSX) доступны в некоторых процессорах Skylake . Ранее он был реализован также в процессорах Haswell и Broadwell , но оба раза реализации оказались дефектными, а поддержка TSX была отключена. Спецификация TSX описывает API транзакционной памяти для использования разработчиками программного обеспечения, но не содержит подробностей о технической реализации. [11] Архитектура ARM имеет аналогичное расширение. [12]

Начиная с GCC 4.7 доступна экспериментальная библиотека для транзакционной памяти, использующая гибридную реализацию. Вариант Python PyPy также вводит в язык транзакционную память.

Доступные реализации

[ редактировать ]

См. также

[ редактировать ]
  1. ^ Харрис, Тим; Ларус, Джеймс; Раджвар, Рави (2 июня 2010 г.). «Транзакционная память, 2-е издание». Обобщающие лекции по архитектуре компьютеров . 5 (1): 1–263. дои : 10.2200/S00272ED1V01Y201006CAC011 . ISSN   1935-3235 .
  2. ^ Jump up to: а б с д «Транзакционная память: история и развитие» . Центр Кукуруку . Проверено 16 ноября 2016 г.
  3. ^ Jump up to: а б с Солихин, Ян (2016). Основы параллельной многоядерной архитектуры . Беркли, Калифорния: Чепмен и Холл. стр. 287–292. ISBN  978-1-4822-1118-4 .
  4. ^ Jump up to: а б Херлихи, Морис; Мосс, Дж. Элиот Б. (1993). «Транзакционная память: архитектурная поддержка структур данных без блокировки» (PDF) . Материалы 20-го Международного симпозиума по компьютерной архитектуре (ISCA) . стр. 289–300.
  5. ^ Стоун, Дж. М.; Стоун, HS; Гейдельбергер, П.; Турек, Дж. (1993). «Множественные резервации и новости Оклахомы». Параллельная и распределенная технология IEEE: системы и приложения . 1 (4): 58–71. дои : 10.1109/88.260295 . S2CID   11017196 .
  6. ^ Хаммонд, Л; Вонг, В.; Чен, М.; Карлстром, Б.Д.; Дэвис, доктор юридических наук; Герцберг, Б.; Прабху, МК; Хонго Виджая; Козыракис, К.; Олукотун, К. (2004). «Связность и последовательность транзакционной памяти». Материалы 31-го ежегодного Международного симпозиума по компьютерной архитектуре (ISCA) . стр. 102–13. дои : 10.1109/ISCA.2004.1310767 .
  7. ^ Ананян, CS; Асанович, К.; Кушмаул, Британская Колумбия; Лейзерсон, CE; Ли, С. (2005). «Неограниченная транзакционная память». 11-й Международный симпозиум по архитектуре высокопроизводительных компьютеров . стр. 316–327. дои : 10.1109/HPCA.2005.41 . ISBN  0-7695-2275-0 .
  8. ^ «LogTM: транзакционная память на основе журналов» (PDF) . ВИСК.
  9. ^ «Язык транзакционного программирования ATOMOΣ» (PDF) . Стэнфорд. Архивировано из оригинала (PDF) 21 мая 2008 г. Проверено 15 июня 2009 г.
  10. ^ Одайра, Р.; Кастанос, Дж.Г.; Накаике, Т. (2013). «Различно ли масштабируются программы C и Java в аппаратной транзакционной памяти?». Международный симпозиум IEEE по характеристикам рабочей нагрузки (IISWC) , 2013 г. п. 34. дои : 10.1109/IISWC.2013.6704668 . ISBN  978-1-4799-0555-3 .
  11. ^ Jump up to: а б с д и Дэвид Кантер (21 августа 2012 г.). «Анализ транзакционной памяти Хасуэлла» . Реальные мировые технологии . Проверено 19 ноября 2013 г.
  12. ^ «Arm выпускает SVE2 и TME для архитектуры A-профиля — Блог процессоров — Процессоры — Сообщество Arm» . сообщество.arm.com . 18 апреля 2019 года . Проверено 25 мая 2019 г.
  13. ^ «Внутренние функции расширения транзакционной памяти (TME)» . Проверено 5 мая 2020 г.
  14. ^ «IBM помещает транзакционную память в ЦП» . ЭЭ Таймс.
  15. ^ Брайан Холл; Райан Арнольд; Питер Бергнер; Вайнер душ Сантос Мошетта; Роберт Эненкель; Пэт Хауген; Майкл Р. Мейснер; Алекс Мерикас; Филипп Олер; Берни Шифер; Брайан Ф. Вил; Суреш Уорриер; Дэниел Забава; Адхемерваль Занелла (2014). Методы оптимизации и настройки производительности процессоров IBM, включая IBM POWER8 (PDF) . Красные книги IBM. стр. 37–40. ISBN  978-0-7384-3972-3 .
  16. ^ Вэй Ли, встроенные функции аппаратной транзакционной памяти компилятора IBM XL для IBM AIX в системах на базе процессоров IBM POWER8
  17. ^ «Power ISA версии 3.1» . openpowerfoundation.org. 01.05.2020 . Проверено 10 октября 2020 г.
  18. ^ Java на 1000 ядер - Сказки о совместном проектировании аппаратного и программного обеспечения на YouTube
  19. ^ «Control.Monad.STM» . hackage.haskell.org . Проверено 6 февраля 2020 г.
  20. ^ «Домашняя страница STMX» .
  21. ^ Вонг, Майкл. «Транзакционные языковые конструкции для C++» (PDF) . Проверено 12 января 2011 г.
  22. ^ «Краткое руководство по транзакционной памяти GCC» .
  23. ^ «Параметры диалекта C — использование коллекции компиляторов GNU (GCC)» .
  24. ^ «Транзакционная память — GCC Wiki» .
  25. ^ Риго, Армин. «Использование всех этих ядер: транзакционная память в PyPy» . europython.eu . Проверено 7 апреля 2015 г.
  26. ^ «picotm — портативный интегрированный настраиваемый и открытый менеджер транзакций» .
  27. ^ «Конкурент::TVar» .

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

[ редактировать ]
  • Харрис, Тим; Ларус, Джеймс Р.; Раджвар, Рави (декабрь 2010 г.), Транзакционная память, 2-е издание , Обобщающие лекции по компьютерной архитектуре, том. 5, Morgan & Claypool, стр. 1–263, номер документа : 10.2200/S00272ED1V01Y201006CAC011.
  • Маккенни, Пол Э.; Майкл, Магед М.; Триплетт, Джош; Уолпол, Джонатан (июль 2010 г.). «Почему на другой стороне трава не может быть зеленее: сравнение блокировки и транзакционной памяти». СИГОПС Опер. Сист. Преподобный . 44 (3). Нью-Йорк, штат Нью-Йорк, США: ACM : 93–101. дои : 10.1145/1842733.1842749 . ISSN   0163-5980 . S2CID   1917393 .
  • Дэйв Дайс, Йосси Лев, Марк Мойр, Дэн Нуссбаум и Марек Ольшевски. (2009) «Ранний опыт реализации транзакционной памяти на коммерческом оборудовании». Технический отчет Sun Microsystems (60 стр.) SMLI TR-2009-180. Краткая версия появилась на ASPLOS'09. дои : 10.1145/1508244.1508263
  • Эми Ван, Мэтью Годе, Пэн Ву, Хосе Нельсон Амарал, Мартин Омахт, Кристофер Бартон, Рауль Сильвера и Мэджид Майкл. « Оценка аппаратной поддержки Blue Gene/Q для транзакционной памяти. Архивировано 27 июня 2013 г. на Wayback Machine ». В материалах 21-й международной конференции по параллельным архитектурам и методам компиляции, стр. 127–136. АКМ, 2012.
  • Якоби К., Слегель Т. и Грейнер Д. (декабрь 2012 г.). « Архитектура и реализация транзакционной памяти для IBM System z. Архивировано 4 марта 2016 г. на Wayback Machine ». В микроархитектуре (MICRO), 45-й ежегодный международный симпозиум IEEE/ACM, 2012 г. (стр. 25–36). IEEE.
  • Гарольд В. Кейн, Мэджид М. Майкл, Брэд Фрей, Кэти Мэй, Дерек Уильямс и Хунг Ле. «Надежная архитектурная поддержка транзакционной памяти в силовой архитектуре». В материалах 40-го ежегодного международного симпозиума по компьютерной архитектуре ISCA '13, стр. 225–236, ACM, 2013. дои : 10.1145/2485922.2485942
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 50045d0bddb0bf8d02278c8774776c70__1692328680
URL1:https://arc.ask3.ru/arc/aa/50/70/50045d0bddb0bf8d02278c8774776c70.html
Заголовок, (Title) документа по адресу, URL1:
Transactional memory - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)