Двойное сравнение и замена - Double compare-and-swap

Двойное сравнение и замена (DCAS или CAS2) является атомарный примитив предложил поддержать определенные параллельное программирование техники. DCAS берет две необязательно смежные ячейки памяти и записывает в них новые значения только в том случае, если они соответствуют предварительно заданным «ожидаемым» значениям; как таковой, это продолжение гораздо более популярного сравнивать и менять местами (CAS) операция.

DCAS иногда путают с функцией сравнения и замены двойной ширины (DWCAS) реализуется с помощью таких инструкций, как x86 CMPXCHG16B. DCAS, как обсуждается здесь, обрабатывает две несмежные ячейки памяти, обычно размером с указатель, тогда как DWCAS обрабатывает две соседние ячейки памяти размером с указатель.

В своей докторской диссертации Майкл Гринвальд рекомендовал добавить DCAS к современному оборудованию, показывая, что его можно использовать для создания простых в применении, но эффективных программная транзакционная память (СТМ). Гринвальд отмечает, что преимущество DCAS по сравнению с CAS заключается в том, что CAS более высокого порядка (с несколькими элементами)п может быть реализовано за O (п) с DCAS, но требует O (п бревно п) время с унарным CAS, где п количество конкурирующих процессов.[1]

Одним из преимуществ DCAS является возможность реализации атомарной дек (т.е. двусвязные списки ) с относительной легкостью.[2]Однако совсем недавно было показано, что STM может быть реализован с сопоставимыми свойствами.[требуется разъяснение ] используя только CAS.[3] Однако в целом DCAS не Серебряная пуля: реализация алгоритмы без блокировки и ожидания его использование обычно так же сложно и подвержено ошибкам, как и CAS.[4]

Motorola однажды включила DCAS в набор инструкций для своего 68 тыс. серии;[5] однако медленность DCAS по сравнению с другими примитивами (по-видимому, из-за проблем с обработкой кеша) привела к тому, что на практике ее избегали.[6] По состоянию на 2015 год, DCAS изначально не поддерживается какими-либо широко распространенными процессорами в производстве.

Обобщение DCAS на более чем два адреса иногда называют MCAS (многословный CAS); MCAS может быть реализован с помощью вложенного LL / SC, но такой примитив недоступен напрямую аппаратно.[3] MCAS может быть реализован программно в терминах DCAS различными способами.[7] В 2013 году Тревор Браун, Вера Эллен, и Эрик Рупперт реализовали в программном обеспечении многоадресное расширение LL / SC (которое они называют LLX / SCX), которое, будучи более ограничительным, чем MCAS[8] позволили им с помощью некоторой автоматической генерации кода реализовать один из наиболее эффективных параллельных двоичное дерево поиска (на самом деле хроматическое дерево ), слегка обойдя JDK На базе CAS пропустить список реализация.[9]

В общем, DCAS может быть обеспечен более выразительным оборудованием. транзакционная память.[10] IBM МОЩНОСТЬ8 и Intel Intel TSX предоставить рабочие реализации транзакционной памяти. солнце отменен Рок-процессор тоже поддержал бы его.

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

  1. ^ М. Гринвальд. «Неблокирующая синхронизация и системное проектирование». Технический отчет Стэнфордского университета STAN-CS-TR-99-1624 [1]. (в частности, стр.10)
  2. ^ Оле Агесен, Дэвид Л. Детлефс, Кристин Х. Флуд, Александр Т. Гартвейт, Пол А. Мартин, Марк Мойр, Нир Н. Шавит и Гай Л. Стил мл. «Параллельные декы на основе DCAS». Теория вычислительных систем 35, вып. 3 (2002): 349-386.
  3. ^ а б Кейр Фрейзер (2004), "Практическая свобода от замков" UCAM-CL-TR-579.pdf
  4. ^ Саймон Догерти и др., «DCAS - не серебряная пуля для разработки неблокирующего алгоритма». 16-й ежегодный симпозиум ACM по параллелизму в алгоритмах и архитектурах, 2004 г., стр. 216–224. [2].
  5. ^ CAS2
  6. ^ Гринвальд, Майкл и Дэвид Черитон. «Синергия между неблокирующей синхронизацией и структурой операционной системы». OSDI '96 Труды второго симпозиума USENIX по разработке и внедрению операционных систем (1996): 123-136. (в частности, раздел 7.1 «Экспериментальная реализация»)
  7. ^ Харрис, Тимоти Л .; Фрейзер, Кейр; Пратт, Ян А. (2002). Практическая операция сравнения и замены нескольких слов. Proc. Int'l Symp. Распределенных вычислений. CiteSeerX  10.1.1.13.7938.
  8. ^ Тревор Браун, Фейт Эллен и Эрик Рупперт. «Прагматические примитивы для неблокирующих структур данных». В материалах симпозиума ACM 2013 г. по принципам распределенных вычислений, стр. 13–22. ACM, 2013.
  9. ^ Тревор Браун, Фейт Эллен и Эрик Рупперт. «Общая техника для неблокирующих деревьев». В материалах 19-го симпозиума ACM SIGPLAN по принципам и практике параллельного программирования, стр. 329-342. ACM, 2014.
  10. ^ Дэйв Дайс, Йоси Лев, Марк Мойр, Дэн Нуссбаум и Марек Ольшевски. (2009) «Ранний опыт реализации коммерческой аппаратной транзакционной памяти». Технический отчет Sun Microsystems (60 стр.) SMLI TR-2009-180. Короткая версия появилась на ASPLOS’09. Дои:10.1145/1508244.1508263. В полном объеме отчета обсуждается, как реализовать DCAS с использованием HTM, в разделе 5.

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