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

X86 像CLR和JVM这样的运行时能够使用Haswell TSX指令吗?,x86,clr,intel,transactional-memory,intel-tsx,X86,Clr,Intel,Transactional Memory,Intel Tsx,读了这篇文章后,我立即想知道CLR/JVM是否能够在C#/Java/Scala/F中为高度并行的应用程序(C#Rx/TPL/TFD)使用这些功能。我希望高性能JVM的人会首先使用它。e、 g 我认为TSX在高性能集合实现中最有用。我看不出为什么我们不能使用TSX实现一组本机代码集合,并使用常规本机调用技术将其投影到.Net或Java中。HLE(硬件锁省略)可以轻松地集成到任何使用锁的现有代码库中。例如,已经存在pthreads的实现。另外,请注意,JVM已经执行了锁省略优化,我认为他们可以在可能

读了这篇文章后,我立即想知道CLR/JVM是否能够在C#/Java/Scala/F中为高度并行的应用程序(C#Rx/TPL/TFD)使用这些功能。

我希望高性能JVM的人会首先使用它。e、 g

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

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

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


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

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


英特尔已经用他们的TSX系统进行了实验,以消除Java中的锁。然而,在SpecJVM2008等标准基准上,典型的结果只有2-3%,尽管有一个基准确实看到了18%的改进。综合基准测试的结果要好得多,但结果是。。。合成的

添加最新答案:


英特尔TSX指令的使用似乎是从Java 8u25开始实施的。请参见

我们看到的问题是,在TSX模式下,失效操作的比率较低,因此具有锁省略的优势。也就是说,我认为如果任何运行时都能从TSX中受益——像JVM这样的自适应运行时可以跟踪特定呼叫站点的盈利能力,并在需要时进行去优化/重新编译。

在投票关闭之前,这种处理器更改可能会对服务器端编程产生重大影响。具体来说,这些运行时是否可以将这些指令用于现有的结构,或者是否必须为程序员引入新的结构(STM)以利用新的硬件。Joe Duffy的最新博文帮助澄清了多线程的下一代将是什么样子(至少对于C#/.NET而言)。也许他们最终会解决这个问题,但现在他们建议不要使用这个功能,因为它已经坏了:在规范更新pdf的第12页。因此,我想在CLR或JVM中加入此功能将不再需要更多的努力,直到它最终被修复。次要更新:TSX在Skylake中发现错误,并被微码更新禁用(就像Haswell和早期Broadwell一样)。考虑到大多数CPU型号都不应该支持它,而且大多数应该支持它的型号都因为bug而禁用了它,我甚至不确定它是否值得这么麻烦。Azul已经将其集成到Azul JVM中。下面是一个介绍,讨论他们是如何做到这一点的