sk7zの備忘録

自分用メモなど

Zen3でVRChatのFPSを改善する方法(Ryzen 9向け) *Zen2も上がるかも?

注意 この記事はGPUパワーを持て余しており、CPUがボトルネックになっている方向けの記事です。
GPU使用率が100%に張り付いている場合GPUがネックになっているため、こちら方法を行っても改善しないと思われます。
またCPUがIntelの人には一切関係ありません。
Zen3のRyzen5 5600x Ryzen7 5800xではCCD跨ぎはそもそも発生しないため、この記事は見る必要ありません。
Zen3の方向けの記事ですが、Zen2の方も改善するかも?しれません。
正確なFPSを表示するためASWを無効にしています。
(有効になっている場合はFPSが40FPSに固定され、スムージング処理がかかります)
Asynchronous Spacewarp(ASW) 2.0の紹介: Oculusの神技術がさらに進化 | VRまにあっくす!

まず最初に、Zen3でCCXの構成が6コアもしくは8コアとなり
Ryzen5 Ryzen7シリーズではCCX跨ぎによる遅延はなくなりましたが
Ryzen9では依然としてCCD跨ぎによる遅延は発生しております。
なお、Windowsタスクスケジューラーとしては極力CCDを跨がないようにはなっていますが
VRChatの場合はそうではないようです。

実際にRyzen 5900X RTX3090の環境にてVRChatでSilentClubでGPU-Zの使用率を見たところ
GPU使用率は74%程で余裕があり、CPUはまばらに負荷がかかっていました。

タスクマネージャーからVRChatのプロセスの割当を24スレッドから
CCD0である[0-11]スレッドを選択したところ
CCD跨ぎが発生しなくななったのか、FPSが80→90FPS程度に上昇することを確認しました。
またその際、GPU使用率は83%に向上しました
[タスクマネージャー>詳細>VRchat.exe>関係の設定>CPU0~11まで選択]

スレッド制限無し
https://sk7z.xyz/files/VRChat_fZacUWnXNx.jpg

CCD0のみで実行(0~11スレッドに制限)
https://sk7z.xyz/files/VRChat_WonY4APe8g.jpg

場所や人数にもよりますが、60FPSしか出せなかったところが80FPSまで出せることも度々ありました。 なお、ラジオ体操では5FPS程度しか上昇しませんでした

CPUがボトルネックになっている場合では上記の手順でFPSを10~20程度増やすことは事はできますが、
起動するたびにタスクマネージャーを開いて設定するのは面倒くさいので

2020/11/20 追記
毎回batファイルからVRChatを起動するのも面倒なので
VRChatのプロセスを監視して自動的に使用スレッド数を制限するpowershellファイルを作りました

sk7z.hatenablog.com

追記ここまで

起動に時にスレッド数を設定するbatファイルを数パターン作成しました。

cd "C:\Program Files (x86)\Steam\steamapps\common\VRChat\"
start /AFFINITY FFF vrchat.exe

コマンドの説明 VRChatを指定したスレッドにて起動します。

start /AFFINITY FFF  vrchat.exe  
                この値FFFが重要です  

例:24スレッドのCPUでCCD0のスレッド(0~11)を全て使用する場合
000000000000111111111111 →2進数から16進数に変換→ FFF

Ryzen 9 5900X用
CCD0のみを使用(0~11スレッド使用)
start /AFFINITY FFF vrchat.exe
CCD1のみを使用(CCD0はほかプロセスに使われやすいのであまり使われないCCD1を使用(12~23スレッド使用)
start /AFFINITY FFF000 vrchat.exe

Ryzen 9 5950X用
CCD0のみを使用(0~15スレッド使用)
start /AFFINITY FFFF vrchat.exe
CCD1のみを使用(CCD0はほかプロセスに使われやすいのであまり使われないCCD1を使用(16~31スレッド使用)
start /AFFINITY FFFF0000 vrchat.exe

Ryzen 7 5800
Ryzen 5 5600
CCD跨ぎは発生しません、ご安心ください。

未検証ですが、Zen2の構成は下記のようになっており、CCXの最大のコア数が3もしくは4となっていますが
Ryzen 9 3950X CCD0[[CCX4コア]+[CCX4コア]] +CCD1[[CCX4コア]+[CCX4コア]]
Ryzen 9 3900X CCD0[[CCX3コア]+[CCX3コア]] +CCD1[[CCX3コア]+[CCX3コア]]
Ryzen 7 3800X CCD0[[CCX4コア]+[CCX4コア]]
Ryzen 7 3600X CCD0[[CCX3コア]+[CCX3コア]]
VRChat自体はあまりマルチスレッドに対応しておらず、3コア・4コアがあれば十分な説があるで
CCXの4コアもしくは3コアのみを使用する下記のbatファイルでもFPSが上がるかもしれません
3900X 3600X用 (6スレッドのみ設定)
start /AFFINITY 3F vrchat.exe
3950X 3800X用(8スレッドのみ設定)
start /AFFINITY FF vrchat.exe

以上です.batファイルの作り方は自分でググってください
またPBOを有効にしていない場合は有効にしましょう。