前編はコチラ

Haswellのハードウェアトランザクションメモリ

HaswellがHTMをサポートすることは、2012年の2月に発表されているのであるが、それがどのようなハードウェア構造で実現されているかについては、ほとんど情報が公開されなかった。ということで、9月のIDF 2012での発表に期待したのであるが、残念ながら、IDFでもあまり詳しいことは発表されなかった。しかし、まったく収穫が無かったわけではなく、HaswellのHTMの構造のヒントとなる次の3枚のスライドが公表された。

Write Setは1次キャッシュに保持されることが明らかになった(出典:IDF 2012におけるIntelの発表資料)

Read SetやWrite SetのアドレスへのアクセスはL1キャッシュがチェックする(出典:IDF 2012におけるIntelの発表資料)

コミット時のWrite Setの書き込みは瞬間に実行され、他のスレッド/コア/ソケットとの協調は必要ない(出典:IDF 2012におけるIntelの発表資料)

第1のスライドではWrite SetのデータはL1キャッシュに保持することが明らかになった。そして、第2のスライドでは、L1キャッシュがRead SetやWrite Setへの他のプロセサからのアクセスをチェックすることが明らかとなった。キャッシュライン単位でアドレスをチェックするため、Read SetやWrite Setには本当は含まれないが、同じキャッシュラインに入っているアドレスへの他のプロセサからのアクセスも干渉と見なされてしまう。しかし、これはキャッシュコヒーレンシ―メカニズムを利用してTSX機能を実現する以上、やむを得ない制約である。

L1キャッシュを使って干渉をチェックしているので、Read SetやWrite Setのキャッシュラインが何らかの理由でL1キャッシュから追い出されてしまうと、他のプロセサからのアクセスを検出できなくなってしまうので、トランザクションはアボートされる。しかし、2枚目のスライドでは、Read SetはL1キャッシュから追い出されても他のプロセサのWriteアクセスを検出可能と書かれている。

HTMを実現する上で一番難しいのが、Write Setの一括メモリ書き込みである。16~32エントリ程度のストアバッファにWrite Setを格納するやり方の場合は、他のプロセサからのメモリアクセス要求を拒否した状態で、連続的にストアバッファの内容をメモリに書き込んでも、他のプロセサのメモリアクセスが止まってしまう時間はわずかで大きな問題にはならない。しかし、トランザクションの中でのメモリへの書き込みがストアバッファの大きさで制限され、ストアデータの多いトランザクションには対応できないという欠点がある。

一方、Write Setをキャッシュに持つやり方は大きなトランザクションを扱えるが、メモリを占有して書き戻すと、他のプロセサのメモリアクセスが止まる時間が長く、性能的に悪影響がある。しかし、Haswellの3枚目のスライドでは、他のプロセサコアとの協調は必要ないと書かれており、どうすれば、この記述に沿った処理が実現できるかを考えてみた。

(後編に続く)

■Intel 次世代プロセッサ「Haswell」関連記事
【レポート】Intelの次世代Core「Haswell」のトランザクションメモリを読み解く(前編) (2012年10月9日)
【レポート】HPC性能が大幅に強化されたHaswell(前編) -各コアに256bit長のFMAを2個装備 (2012年10月3日)
【レポート】HPC性能が大幅に強化されたHaswell(中編) - TLBミスによる性能低下を減少 (2012年10月4日)
【レポート】HPC性能が大幅に強化されたHaswell(後編) - HPCとして通用する性能を実現 (2012年10月5日)
【レポート】IDF 2012 - 次期Intel Core「Haswell」の内部構造を探る - Uncore(GPU/Media Block)編 (2012年9月25日)
【レポート】IDF 2012 - 次期Intel Core「Haswell」の内部構造を探る - マイクロアーキテクチャ編 (2012年9月18日)
【レポート】IDF 2012 - 次期Intel Core「Haswell」の内部構造を探る - 拡張命令(AVX2/TSX)編 (2012年9月18日)
【レポート】トランザクションメモリのサポートが明らかとなったIntelのHaswell (2012年2月16日)