ゲームが100%CPUを使用するのは正常ですか?


23

ゲームエンジンにマルチスレッド入力処理を実装しました。OSをポーリングして入力を収集し、タイムスタンプを付けるコードは個別のスレッドにあり、メインスレッドの各フレームは、収集した入力を論理的なゲーム時間。それはすべて動作しますが、このセットアップではCPUの100%を使用しています。コアは2つあり、ゲームの実行中は100%になります。

他のゲームもチェックして、彼らもそうするかどうかを確認しました。たとえば、SkyrimとDoom 3は60%をわずかに超えるCPUで問題ないようです。

マルチスレッド入力を使用するゲームが100%CPUを使用することは許容されますか?そうでない場合、そのようなゲームが入力スレッドによるCPU使用率を下げるために使用するトリックは何ですか?


7
つまり、基本的に、新しいイベントを求めてOSを常にポーリングする無限のwhileループを持つスレッドがあります。while true do CheckForEvents;
Kromsterによると、Monicaのサポートは

5
アプリケーションが使用量とCPU速度に関係なくCPU時間の100%を使用している場合、当然のことながらバグと見なされます。モニターの更新サイクルごとにフレームをレンダリングするのに必要なCPU時間よりも多くのCPU時間を使用しないでください。
カスペルド

3
@TheLightSparkポーリングスレッドはスリープしませんか?スリープせずに常にループしてチェックしている場合は、おそらく必要以上に多くのCPU時間を消費しているでしょう。
ルーク

3
Re @Luke:ポーリング間でミリ秒だけスリープしても、CPU使用率は大幅に削減されます。しばらく前に、入力ファイルを使用して出力ファイルをほぼ同じサイズにしたコマンドラインツールのGUIを作成しました。割合を推定するために、出力ファイルのファイルサイズを読み取り、進行状況バーを更新しました(を使用while (true))。そのために1つのCPUの90%以上を使用しました。に追加するThread.Sleep(5)と、CPU使用率が40%未満に低下しました。ポーリングの間隔を25ミリ秒にすると、10%未満になりました。
コールジョンソン

2
@AlecTeal私はあなたが私が言ったことに十分な注意を払っていなかったと思います。より良いグラフィックスをレンダリングすることは同じ使用法ではありません。もちろん、より良いグラフィックスを有効にするとCPUの消費が増加します。しかし、より高速のCPUに切り替えると、コードがより多くのサイクルを消費してまったく同じ結果になる場合、コードに欠陥があります。特定のCPUでレンダリングできるグラフィックの品質を自動的に測定することは、賢明なデフォルトです。ただし、バッテリー電源で実行している場合や、バックグラウンドジョブにCPUが必要な場合にユーザーが選択できるようにする必要があります。
カスペルド

回答:


41

リアルタイムのゲームがためにはい、これは正常ですしようとすることができるよう、迅速かつ良いとして実行するために、100%のCPUを使用します。そのため、プレーヤーは1秒あたりのフレーム数、または優れた物理シミュレーション、またはPCが提供できる他のあらゆるものを認識します。

あなたの場合-いいえ、これは非効率的な設計のように見えます。スレッドを取得し、ループ内のイベントをポーリングします(while true do CheckForEvents;)。間違っている場合は修正しますが、OSはすでにイベントをポーリングしています。ティックごとにメインスレッドからチェックする必要があります。

メインゲームループは、1秒あたり30ティック以上で実行するのに十分な速度である必要があります。これは、多くのゲームのコマンドをポーリングするのに十分です。たとえば、0〜33ミリ秒後にコマンドが処理されると、プレーヤーは違いを認識しません。その一方で、はるかに優れたAIや物理学など、より有益なタスクに追加のCPUコアを使用することもできます。

PSコメントで明確にするように要求されたように、あらゆる種類のゲームに対して盲目的に上記の数字をとらないでください。TBSゲームでは1ターンに1ティックしか必要とせず、RTSゲームでは1ターンに10ティックあれば問題ありませんが、RaceSimsのような他のジャンルにはさらに多くのものが必要です。もちろん、ロジックティックとフレームレートを結び付けないでください。これらは2つの別個のものです。


5
この質問に賛成ですが、1秒あたり30ティックをお勧めします。私見(および他の多くのゲーマーのもの)では、1秒あたり60ティック(したがって60フレーム)を目指してください。多くの人にとって60 FPSはより流動的で、反応がよく、特定のサブセットのユーザーが乗り物酔いをする可能性が低くなります。
Nzall

4
入力の33ミリ秒の遅延は非常に顕著です...-
Synxis

1
@NateKerkhofs:RTSのバックグラウンドから来ました。10ティックが普通です。それは広い世界です、それについての詳細を追加します。指摘してくれてありがとう。
Kromsterは、サポートモニカ

1
@KromStern:私はネイトについて完全に話すことはできませんが、3番目の段落は「30hzをターゲットにする必要がある」と解釈することもできますが、「30hzは許容できる最小値」と解釈することもできます)。
ショーンミドルディッチ

