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