Haswellがトランザクションメモリハードウェアサポートを発表

ハスウェルは非常に革新的なトックになります。 昨年、AVXの整数を使用した新しい操作の説明が利用可能になりました。 そして今週、X86アーキテクチャの別の拡張機能が公開されました 。 Haswellは、トランザクションメモリのハードウェアサポートを確認します! 英語サイトでは、議論は本格的です。 ISN Arstechnica LWN Engadget



これは何年もの間、X86アーキテクチャの最も重要な拡張機能だと思います。 この機能はTransactional Synchronization Extensions(TSX)と呼ばれ、ハードウェアロック省略(HLE)と制限付きトランザクションメモリ(RTM)の2つの部分で構成されています。 「制限付き」という言葉に注意してください。 そうです、トランザクションの入れ子の量、粒度、レベルにはいくつかの制限があります。



これらの制限とそれがすべて猫の下でより詳細に機能する方法について。 (写真なし、退屈な技術テキスト)



ソフトウェアトランザクションメモリ (STM)はよく知られた概念です。 一言で言えば、その本質は、他のスレッドとの競合がない場合、または競合の場合に完全にキャンセルされる場合、メモリセクションに対するすべての変更がアトミックにコミットされるトランザクションが定義されることです。 STMには、ロックとの同時実行性よりも2つの重要な利点があります。潜在的に優れたスケーラビリティとプログラミングの容易さ(トランザクションを使用することはロックよりもはるかに単純です。



Intel STMコンパイラやTBoost.STMのようなソフトウェアの実装がたくさんあります。 C ++でトランザクションメモリサポートを追加する提案があります。 私のお気に入りのClojure STMは、一般的に、共有メモリを使用したマルチスレッド作業の唯一の慣用的なメカニズムです。



残念ながら、主にパフォーマンスの問題により、命令型言語のSTMはあまり人気がありません。



プロセッサの製造元は、ハードウェアのトランザクションメモリのサポートを長い間舐めてきました。 これにより、パフォーマンスの問題が潜在的に解決されます。 たとえば、トランザクションメモリのハードウェアサポートを備えたUltraSPARC Rockプロセッサがありましたが、残念ながら、それはうまくいきませんでした。 AzulとIBMには、トランザクションメモリをサポートする作業用ハードウェアもあります。



ハスウェルのすべてはどうですか? 通常、説明はHLEで始まり、次にRTMが続き、次に内部でどのように配置されるかが説明されます。 内部から始めて、RTMに進み、最後にHLEを離れます。それはもっと面白いでしょう。



Haswellでのキャッシュの実装では、キャッシュラインごとに、アクティブトランザクションの読み取りセットと書き込みセットのメンバーシップを決定する魔法が現れます。 トランザクションの開始と完了、ロールバックの理由、および診断の理由を見つけるために必要ないくつかの新しいu-opもあります。



RTMは、プログラマがこれらの新しい命令を使用するだけです。 XBEGIN命令はトランザクションを開始し、中止されたトランザクションのハンドラーを設定し、XENDが完了し、XABORTが中止します。 当然、TSMをサポートしていないX86プロセッサでRTMを使用したプログラムを実行すると、#UDが発生します。



HLEは内部では非常に複雑ですが、それはプログラマーだけのためです。 このようなTZがあることを想像してください。上記のプリミティブの実装を使用して、ロック付きの書き込み済みマルチスレッドソフトウェアのパフォーマンスを改善します(再コンパイルでき、何も変更できません)。 TSXありとなし。



これはどのように行われましたか? ある意味では、HLEは、トランザクションをロックするために使用される変数のrw-lockのバリアントと見なすことができます:)。 XAQUIREおよびXRELEASEプレフィックスが入力されます。 これらは指示ではなく、プレフィックス(LOCK、REPなど)です! TSXをサポートしていないプロセッサでは無視されます。 これらのプレフィックスは、ロックを取得してそれに応じて解放する前に使用することをお勧めします。 ロックが取得されると、変数への書き込みは発生せず、代わりにプロセスの読み取りセットに配置され、トランザクションが開始されます。 この魔法のおかげで(または、ハッキングが必要な場合)、書き込みセットの競合が発生するまで、他のプロセスもロックされたコードを実行できます。 次に、XRELEASEとロックへの書き込み(これも無視されます)により、競合なしで実行された場合、トランザクションがコミットされます。 競合があった場合、通常のセマンティクスに戻ります。



TSXの制限をリストします。

1.粒度が64バイトであるため、誤った共有とともにメモリ内のデータの不正確な配置により、誤ったトランザクションが中止されるようになります。正常に動作する可能性があります。

2.トランザクションが中断するとき、多くの条件があります。 (PAUSE、X87、コンテキスト切り替え、デバッグなどの命令を使用して、割り込みが到着したとき)

3.ネスティング。 ネストのレベルには制限があります。 (申し訳ありませんが、どちらかを言うことはできません)ネストのあらゆるレベルで何らかの理由でトランザクションを中断すると、ネストされたすべてのトランザクションがリセットされます!

トランザクションが中断された場合、理由を確認できます。 しかし、すべて同じように、すべてをデバッグしてプロファイルすることは非常に楽しいでしょう! もちろん、パフォーマンスの分析のために、TSXに関連するイベントを読み取る新しいCPUカウンターが表示されます。



ソフトウェアのサポートは、すでにBinutilsがすでにコミットされているなど、すでに現れ始めています。 HLEはpthreadの次です:)、そして、STM実装でのRTMの使用を望みます。

上で書いたように、詳細はインテルのウェブサイトのドキュメントで入手できます。



All Articles