1
100%CPUを使用するのはひどい習慣です。ラップトップユーザーをめちゃくちゃにして、なんらかの形、形、形で100%CPUを使用する必要がないものを探しています。フレームをモニターに効率的に供給することができる適切なゲームループをコーディングします。
クリスデネット

9

常にアクティブなウィンドウの更新を伴うゲームは、ほとんどがフルスクリーンモードで実行され、OSによって管理されるマシンの唯一の(大きな)プログラムになります。したがって、CPUを100%使用することは完全に受け入れられます。

ただし、それはもちろん、ゲームの状態に関係なく常に100%を使用する必要があるという意味ではありません。ほとんどのゲームループは、CPUを何も使わないようにするために、フレームレート制限の前にフレームをレンダリングし終えた場合、フレームレートの区切り文字としてスリープメソッドを使用します。
これはおそらくあなたの例で起こることです:あなたのマシンはSkyrimやDoom 3の実行に必要な速度よりも速いので、必要なものだけを使用しますが、必要なものはすべて使用します。

@KromStermが言ったように、OSは通常既にイベントをポーリングしているので、OSよりループを速くする必要はありません。コアが2つしかない場合、2番目のコアをイベント検出専用に100%使用することはお勧めできません。イベントをメインの更新ループに転送するだけの場合、実行が非常に高速になるためです。代わりに、メインスレッドジョブの一部に別のスレッドでこのコアを使用してみてください。


「スリープ方式を使用する」 -これはフレームレートリミッターとして知られていると思いますか?
ガスドール

3
睡眠目標はリフレッシュレートを監視するために、限界フレームにある場合、より良好な(利用可能な場合、またはNVIDIAのG-SYNC)ハードウェアサポートVSYNCを使用することで、フレーム制限の正確な方法はない
Sargeのボルシチ

8

PCまたはモバイルゲームで利用可能なすべてのCPU時間を使用することを目指すことには、いくつかの欠点があります。

システム要件:ゲームを開発するPCでゲームをプレイできる場合、ゲームを購入した人が所有するより弱いPCではゲームをプレイできない可能性があります。CPUの使用を制限することで、より多くの人がすでに持っている可能性が高いマシンでゲームを使用できるようにします。市場を制限しているかどうかを確認したい場合は、Transformer BookなどのAtom搭載の取り外し可能なPCゲームと競合他社のゲームをテストするか、安価なプリペイドAndroid携帯電話でモバイルゲームをテストします。

電力使用量:ラップトップコンピューターは、2つのコアが半分の周波数の60%で使用される場合よりも、4つのコアが全周波数の100%で使用される場合、バッテリーの消費が速くなります。そのため、コントローラーのポーリングスレッド、AIスレッド、物理スレッド、グラフィックスレッドは、それらが再び実行されるまでブロックされていることを確認してください。戦闘やリズムなど、いくつかの非常に単調なジャンルを除いて、コントローラーを約60 Hzより速くポーリングする必要はないため、ポーリングスレッドを60 Hzタイマーで実行するように設定します。

物理学の変動性:ゲームプレイに影響する物理学がより強力なマシンでより詳細である場合、同じプレイヤーアクションは異なるマシンで異なる結果になります。これは、プレーヤーがより強力なマシンまたはより弱いマシンを使用してチートできることを意味します。IdのQuake III Arenaは、フレームレートがジャンプの高さに影響することで有名です。これを避けるために、多くのゲームは物理学に固定時間ステップを使用します。ただし、これは、パーティクルエフェクトやクロスエフェクト、物理フレーム間の座標の補間など、物理学よりも高いフレームレートでビデオをレンダリングするなど、ゲームプレイから切り離された物理学には影響しません。したがって、model-view-controllerのバリアントを使用して物理学を設計します アーキテクチャ。重要なもの(加速、ヒット検出など)がモデルに含まれ、調整可能な目の保養がビューに含まれます。

AIの変動性: AIがより強力なマシンでより詳細な場合、敵は異なるマシンで異なる動作をします。たとえば、GoやChessの実装では、対戦相手は弱いPCで弱くなり、プレイヤーは弱いPCでゲームをプレイしたり、ウイルス対策やビデオトランスコーディング、オペレーティングシステムの更新などのバックグラウンドプロセスを実行したりすることができます。


4
電力使用の場合は+1。特に、これが非常に重要なモバイルおよびタブレット業界を考慮する必要があります。
akaltar

1
電力の使用は、デスクトップでもノイズに影響します。現代のデスクトップでは、システムが冷えているときにファンの速度を遅くして静かにするのが一般的です。また、再生中にユーザーがビデオを(低優先度で)エンコードしている可能性があるため、CPU時間の無駄はありません。または、twitchにストリーミングするプレーヤーの場合、ビデオエンコードのサイクルを長くすることは大したことであり、高品質のビデオを実現します。(ビデオエンコーディングは、CPU時間、ビットレート、および品質の3つのトレードオフであるため、CPU時間を長くすると、同じビットレートでより高品質のリアルタイムエンコーディングを意味します。)
Peter Cordes

1
電力の使用は主要な考慮事項であり、他のすべての考慮事項は副次的なものである必要があります。私が100%CPUを使用するのは(本当に役立ったなら!)VRのものだけです。
クリスデネット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.