Будут ли время выполнения, такие как CLR и JVM, использовать инструкции Haswell TSX?
После прочтения Anandtech на "Haswell TSX" (барьеры для транзакций) Я сразу подумал, сможет ли CLR/JVM использовать эти в С#/Java/ Scala/F # для сильно параллельных приложений (С# Rx/TPL/TFD).
Ответы
Ответ 1
HLE (аппаратное блокирование elision) можно легко интегрировать в любую существующую базу кода, которая использует блокировки. Например, уже существует реализация для pthreads. Также обратите внимание, что JVM уже выполняет оптимизацию оптимизации блокировки, я думаю, что они могут легко переключаться на аппаратное блокирование, когда это возможно.
Но транзакции все сложнее. Вы не можете начать транзакцию и нажать 1Mb обновлений, ваша транзакция будет прервана. Из-за этого аппаратная транзакционная память ограничена, она не такая сложная и модульная, как программная транзакционная память. Это очень низкоуровневая вещь. Кроме того, обратите внимание, что не каждая функция может быть безопасно вызвана транзакциями. Такая функция должна быть свободна от побочных эффектов.
Из-за этого я ожидаю, что TSX будет доступен в CLR в виде встроенных функций компилятора, которые будут использоваться разработчиками фреймворков для создания лучших параллельных коллекций и примитивов синхронизации. Это не похоже на транзакционную память Haskell или Clojure.
Ответ 2
Я ожидаю, что ребята из JVM с высокой производительностью сначала начнут прыгать. например http://www.azulsystems.com/products/zing/virtual-machine
Я вижу, что TSX наиболее употребителен в реализации высокопроизводительных коллекций. Я не вижу причин, по которым мы не можем реализовать набор собственных коллекций кода, используя TSX, и проецируем это на .Net или Java, используя обычные методы invoke.
Ответ 3
Старый вопрос, но я подумал, что добавлю новый ответ хотя бы с одним конкретным указателем
Intel провела эксперименты с использованием своей системы TSX для исключения блокировок в Java, опубликованной здесь. Типичные результаты, однако, составляют лишь 2-3% от стандартных тестов, таких как SpecJVM2008, хотя один контрольный показатель показывает улучшение на 18%. Синтетические тесты показывают гораздо лучшие результаты, но результаты... синтетические.
Ответ 4
Добавление актуального ответа:
Похоже, что использование инструкций Intel-TSX реализовано с Java 8u25. См. https://bugs.openjdk.java.net/browse/JDK-8031320
Ответ 5
Проблема, с которой мы столкнулись, заключалась в том, что в режиме TSX частота удаленных операций ниже, что дает преимущества исключения блокировки. Тем не менее, я считаю, что если какая-либо среда выполнения может извлечь выгоду из TSX - это адаптивные среды выполнения, такие как JVM, которые отслеживают прибыльность на конкретном сайте вызовов и деоптимизируют/перекомпилируют, если это необходимо.