像CLR和JVM这样的运行时是否能够使用Haswell TSX指令?

时间:2012-12-07 06:21:28

标签: clr intel transactional-memory

在阅读Anandtech on 'Haswell TSX' (tranactional memory barriers)之后,我立即想知道CLR / JVM是否能够在C#/ Java / Scala / F#中使用这些用于高度并行的应用程序(C#Rx / TPL / TFD)。

5 个答案:

答案 0 :(得分:4)

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

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

正因为如此,我希望TSX能够以编译器内在函数的形式在CLR中使用,框架开发人员将使用它来创建更好的并发集合和同步原语。它不会像Haskell或Clojure的事务记忆那样。

答案 1 :(得分:3)

我希望高性能的JVM家伙会先跳过它。例如http://www.azulsystems.com/products/zing/virtual-machine

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

答案 2 :(得分:3)

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

英特尔已经使用他们的TSX系统进行了实验,以便在Java中发布here。虽然标准基准测试(例如SpecJVM2008)的典型结果仅为2-3%,但一个基准确实看到了18%的改进。合成基准测试可以看到更好的结果,但结果是......合成的。

答案 3 :(得分:2)

添加最新答案:

似乎自Java 8u25起就实现了Intel-TSX指令的使用。见https://bugs.openjdk.java.net/browse/JDK-8031320

答案 4 :(得分:1)

我们看到的问题是,在TSX模式下,退出操作的速率较低,因此具有锁定省略的优势。就是说,我有话要说,如果有任何运行时都可以从TSX中受益,那就是像JVM这样的自适应运行时,它可以跟踪特定调用站点的获利能力,并在需要时取消优化/重新编译。