Я нашел на странице Intel
https://ark.intel.com/products/97123/Intel-Core-i5-7500-Processor-6M-Cache-up-to-3_80-GHz
что этот процессор поддерживает технологию TSX-NI, но я не могу найти информацию об этом в Google. Это так же, как Intel TSX. Если это разница, то как я могу это использовать.
Извините за мой плохой английский! 🙂
Кажется, это просто маркетинговое украшение.
Я не нашел ссылок на «TSX-NI» ни в Интернете, ни в руководствах Intel, ни в руководстве по расширениям Intel ISA.
Цитата Intel [1]
Расширения Intel Transactional Synchronization (Intel TSX) выпускаются в двух вариантах: HLE и RTM.
Благодаря их реализации эти два аспекта отделены (любой из них может поддерживаться отдельно от другого), и только RTM вводит новые инструкции.
Так что они, вероятно, имеют в виду RTM.
Я считаю, что HLE был представлен первым, и должны быть процессоры, которые поддерживают HLE, но не RTM (обратное, хотя и возможно, кажется неправдоподобным).
Так что, может быть, это просто маркетинговый способ сказать: «Этот процессор поддерживает наши новейшие функции TSX!».
Для справки я написал краткое введение в две части Intel TSX в предположении, что «TSX-NI» относится к «TSX RTM».
Полная ссылка может быть найдена на Руководство Intel 1 — Глава 15.
Часть HLE (Hardware Lock Elision) обратно совместима.
Мы все еще можем проверить его доступность с CPUID.07H.EBX.HLE [бит 4] но это реализуется путем изменения семантики префиксов repne
/repe
для инструкций.
Эта функция состоит из двух «новых» префиксов: xacquire
а также xrelease
,
Процессор теперь способен входить в транзакционное состояние, когда каждое чтение добавляется к чтения набор транзакции и каждая запись добавляется в написать набор транзакции и не осуществляется в память.
Гранулярность — это размер строки кэша.
Если поток выполняет чтение из набора для чтения или пишет либо в набор для чтения, либо в набор для записи другого потока, то транзакция прерывается.
Процессор восстанавливает архитектурное состояние, как оно было в начале транзакции, и повторно выполняет инструкции без транзакций.
Если транзакция завершена успешно, вся записанная память фиксируется атомарно.
Транзакции ограничиваются xacquire
а также xrelease
,
Они могут быть вложенными, но есть ограничение на глубину (выше которой транзакция отменяется) и на количество различных блокировок, которые могут быть исключены (превышено из-за того, что ЦП не исключит новые блокировки, но не прервет транзакцию).
Когда вложенная транзакция прерывается, ЦП перезапускает выполнение самый дальний сделка.
xacquire
(опкод F2
, такой же как repne
) используется перед инструкцией, которая получит блокировку (т.е. запись в блокировку) и отмечает начало транзакции.
Это чтение не добавлен в набор записи (или не может произойти параллелизма, поскольку каждый поток записывает в блокировку и это немедленно прервет любую последующую транзакцию).
Вместо этого он добавляется в набор для чтения.
xrelease
(опкод F3
) используется перед инструкцией, которая снимет блокировку и помечает окончание транзакции.
xrelease
должен использоваться на том же замке, который используется с xacquire
соединиться с ним и завершить транзакцию.
xacquire
может использоваться только с lock
д версия этих инструкций: ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCHG8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, XCHG
,
xrelease
с теми же инструкциями плюс MOV mem, reg
а также MOV mem, imm
без lock
префикс.
Новая инструкция xtest
доступно, если присутствует HLE (или RTM), устанавливает ZF это процессор не внутри транзакции.
RTM (ограниченная транзакционная память) не имеет обратной совместимости.
Это можно проверить с CPUID.07H.EBX.RTM [бит 11].
Он вводит три новые инструкции: xbegin
, xend
а также xabort
,
Они представляют собой просто новый интерфейс к уже указанной и общей возможности выполнения транзакций.
xbegin
должен предоставить в качестве относительного смещения указатель на запасной путь кода.
Этот код выполняется всякий раз, когда транзакция не может быть зафиксирована.
В таких случаях eax
держит причину прерывания.
xend
завершает транзакцию и дает команду процессору зафиксировать ее.
xabort
позволяет программисту явно прервать транзакцию с помощью специального кода ошибки.
Intel не дает никаких гарантий относительно способности процессора успешно совершать транзакции.
В то время как HLE имеет ряд очень специфических условий, RTM — это функция «наилучшего усилия» — таким образом, требуется резервный код.
RTM более низкоуровневый, чем HLE, он позволяет программисту использовать транзакционную память с использованием или без использования блокировок.
Цитируя Intel:
Поведение, когда HLE и RTM вложены вместе — HLE
внутри RTM или RTM внутри HLE — зависит от реализации. Однако во всех случаях
реализация будет поддерживать семантику HLE и RTM. Реализация может
выберите игнорирование подсказок HLE при использовании внутри областей RTM и может вызвать прерывание транзакции при использовании инструкций RTM внутри областей HLE. В последнем случае,
переход от транзакционного к нетранзакционному выполнению происходит плавно
поскольку процессор будет повторно выполнять область HLE без фактического выполнения, и
затем выполните инструкции RTM.
TSX-NI является расширением (RTM) предыдущего набора команд (HLE).
Со страницы Intel
Аппаратный замок Elision (HLE)
HLE — это устаревшее совместимое расширение набора команд (содержащее
Префиксы XACQUIRE и XRELEASE) для указания транзакционных регионов. HLE
для программистов, которые предпочитают обратную совместимость
традиционная модель программирования взаимного исключения и хотел бы запустить
HLE-совместимое программное обеспечение на устаревшем оборудовании, но хотелось бы взять
Преимущество новых возможностей блокировки доступа на оборудовании с HLE
служба поддержки.Ограниченная транзакционная память (RTM)
RTM — это новый интерфейс набора команд (включающий в себя XBEGIN, XEND,
и инструкции XABORT) для программистов, чтобы определить транзакционный
регионы более гибким способом, чем это возможно с HLE.RTM для программистов, которые предпочитают гибкий интерфейс
аппаратное обеспечение для транзакционного исполнения.
Итак, новый набор состоит из:
XACQUIRE Prefix hint to the beginning of an HLE transaction region
XRELEASE Prefix hint to the end of an HLE transaction region
XBEGIN Transaction begin of an RTM transaction region
XEND Transaction end of an RTM transaction region
XABORT Abort an RTM transaction execution
XTEST Test if executing in a transactional region