Аппаратная транзакционная память. Обзор решений. Часть 2. Несостоявшиеся проекты

Заявленные, но не представленные миру реализации
Начнём с грустного — с проектов, не получивших реализации «в железе».

Sun Rock
До момента покупки компанией Oracle компании Sun последняя разрабатывала процессор Rock, одной из особенностей которого должна была стать поддержка HTM, объявленная в 2007 году. Предварительные результаты были опубликованы [10], однако, после объединения двух фирм проект был закрыт (http://www.crn.com/news/components-peripherals/217900237/sun-abandons-rock-processor-project-report.htm ). 


Рассмотрим особенности HTM, предлагавшиеся в Rock [13], видимые на уровне ISA.

  • Т.н. best-effort поддержка транзакций. Другими словами, аппаратура не гарантирует, что определённая транзакция успешно завершится за конечное число попыток. По этой причине обязанностью программиста является предоставление резервного fallback-пути для каждой транзакции, не использующего HTM а, например, задействующего замки. Такой подход заметно упрощает аппаратуру, но заметно усложняет жизнь программиста, вынужденного писать две ветки в программе вместо одной.
  • Набор SPARC* ISA расширен двумя инструкциями chkpt и commit, соответствующими входу и выходу из транзакции. При отмене состояние процессора восстанавливается к моменту исполнения chkpt, а управление передаётся на адрес fallback-процедуры, указанный как операнд chkpt.
  • Довольно длинный список событий, вызывающих откат транзакций, в том числе неправильное предсказание перехода, переключение между потоками одного ядра. Среди запрещённых инструкций находились и необходимые для вызова функций. Другими словами, при использовании в коде транзакций функций для них пришлось бы всегда делать inline.
  • В архитектурное состояние процессора был добавлен регистр csp — checkpoint status register, для возможности определения причин отмены транзакции.
  • Изнутри активной транзакции имелась возможность совершать чтения и записи памяти в обход кэшей, с помощью специальных видов load и store. 

AMD ASF
Компания AMD в 2009 году представила свой вариант HTM — Advanced Synchronization Facility (ASF, http://developer.amd.com/community/blog/just-released-advanced-synchronization-facility-asf-specification/ ) — являющийся расширением для архитектуры AMD64. Мне удалось найти несколько публикаций про внутренний дизайн (следует отметить, менявшийся со временем) и результаты симуляций [4,1], однако на настоящий момент не было сделано анонсов продукции с поддержкой данной технологии. 

Особенности ASF.

  • Новые инструкции: SPECULATE, COMMIT, ABORT для старта, завершения и явной отмены транзакции, и RELEASE — оптимизирующий hint для ASF, разрешающий больше не проверять конфликты для определённого региона. 
  • Внутри транзакции новый смысл придаётся инструкциям LOCK MOV — она используется для чтения и записи в память. Обычные доступы в память происходят в обход системы HTM, допустимы в транзакциях и могут быть использованы для уменьшения нагрузки на аппаратуру, управляющую точками сохранения.
  • Для сообщения причины отмены транзакции код причины сохраняется в регистре RAX.
  • На транзакцию не влияют такие события, как неправильное предсказание перехода, промах TLB и ближние вызовы функций.
  • Предоставление гарантированного успешного завершения транзакции, если она в процессе своей работы использует не более четырёх линий кэш-памяти. Т.е. достаточно малые спекулятивные регионы могут использоваться без необходимости написания fallback-ветви.
Per informazioni più dettagliate sulle ottimizzazioni basate su compilatore, vedere il nostro Avviso sull'ottimizzazione.