Будут ли время выполнения, такие как 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, которые отслеживают прибыльность на конкретном сайте вызовов и деоптимизируют/перекомпилируют, если это необходимо.