問題タブ [intel-tsx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
x86 - CLR や JVM などのランタイムは、Haswell TSX 命令を使用できますか?
'Haswell TSX' (トランザクション メモリ バリア) に関する Anandtech を読んだ後、CLR/JVM がこれらを C#/Java/Scala/F# で高度な並列アプリケーション (C# Rx/TPL/TFD) で利用できるかどうかすぐに疑問に思いました。
assembly - Intel TSX 命令のエミュレート
チップが利用可能になる前に、新しい Intel TSX 命令を試してみたいと思います。インテルはエミュレーターを利用できるようにしていますか、それとも広く使用されている他の手法はありますか?
x86 - ハードウェア ロックの省略を無効にする
ハードウェア トランザクション メモリ [TSX] の利益を小さなアプリケーションで可視化しようとしています。コンパイラは自動的にミューテックスに Hardware Lock Elision [HLE] を使用しますが、これはその時点で私が望んでいるものではありません。icc を使用して、Haswell プロセッサで自動ハードウェア ロックの省略を無効にする方法はありますか?
Google と Intel のドキュメントは、これまでのところ役に立ちませんでした。
c++ - Intel TSX ハードウェア トランザクション メモリ 非トランザクション スレッドは何を認識しますか?
2 つのスレッドがあり、1 つが TSX トランザクションを作成し、データ構造を変更するとします。もう一方のスレッドは、いかなる種類の同期も行わず、同じデータ構造を読み取ります。トランザクションはアトミックですか?トランザクションによって変更されたキャッシュラインを読み取ろうとすると、ブロックまたは再起動する方法がないため、実際にはそれが真実であるとは想像できません。
トランザクションがアトミックでない場合でも、x86 の書き込み順序規則は尊重されますか? 書き込み #2 を認識した場合、前の書き込み #1 を認識できなければならないことが保証されます。これは、トランザクションの一部として発生する書き込みにも当てはまりますか?
これらの質問に対する答えはどこにも見つかりませんでした.SOの誰もが知っているとは思えませんが、少なくとも誰かがこれが答えを出すのにGoogleフレンドリーな場所であることを知ったとき.
compiler-construction - 現在、Haswell トランザクショナル メモリをサポートしているコンパイラはどれですか?
どのコンパイラ (2014 年 5 月現在) がトランザクショナル メモリ機能を使用するコードを生成できますか?
x86 - Haswell トランザクション メモリの読み取りセットと書き込みセットの情報
最近、Intel はトランザクション同期拡張機能 (TSX) と呼ばれるハードウェア トランザクション メモリをサポートする haswell マシンをリリースしました。
Intel のマニュアルによると、投機的なメモリ操作である書き込みセットと読み取りセットは、L1 キャッシュと L2 キャッシュにそれぞれバッファリングされます。(ではない正確に)
次に、トランザクショナル メモリ操作を追跡して、アドレスや読み取り/書き込みセットの値などの情報を取得できますか?
c++ - haswell tsx を使用した不思議な rtm の中止
私は haswell の tsx 拡張機能を試しています。既存の中規模 (数千行) のコードベースを、粗粒度のロックの代わりに GCC トランザクション メモリ拡張機能 (このマシンでは間接的に haswell tsx を使用しています) を使用するように適応させています。私は GCC の transactional_memory 拡張機能を使用しており、独自の _xbegin / _xend を直接記述していません。ITM_DEFAULT_METHOD=htm を使用しています
不可解な理由でハードウェア トランザクションが異常終了する率が高いため、十分な速度で動作させるのに問題があります。以下に示すように、これらの中止は競合や容量制限によるものではありません。
以下は、失敗率と根本的な原因を定量化するために使用した perf コマンドです。
したがって、プログラムはトランザクションを含むコードを 3000 万回実行します。各リクエストには、1 つのトランザクション gcc__transaction_atomic
ブロックが含まれます。この実行には 1 つのスレッドしかありません。
この特定のコマンドは、 Intel ソフトウェア開発者マニュアル vol 3perf
に記載されている関連する tsx パフォーマンス イベントのほとんどをキャプチャします。
からの出力perf stat
は次のとおりです。
出力からわかるように:
rtm_retired_start
カウントは 3000 万 (プログラムへの入力と一致)- カウントはほぼ同じです(
rtm_retired_abort
コミットはまったくありません) abort_conflict
とのabort_capacity
カウントは 0 であるため、これらは理由ではありません。また、実行中のスレッドは 1 つだけであることを思い出してください。競合はめったに発生しないはずです。- ここでの唯一の実際のリードは と の高い値で
tx_exec_misc1
ありrtm_retired_aborted_misc3
、説明が多少似ています。
Intel のマニュアル (第 3 巻) では、rtm_retired_aborted_misc3
カウンターを次のように定義しています。
コード:C9H 20H
ニーモニック: RTM_RETIRED.ABORTED_MISC3
説明: HLE に適していない命令が原因で RTM 実行が中止された回数。
の定義にtx_exec_misc1
は、似たような言葉がいくつかあります。
コード: 5DH 01H
ニーモニック: TX_EXEC.MISC1
説明: トランザクションのアボートを引き起こす可能性のあるクラスの命令が実行された回数をカウントします。これは実行回数であるため、必ずしもトランザクションのアボートが発生するとは限りません。
の高精度 (PEBS) サポートを使用したパフォーマンス レコード/パフォーマンス レポートを使用して、アボートのアセンブリの場所を確認しましたrtm_retired_aborted
。場所には、mov
レジスタからレジスタへの命令があります。変な命令名は近くにありません。
アップデート:
それ以来、私が試した2つのことは次のとおりです。
1) ここで見られる tx_exec_misc1 および rtm_retired_aborted_misc3 署名は、たとえば、次の形式のダミー ブロックによって取得できます。
またはいずれかの形式
どちらの場合も、パフォーマンス カウンターは私が見たものと似ています。ただし、どちらの場合も、perf report
for-e cpu/tx-abort/
は直観的に正しいアセンブリ ラインを指しています。xabort
最初の例の命令とsyscall
2 番目の例の命令です。実際のコードベースでは、perf レポートは、関数の開始時にスタック プッシュが行われたことを示しています。
Intel ソフトウェア開発エミュレーターでも同じコマンドを実行しました。その場合、問題はなくなることがわかりました。アプリケーションに関する限り、アボートは発生しません。
delphi - Intel TSX と Delphi
Intel TSX
Delphi で同期拡張機能を使用したいと考えています。しかし、AFAIK Delphi は過去の拡張アセンブリをサポートしていないSSE 4.2
ので、別の方法で実行できますか? また、そのような機能を検出するにはどうすればよいでしょうか。
この機能は、2012 年以降、Haswell プロセッサでサポートされています。
cloud - インテル TSX を試す
Intel のトランザクショナル メモリ機能を試してみたいと思っていますが、そのために新しいサーバーを購入する必要はありません。TSX をサポートする CPU を備えたクラウド サービスはありますか?