概要

AMD Ryzenの一部プロセッサーにおけるCCX跨ぎと呼ばれる減少によって引き起こされる性能低下とその対策。 VRChatに限った話ではありません。

CCX跨ぎとは

Zen世代以降のプロセッサーは、今までのBulldozer世代までやIntelのCore iシリーズ(少なくともNehalem世代からAlderLake世代まで)とは違い、大きな一つのCPUダイで完結するような設計ではなく、小さな複数のCPUダイを並列に並べ、コア数をスケーリングすることができる設計がされています。(コントローラーなどは除く) Zen, Zen+, Zen2までは1ダイ(CCD)あたり4コアまで、Zen3からは1CCDあたり8コアまでは一つのコアで完結できますが、それ以上のコア数は2つ以上のCCDを組み合わせて実現されています。 例としてはRyzen 7 1800XではZen世代ですが8Core 16Threadを実現しており、2つのCCDを使用しています。

原則としてAMDもIntelもダイ内で完結するようなコア間通信は高速ですが、ダイを跨ぐ通信はコア間のそれに比べ遅くなってしまいます。 それはRyzenでも例外ではありません。

ただし、これはマルチスレッドで動くソフトウェアで発生する事象であり、シングルスレッドで動くようなプログラムでは原理上発生しえません。 VRChatはマルチスレッドで動くプログラムなのでこの減少が発生する可能性があります。(運悪く一つのCCDで完結しないようなコアの割当がされた場合は)

ということで原則、Zen ~ Zen2では4コア、Zen3以降では8コアより多いコア数を持つプロセッサーではこの減少が発生する可能性があります。

対策

該当コアを使用しないように割り振る。

のようなツールを使う。

対象プロセッサー

デスクトップ向けRyzenプロセッサのみ。モバイル向けや非Ryzen APU(Aシリーズ)は流石に覚えていません。

Zen

  • Ryzen 7 1800X
  • Ryzen 7 PRO 1700X
  • Ryzen 7 1700X
  • Ryzen 7 PRO 1700
  • Ryzen 7 1700
  • Ryzen 5 1600X
  • Ryzen 5 PRO 1600
  • Ryzen 5 1600

Zen+

  • Ryzen 7 PRO 2700X
  • Ryzen 7 2700X
  • Ryzen 7 PRO 2700
  • Ryzen 7 2700
  • Ryzen 5 2600X
  • Ryzen 5 PRO 2600
  • Ryzen 5 2600
  • Ryzen 5 1600AF

Zen2

  • Ryzen 9 3950X

  • Ryzen 9 3900XT

  • Ryzen 9 3900X

  • Ryzen 9 3900

  • Ryzen 7 3800XT

  • Ryzen 7 3800X

  • Ryzen 7 3700X

  • Ryzen 5 3600XT

  • Ryzen 5 3600X

  • Ryzen 5 3600

  • Ryzen 5 3500X

  • Ryzen 5 3500

  • Ryzen 3 3100 (これは4Core 8Threadだが、例外的に2CCD構成)

  • Ryzen 7 PRO 4750G

  • Ryzen 5 PRO 4650G

Zen3

  • Ryzen 9 5950X
  • Ryzen 9 5900X
  • Ryzen 9 5900

ThreadRipper / EPIC

例外なくすべてのプロセッサ。 もともとこれらのプロセッサ向けに開発された技術なので。

用語

どちらかというとUnityやVRChatの知識ではなく自作PCや半導体の知識が要求される話なので、書いておきます。

用語補足
AMD赤色のCPU/GPUメーカー。今はRyzenシリーズを売ってます。
Intel青色のCPU/GPUメーカー。今はCore iシリーズを売ってます。
Zen初代Ryzenのアーキテクチャ名
Zen+第二世代Ryzenのアーキテクチャ名
Zen2第三世代Ryzenのアーキテクチャ名
Zen3第四世代Ryzenのアーキテクチャ名
Nehalem初代Core iのコードネーム
AlderLake第十二世代Core iのコードネーム
ダイ半導体でできたトランジスタの塊。CPUの本体と言える。
CCDRyzenの1つのCPUダイのこと。AMDの呼び方。
CCXRyzenのCCD同士を繋ぐバス
InfinityFabric上と同じ
バス通信するための経路
CCX跨ぎCCD同士の通信、またそれによって引き起こされる遅延。