mieki256's diary



2020/04/09(木) [n年前の日記]

#1 [pc] Ryzenはゲーム向きではないCPUらしい

メインPCのCPUを、Intel Core i5 2500 から AMD Ryzen 7 1700 に変えたので、せっかくだからと色々なアプリを起動して様子を眺めていたのだけど。ちょっと昔の ―― 2016年頃に発売された3Dゲームを動かしてみたら、動きがおかしいことに気がついて。

状態としては、60FPSで滑らかに動いたと思ったら、動きが0.n秒ほどピタッと止まって、また滑らかに動き始めて、また止まって…みたいな。ガタつくというか、カクつくというか、プチフリーズ(プチフリ)するというか…。

おかしい…。Ryzen 7 1700 って Core i5 2500 よりスペックが高いはずではなかったのか…。どうして Core i5 2500 よりガクガクするのか…。ベースクロックは 3.3GHz → 3.0GHz になったけど、ベンチマークではシングルコアの性能は微妙に上がってるし、何より物理コア数が 4 → 8に、スレッド数は 4 → 16 になってるのに…。

ググってみたところ、そもそも Ryzen はゲーム向けのCPUではないのだ、ゲームを動かすとパフォーマンスが落ちるのだ、という話を見かけてしまった。知らなかった…。苦労して入れ替え作業をしたのに、結構ショック…。

スレッド数の問題。 :

まず、「今のCPUってスレッド数多過ぎ」問題があるようで…。

昔のゲームは、スレッド数が16もある前提では作ってないので、スレッド数が多いだけで逆にパフォーマンスが落ちてしまうのだとか。中には、コア数は最大4コアだろう、と決め打ちで作ってあるゲームもあって、そういうゲームは起動すらしないそうで。

幸い、Windows10には、「このプログラムはこのスレッドで動かせ」と指定する機能があるので、一応ソレで問題を回避できなくもないらしい。

やり方は、タスクマネージャーを起動 → 詳細タブ → 目的のプログラムを右クリック → 関係の設定、で、使うスレッド番号を指定できる。

あるいは、cmd.exe を起動しつつ、使うスレッド番号を指定することもできるらしい。
cmd.exe /c start "" /affinity FFF0 X:\hoge\fuga\piyo.exe
/affinity の後ろにある数値が、どのスレッド数を使うかの指定値。16進数で指定。スレッドを使うか使わないかを0/1にして2進数で並べて値を決める。下位ビットが CPU 0。上位ビットがCPU n。8スレッドなら8bitになるし、16スレッドなら16bitになる。
CPU No. 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0

2進数   1  1  1  1  1  1  1  1  0  0  0  0  0  0  0  0 → /affinity F0 を指定。CPU 15 - CPU 8 を使って動かす

しかし、Ryzen 7 1700 は、物理コアと論理コアがあるわけで…。どのスレッド番号が、物理コア or 論理コアなのか…。

以下のページに、そのあたりの記述が。

_Ryzenはなぜ「ゲーム性能だけあと一歩」なのか? テストとAMD担当者インタビューからその特性と将来性を本気で考える - 4Gamer.net
0x00FFは,Ryzen 7 1800Xだと8スレッド全部を片方のCCXに割り当てる格好となる。

一方の0xF00Fだと4スレッドずつ2基のCCXへ割り当てるという,Ryzen 7 1800Xにとって苦手なタイプの割り当てだ。

さらに0x5555はスレッドを論理CPUコア1つ飛ばしで割り当てるため,結果としてSMT無効時と似た実行形態になる。

前述のとおり,FFXIVベンチは使えるCPUコアに対してアクティブスレッドをどかっと立ち上げるので,Ryzen 7 1800X,i7-6900Kとも,0x5555設定時のスコアが最も高い。これは納得だろう。

Ryzenはなぜ「ゲーム性能だけあと一歩」なのか? テストとAMD担当者インタビューからその特性と将来性を本気で考える - 4Gamer.net より

つまり、CPU0、CPU2、CPU4 …が物理コアで、CPU1、CPU3、CPU5…が論理コア、ということなのかな。たぶん。

ただ、実際に 5500 や 5550 を指定してみたら、動きが止まる時があるというか…。「論理コアも使えるなら使え」的に、FF00 や FFF0 を指定したほうが、滑らかに動く、ような気もするけどちょっと自信が無い。

もしかすると、このあたりCPUコアのキャッシュが絡んでるのだろうか。それとも、ゲーム用に使ってるコアに対して、「こっちのプログラムも動かしてくれ」的にWindows10が他の何かを割り込ませてくるのだろうか。だとしたら、「論理コアもゲーム用に使え」と指定することで、物理コア+論理コアをゲームで占有できて割り込みが少なくなる状況を作り易くなったり…?

Ryzen は、SMT という機能で、1つのコアを2つのコアのように見せかけているけれど。BIOS設定でSMTを無効にすれば、物理コアしか持ってないような状態にできる模様。ただ、Ryzen 7 1700 + GIGABYTE B450M S2H rev.1.0 で試してみたところ、何故か Windows10 の終了メニューから「スリープ」が無くなってしまって…。なんだか怪しいので、SMTは「自動」にしておくことにした。

余談。タスクマネージャのグラフ。 :

巷の記事を眺めると、Windows10 のタスクマネージャ上で、CPUのコア数(スレッド数)分グラフを表示してる画像がよく出てきて、「ソレ、どうやるの」と疑問だったのだけど。

タスクマネージャのグラフの上で右クリックすれば、切替メニューが出てくるのだな…。知らなかった…。

以上です。

過去ログ表示

Prev - 2020/04 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project