sk7zの備忘録

自分用メモなど

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

注意 この記事は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 2022/07/28追記
EACの対応でプロセス監視からのスレッド数制限は不可となりましたが、起動時にlaunch.exeをbatファイルをから起動する方法だと制限可能です。
2022/07/31更に追記
↓こいつのプロセス監視してVRChat.exeの起動前に制限かければ、VRChat.exeのスレッド数も制限できました!
start_protected_game.exe
スクリプトを下記にて公開しています

sk7z.hatenablog.com

追記ここまで

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

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

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

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

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

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

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

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

Ryzen 9 5950X用
CCD0のみを使用(0~15スレッド使用)
start /AFFINITY FFFF vrchat.exe start /AFFINITY FFFF launch.exe CCD1のみを使用(CCD0はほかプロセスに使われやすいのであまり使われないCCD1を使用(16~31スレッド使用)
start /AFFINITY FFFF0000 vrchat.exe
start /AFFINITY FFFF0000 launch.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
start /AFFINITY 3F launch.exe 3950X 3800X用(8スレッドのみ設定)
start /AFFINITY FF vrchat.exe
start /AFFINITY FF launch.exe 以上です.batファイルの作り方は自分でググってください
またPBOを有効にしていない場合は有効にしましょう。