16

在阅读Anandtech 关于“Haswell TSX”(事务性内存屏障)后,我立即想知道 CLR/JVM 是否能够在 C#/Java/Scala/F# 中将这些用于高度并行的应用程序(C# Rx/TPL/TFD)。

4

5 回答 5

5

老问题,但我想我会用至少一个具体的指针添加一个新的答案

英特尔已经使用他们的 TSX 系统进行了实验来消除 Java 中的锁,发布在这里。尽管标准基准(例如 SpecJVM2008)的典型结果只有 2-3%,但一项基准确实看到了 18% 的改进。综合基准​​测试的结果要好得多,但结果是……综合的。

于 2014-06-17T21:02:20.807 回答
5

HLE(硬件锁省略)可以很容易地集成到任何使用锁的现有代码库中。例如,已经存在 pthreads 的实现。另外,请注意 JVM 已经执行了锁省略优化,我认为他们可以在可能的情况下轻松切换到硬件锁省略。

但是交易变得更加复杂。您无法启动事务并推送 1Mb 的更新,您的事务将被中止。正因为如此,硬件事务内存是有限的,它不像软件事务内存那样可组合和模块化。这是一个非常低级的东西。另外,请注意,并非每个函数都可以从事务中安全地调用。这种功能必须没有副作用。

因此,我预计 TSX 将以编译器内在函数的形式在 CLR 中可用,框架开发人员将使用它来创建更好的并发集合和同步原语。它不会像 Haskell 或 Clojure 的事务内存。

于 2013-01-14T14:24:55.527 回答
3

我希望高性能 JVM 人员会首先使用它。例如http://www.azulsystems.com/products/zing/virtual-machine

我看到 TSX 在高性能集合实现中最有用。我看不出为什么我们不能使用 TSX 实现一组本机代码集合,并使用常规本机调用技术将其投影到 .Net 或 Java。

于 2012-12-27T13:04:29.317 回答
3

添加最新答案:

似乎从 Java 8u25 开始使用 Intel-TSX 指令。见https://bugs.openjdk.java.net/browse/JDK-8031320

于 2015-05-05T22:54:53.780 回答
1

我们看到的问题是,在 TSX 模式下,退休操作的比率较低,从而呈现了锁省略的优势。那就是说,如果任何运行时都可以从 TSX 中受益 - 它是像 JVM 这样的自适应运行时,可以跟踪特定调用站点的盈利能力,并在需要时进行反优化/重新编译。

于 2019-06-14T14:04:41.853 回答