CPUのマルチコア化が進み、Xeonでは24スレッド、36スレッドは珍しくない。生産作業を行うツールやアプリケーションは、多コアCPUに対しての対応も進んでいるが、一昔前のゲームなどではCPUのコア数、スレッド数が多すぎると起動しないケースがある。その場合は起動時にCPUのコア数、スレッド数を制限する事で問題を回避できる。
Core i7以上のコア数を想定されておらず起動しないケース
Core i7の9xx系以降にリリースされたゲームは8スレッド程度であれば、当然のように動作検証が行われてるため全く問題なく動作する。しかしXeon等ではコンシュマーCPUでは想定されていないような多コア構成が多い。NUMA構成を想定してないゲームでは動作推奨を満たしていても、ゲームが起動しないケースが稀にある。
筆者の環境では「Tomb Raider」(トゥームレイダー2013版)は12コア24スレッド環境では問題なく動作していたが、18コア36スレッド環境では起動時にハングアップしてしまい動作しなかった。ゲームに限らず、この手のバグはアプリケーションなどにも多い。
AMD Ryzen等の8コア以上の多コア環境でも有効なケースは多いと思われる
CPUコア数を制限した状態で起動するショートカットを作成する
CPUのコア数をCore i7程度に制限した状態で起動するショートカットを作成する事で、この問題を回避できるケースがある。
デスクトップの何処でも良いので右クリック>新規作成>ショートカットを選択
起動オプションを設定する
「項目の場所を入力して下さい」の欄に以下のように入力する
cmd /c start “” /affinity FF “D:\Program Files(x86)\SteamLibrary\steamapps\common\Tomb Raider\TombRaider.exe”
青い部分がCPUの有効スレッドを指定している。(後述)
赤い部分は対象のプログラムのパスを設定すれば良い。
*コピペして利用する場合は以下から。(初稿でWoredpressの仕様上「”」が大文字になっていた模様。)
cmd /c start "" /affinity FF "D:\Program Files(x86)\SteamLibrary\steamapps\common\Tomb Raider\TombRaider.exe"
*例では「D:\Program Files(x86)\SteamLibrary\steamapps\common\Tomb Raider\TombRaider.exe”」を指定している。
ショートカットの名前を設定して作成
ショートカットの名前を設定できる
設定が済ませた後に「完了」をクリック
デスクトップのショートカットアイコンからゲームを起動
完了を押すと、デスクトップに作成したショートカットアイコンが現れる。
これでゲームを起動する
多スレッド過ぎて起動しなかった場合は、これで動作するようになる。
起動しなかったトゥームレイダーPC版が無事動作した。最高設定で60FPSで張り付いており、コア数を制限してもパフォーマンスには問題はなさそうだ。
CPUの有効コア数、スレッド数の指定方法
CPUの有効コア数、スレッド数は「affinity」の値を変更する事で指定できる。
c start “” /affinity FF “D:\Program Files(x86)\SteamLibrary\steamapps\common\Tomb Raider\TombRaider.exe
Core i5の場合
有効にしたコア・スレッドを「1」、無効にした場合を「0」とすると
4コア4スレッドのCore i5の場合以下のような対応になる。
Core i7の場合
4コア8スレッドのCore i7の場合、組み合わせが多くなるので以下のようになる。
Affinityによるスレッドの設定方法
CPUのAffinityの値に関しては 下記のように
「タスクマネージャー」>「プロセス」>アプリケーションを選択して右クリック>「プロセッサの関係」を右に90度回転させるとわかりやすい。CPUの有効・無効を2進数で表記し、それを16進数に変換すれば良い。
ゲームの場合はAffinityの値は「ff」か「f」か「1」で回避できる事が多い
CPUが2基であったり、72スレッドほどあるとAffinity値を詰めるのも面倒なので、以下の様な値で動作を確認すれば良いと思われる
Windows7世代のDirectX11ベースのゲーム
affinity値 = 「FF」
さすがにCore i7 9xx以降にリリースされたゲームであれば4コア8スレッド程度は動作検証されてるはずなので とりあえず4コア8スレッド有効の「FF」を指定して動作チェックを行う
Windows Vista世代のDirectX9ベースのゲーム
affinity値 = 「F」
Core2 Quad等を想定した世代のゲームであれば2コア4スレッド程度を想定した「F」で様子を見る
Windows XP世代のDirectX8ベースのゲーム
affinity値 = 「1」
Pentium4世代のゲームであれば、マルチスレッドの最適化など殆どされていない。とりあえず1コア1スレッド「1」を指定して確認してみる。
現在のDirectX11世代のゲームですら、Core i5の4コア4スレッドを使いきってない程度なので、それほど神経質に詰めなくてもゲームの動作に支障はないと思われる。