CPU Complex Die
https://gyazo.com/ddbe9770e4ae831369a56b0920e7f840
Zen 2世代ではChipletアーキテクチャを採用した結果、CPUダイ(CCD)とI/Oダイ(cIoD)が別々になった。...CPUダイが2つのRyzen 9 3900Xの場合はこんな感じ(Photo19)である ZEN2は3rd gen(ややこしい)
したがってCCDを跨ぐ通信は、猛烈に遅くなる。Threadripperと同じ仕組みだ。
どうやら同じCCD(同一ダイ)上のCCX間の通信も、直接ダイ内で完結するのではなく、GMIによってIOD(I/O Die)のData Fabric経由で通信を実施しているようである。 Global Memory Interconnect... ダイ間インターコネクト
CPUをクラスター化し、CCDの数も可変にしようとすると、性能へのインパクトは無視できないがこうするのが最もシンプルになる、ということなのだろう。
結果として、異なるCCXを跨ぐ処理やメモリーアクセス等が頻発すると必然的にIODとの通信が発生し速度は低下する。これを避けるために、Windows 10ではMay 2019 UpdateからTopology Awarenessと呼ばれる機能が搭載され、あるスレッドから別のスレッドを生成する場合、極力同じOCX(引用者注:CCXの誤記?)で動かすようにスレッドを生成するように調整する機能である。 1つはTopology Awareness。たとえばあるコアで新規スレッドを作成したときに、その新規スレッドが別のCCDで動いたりすると、猛烈な量のアクセスが2つのCCDの間で発生してしまう。
これを防ぐため、同一プロセスに属するすべてのスレッドは、同じCOD(同じCCX)で動かすようにするという配慮がされる。これはハードウェア側の問題ではなく、OSのスケジューラーの問題である。 必要な場合は通信が生じることを承知した上で、各CPUコアに処理を分散させることもできる。