HTというのはコア内の各種演算ユニット(特定ユニットが使用中その他がアイドル状態にある関係でHTしないと平均7割方アイドル期間らしい)を同一コア上の2つのスレッドに奪い合わせることによってアイドル期間を削減してして30%ばかり性能向上を図るための技術らしい。
コンピュータ将棋プログラムが一般にどうなのかは知らないが、漏れのプログラムではDDRメモリに展開された巨大な置換表をHT1,2から共通に利用したい。このようなアクセス条件でHTが理想的に機能するにはキャッシュデータのプリフェッチがHT1とHT2とで別々に並行動作してほしいところだが、いくらネットで調べてもこの仮説を肯定する根拠が見つからない。
ひょっとしたらば、片方におけるプリフェッチ命令実行からフェッチデータの参照に至るまでの間、他方に高い率で待ちが入る、とかだったらどうしよう(怖
少なくとも、L1/L2の構成からして、HT1とHT2が異なるキャッシュラインを同時Refillすることは無理そう。
また反対に、HT1とHT2とで同じキャッシュラインについてプリフェッチとアクセスが競合したときも多分問題。プリフェッチ命令の機能から推測するに、プリフェッチ命令実行からフェッチデータ参照までの間、当該キャッシュラインはロックされるとかするはず*1。するとそのキャッシュラインにアクセスしようとする側は、ロックが解けるまで待たされる。
まあαβ探索 v.s. df-pn探索等、異なる探索同士で置換表を共有する分にはハッシュキーをずらせるので後者はあまり関係ないが、同一探索をHTで並列実行中にエントリアクセスの競合が頻発し始めて以降1スレッド性能のまま一生抜け出せないとかになると困る。ただし、今作ってるプログラムは局面評価ロジックがちとアレなブツであるため片方がシングルノード状態で突っ走ってる期間が相応にあるはずで、その間他方は存分に動けるかもしれない
、、何か書いてるうちに話がHTともプリフェッチとも関係ない気がしてきたorz
あと、どうやったらプリフェッチ命令非生成にできるのかわからない(何
それはそうと、先日来のCore i7がどれぐらい執拗にコア間のキャッシュコヒーレンシを保とうとするのかどうなのかという問題の件はどうやら予想的中っぽい
いや知らんけど、
あとはライトスルー制御して書き込みによるキャッシュ汚染を最小にとどめればいいっぽいが
これはリング3とかでも可能なんだろうか