'Haswell TSX' (トランザクション メモリ バリア) に関する Anandtech を読んだ後、CLR/JVM がこれらを C#/Java/Scala/F# で高度な並列アプリケーション (C# Rx/TPL/TFD) で利用できるかどうかすぐに疑問に思いました。
5 に答える
HLE (ハードウェア ロック省略) は、ロックを使用する既存のコードベースに簡単に統合できます。たとえば、pthreads の実装は既に存在します。また、JVM はすでにロック省略の最適化を実行していることに注意してください。可能であれば、ハードウェア ロック省略に簡単に切り替えることができると思います。
しかし、トランザクションの場合はさらに複雑になります。トランザクションを開始して 1Mb の更新をプッシュすることはできません。トランザクションは中止されます。そのため、ハードウェアのトランザクショナル メモリは制限されており、ソフトウェアのトランザクショナル メモリほど構成可能ではなく、モジュール化もできません。とても低レベルな話です。また、すべての関数をトランザクションから安全に呼び出すことができるわけではないことに注意してください。そのような機能には、副作用があってはなりません。
そのため、フレームワーク開発者がより優れた並行コレクションと同期プリミティブを作成するために使用するコンパイラ組み込み関数の形で、TSX が CLR で利用できるようになることを期待しています。Haskell や Clojure のトランザクション メモリとは異なります。
古い質問ですが、少なくとも1つの具体的なポインターを使用して新しい回答を追加すると思いました
Intel は、TSX システムを使用して Java のロックを回避する実験を行っており、ここで公開されています。SpecJVM2008 などの標準的なベンチマークでは、典型的な結果はわずか 2 ~ 3% ですが、1 つのベンチマークでは 18% の改善が見られます。合成ベンチマークははるかに優れた結果を示しますが、結果は... 合成です。
最新の回答を追加する:
Intel-TSX命令の使い方はJava 8u25から実装されているようです。https://bugs.openjdk.java.net/browse/JDK-8031320を参照してください。