箱エミュパフォーマンスあれこれ

 うーん、気付いたらまた月末じゃないですか。
 折角専用タグを起こしてエミュ改造の話をしていこうかという直後にPC刷新の話が始まってしまって、全然本題に入れてないじゃないですかとは思いながら。
 PC作業は一旦落ち着けてそこから少し休んだりはしたけれども、その後何やってたっけ(汗)みたいな。別にその気もないんだけど結局月刊ペースが板に付いてしまっておりますね、、。

 さてとPC新調後のドリクラエミュ(Xbox360エミュ)の動作パフォーマンスについては、結局、残念な結果は残念なままとは申しましょうか。
 やっぱり明らかにボトルネックがあるというか、CPUの使い方がおかしいまま。
img
 何この酷いコアの使い方、っていう、、。
 これだけ見ればただのシングルスレッド依存のアプリですねって言われそうだけど。いやだって、この前までは普通にこういう動きしてたじゃないですかー。
imgimg
 古いIntel CoreだけじゃなくてRyzen5でも普通に動いてた(動いてるように見えた)から。
 まぁその時点でCPUもGPUもどっちも中途半端にしか使ってないイミフな状況で悩んでいた訳ですが。(※ここの結論としてはGPUパワーは間違いなく足りていなかった、けどCPUもで、双方ネックになっていたという感じ)
 今回Ryzen7 3700Xに取り替えたらこんな動きになったと。
  • 一部のコアしか使ってない
  • 異様に負荷が乱高下している
 後者の不可思議な動き方についてはどうやらRyzenのSMT (Simultaneous Multi-Threading) の制御の特徴のよう(参考)。SMTを切ると普通にコア0,1が100%で張り付く。
 あとは前者のなんでこんなに一部のコアに偏るようになったかというところだけれど。

 (以下超絶ど素人視点ですが)これも結局は今のRyzenがアプリ側に求められた処理に対してこういうコアの割り振り方をするという話なんだろうか。
 Xeniaの負荷グラフを見てると元々リニアな処理で待たされてる感は強くあって、結局シングルスレッド依存の強い実装(ないしはその上で動かすソフト側の問題)だったのかなと。それを結果的にマルチコアのCPUがどう動かすかというところで、今まではただ平均的に振られてたけど、Ryzen7は「1コアでぶん回した方が効率的だから!」みたいな制御をしてるのかなと。近頃のCPUはよく分からない。いや昔のも別にだけど。
 だから別にRyzen7でパフォーマンスが落ち込んでる訳ではなくて、動作性能としては今までの延長上。描画パフォーマンスが出てない癖にCPU使用率が高いでもないという不可思議な現象も、今回の結果でむしろ腑に落ちる所にはなったかとは思う。

 つまり、スレッド動作上で頭打ちを起こしていてどうしようもないと(苦笑)。
 こういう意味ではシングルスレッド性能重視でCPUを選んでおけばもう少し違ったのかな?という後悔は若干ありますが。ただでさえトータルでデカい出費なのに(根拠もない状況で)Intelは選びにくかったのでしょうがないっちゃしょうがない。GPUこそAMDの対応は遅れてたけど、CPUはどっちも変わらないように見えてたし。

 公式のissueを漁ってみるとこの辺りでCPU使用率の似たような話は出ていたので、これがxeniaの問題か、ソフト側の問題によって発生しているものか、今後改善するといいですねというところ。
 ドリクラの場合、 ignore_thread_affinities というオプションを落とすと妙に引っ掛かるけど普通に動く時もあるというおかしな挙動を示したので、ここにスレッド問題のヒントが無いかとも思ったけれどちょっとまだ分からずじまい。一番怪しいaudioスレッド周りを弄ってみたりはしたんですけどね。(コールバック上でwaitする実装はあんまり良くないんじゃないのかなぁとか)

 因みに他のソフトでどうなるかも検証すればいいのだろうけど、一応エンジンが変わってそうなドリクラ麻雀では全く同じ、それ以外はまだやってない。
 DLCデータ等の単純コピーと違ってゲームソフト本体の吸い出しは(特殊な物はいらないとはいえ)若干手間が掛かるので。たとえそれで何か変わったとして今やりたい目の前の話には何の解決にもならないですし(苦笑)。それより今は出来る事をしておこうと。

 という訳で一旦この問題は残念ながらお開き。

 あ、あとGPUの方は、GTX1050Tiでは力不足だったけれどRTX3060Tiでは余裕過ぎるという結果でした(今のRyzen7に1050Tiを乗せて確認)。アホみたいに投資した結果がこれか(笑)。多分1660superとかで足りてたんじゃないかな。
 まぁ今のご時世、何万も出してそんな中途半端なミドルを買うよりは(それで結果が出なくて泣くよりは)、って状況だったのだからしょうがない。(4年前に2万切ってた1050Tiが2.5万くらいしてるという頭の悪い相場でしたからね。マジでこの高騰騒ぎには怨念しかないですよ(ハァ)。)
 余裕綽々すぎてレンダリング解像度2倍にしてもパフォーマンスは全く落ちないので録画する時はそれで。流石に3倍は無理だったけど。

 そんなところでいざ肝心のドリクラエミュについては、具体的に言うと「未だにギリギリ60fps出し切れない」というこの微妙にもどかしい状況(苦笑)。一人カラオケでもこれなので、バックダンサーHGモードなんて20fpsくらいに落ち込んでしまう。
 まぁそこは元々実機でも重い所だしエミュなので単純比較は出来ないけれど、総合的には実機相当の動作までもうちょっとくらいのところ。場合によっては実機より動かせてる所もある。
 しかし個人的にはちょっと負荷の掛かる遊びを考えていたので、マシンパワーでごり押し出来ない結果になってしまって意気消沈してしまった。

 ただどうやら処理するモデルが重いと極端に落ち込む傾向が強くて、軽いモデルならむしろ無茶苦茶余裕だった。制服モデルでギリ60fpsなのに、軽いモデルなら二体分でもほぼ60fps行けたという(ぇぇ)。(どんだけ制服が重いのよと思うけども、最初に作られたであろうモデルなので最適化されてない面はあるのだと思う。ZERO追加キャラの分は多少軽め。)
 まぁこれならコスチュームを選べば何とかなりそうかなという所で多少安堵もしたところ。

 後はエミュ単体の動作とは別に、動画を録るならそれももう少し安定させないとねという感じでこちらも試行錯誤中。そもそもエミュを60fpsフル稼働させながら同じPC上で録画しようというのが無茶なのか、、。

※追記:ゲーム側の実装がエミュに不利になっていたようなので自前で高速化を行ったところかなり快適な動作になりました。(参考