概要
AMD Ryzenの一部プロセッサーにおけるCCX跨ぎと呼ばれる減少によって引き起こされる性能低下とその対策。 VRChatに限った話ではありません。
CCX跨ぎとは
Zen世代以降のプロセッサーは、Bulldozer世代やIntel Core iシリーズ(Nehalem〜Alder Lake)とは設計が異なります。 大きな1つのCPUダイで完結するのではなく、小さな複数のCPUダイを並べてコア数を増やす方式です(コントローラーなどは除く)。
Zen、Zen+、Zen2では1CCDあたり4コアまで、Zen3では1CCDあたり8コアまでを1ダイ内で完結できます。 それを超えるコア数は、2つ以上のCCDを組み合わせて実現します。 例としてRyzen 7 1800XはZen世代の8コア16スレッドで、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(4コア8スレッドだが、例外的に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の本体と言える。 |
| CCD | Ryzenの1つのCPUダイのこと。AMDの呼び方。 |
| CCX | RyzenのCCD同士を繋ぐバス |
| InfinityFabric | 上と同じ |
| バス | 通信するための経路 |
| CCX跨ぎ | CCD同士の通信、およびそれによって引き起こされる遅延 |