雷撃の記憶

非常に不親切な備忘録

beatoraja AMD製CPUで時々カクつく問題への対処法(緩和する程度)

2023/11/18追記

beatorajaのカクつきが何故か無くなった(?) - 雷撃の記憶
自分の環境では完全に直りました。
偶然直っただけなので、具体的な解決策は不明です。

追記終

■はじめに

タイトルの通りである

beatorajaを遊んでいるとき、一瞬スタッタリングを起こしてしまう事象に悩まされていた。

完全に解決したわけではないものの、かなり症状を緩和できたので、対処法を記しておく。

※本記事はAMD CPUを使用している方向けです。ヘテロジニアスマルチコアを採用したIntel CPUでE-Coreにプロセスが割り振られ、パフォーマンスが低下する問題については取り扱っていません。

 

■PCよくわからん人向け注意点

この記事に書いてある対処法を行うと、OSの動作が不安定になったり、致命的な影響を及ぼす可能性があります。
当方ではPCの故障・データの破損や消失に関していかなる責任も負いません。

この記事では詳しい説明はありません。
何をやっているのかいまいち分からないという方は、ブラウザバックすることを強く推奨します。

 

■PC環境

OS:Windows 11 22H2

CPU:AMD Ryzen 7 5800X
(Core Performance Boost/Precision Boost Overdrive無効、定格運用)

MB:ASUS ROG STRIX X570-F

RAM:DDR4-3200 64GB

GPU:NVIDIA GeForce RTX 3060Ti

 

■beatorajaの設定

本体:0.8.5 JRE同梱版(Liberica JRE)

Amazon Correto+JavaFX SDKなど、他のJRE環境では実行ファイルがjava.exeになることもあります

ウィンドウモード:ボーダーレス

垂直同期:本体設定オフ、NVIDIAコントロールパネル高速

MAX FPS:576

 

■対処法

・タスクマネージャー上で、javaw.exeの優先度を「リアルタイム」に設定する。

(2023/10/29追記:OBSなどの配信・録画ソフトを使用する場合、リアルタイムに設定せず、高までにしておいてください。動作に不具合が生じる可能性があります)

・javaw.exeに対する関係の設定(コアの割り当て)を、0,2,4,6,8,10,12,14にする。

これを行った所、時々起こるスタッタリングの継続時間が大幅に減少した。

前は演奏感や精度に著しい影響を与えるレベルで描画にズレが生じることもあったが、スタッタリングが発生しても(体感)1~2フレームほどカクつく程度で済むようになった。

ただ、これでもカクつく時はカクつくので、根本的な解決策とは言えない。

 

※優先度リアルタイムは、OSの動作不良や、BSoDの原因となる可能性があります。
その辺りを理解できない場合は設定しないでください。

 

2023/11/02追記
beatoraja.batを編集することでも起動時に優先度とコアの割り当てが出来る。
java -Xms1g -Xmx4g -jar beatoraja.jar」という部分を、startコマンドを用いた起動へと変更する。

※8コア16スレッドの例
「start /b /realtime /affinity 5555 java -Xms1g -Xmx4g -jar beatoraja.jar」

この場合だと、優先度リアルタイム、コア割り振りを物理コアの8個に設定した状態で起動することとなる。
(/affinityによるコア指定は別の方の記事を読んで欲しい)

www.nichepcgamer.com

 

■わかる人向け:コア割り当てと優先度の理由

AMDのCPUを長年使っている人ならわかると思うが、この会社のSimultaneous Multi-Threading(SMT)はIntelのHTTに比べて不安定な傾向にある。

なので、仮想コアにプロセスを割り振らなければ多少は安定するのではないかと考えた。

AMDのSMTの詳しい仕様までは詳しく知らないのだが、恐らく仮想コアとして割り振るのは物理コアの次の番号であろうと予想し、taskmgr上で偶数番目のコアだけに設定したというわけだ。

加えて、他のプロセスに割り込まれないよう、優先度をリアルタイムにした。

Windowsの動作プロセスと同等かそれ以上の優先度になってしまうため、不安定になってしまうのではないかと心配したが、今のところ特に問題は起きてない。

 

■taskmgrで優先度とコアの関係を設定しても、次回起動時にリセットされる

これはWindowsの仕様なので、ツールを使って毎回書き換える必要がある。

私はApplication Priority Changerというソフトにプロセスを監視させ、javaw.exeが起動する度に自動で設定してもらっている。

www.vector.co.jp

※このツールはコア番号が0スタートではなく1スタートなので、taskmgr上と違い奇数番目のコアを割り振ることになる。

■INFINITASでも有効なのか

bm2dx.exeにも同じ対策を施したが、こちらでもスタッタリングが発生しづらくなった。

-----

beatorajaやINFINITASを遊ぶ予定があり、なおかつこれから新しくPCを買う人は、これらの小手先の対策を取るより、Intel製CPUを選ぶことを強くお勧めしておく。


■更新履歴

2023/10/23

文章の繋がりや日本語を全体的に修正

酔っ払って書いたのかと思うくらい支離滅裂な部分があった(反省)

2023/10/29

優先度リアルタイムはOBSの動作に影響を与える可能性がある旨を追記

2023/11/01

ヘテロジニアスマルチコアのIntel CPUについては所持しておらず、検証できないのでその旨、及びJRE環境によってプロセス名が変わることを追記

2023/11/02

バッチファイルで優先度とコア指定が出来ることを追記

2023/11/18

自身の環境でカクつきが完全に無くなったことを追記(原因不明、怪しい部分を列挙した記事へのリンクを追加)