web-dev-qa-db-ja.com

ゲームのプロセスの優先度をリアルタイムに変更すると、CPUに悪影響がありますか?

Windowsでは、パフォーマンスを向上させるために、ゲームプロセスの優先度を頻繁に「高」または「リアルタイム」に変更しました。これにより、ハードウェアに問題が発生することはありません。 Linuxでchrtコマンドを使用してゲームプロセスのリアルタイムの優先度を変更できるのではないかと考えていました。reniceingを-20(最高の優先度)に変更することはできません。顕著なブーストを提供するようです。ただし、CPUに悪影響を及ぼす可能性があるかどうかわからないまま、これを行うことには注意します。誰でもリスクについて教えてもらえますか?

7
Totem

プロセスの優先度を変更しても、他のプロセスがCPU時間を奪い合っているときにこのプロセスが実行される頻度が決まります。プロセスがCPU時間を使用している唯一のプロセスである場合、影響はありません。それ以外の場合はアイドル状態のシステムでの最小優先度プロセスは、最大優先度プロセスと同じように、100%のCPU時間を取得します。

したがって、より高い優先度でゲームを実行できますが、システムの他の何かが大量のCPU時間を使用していない限り、ゲームの実行速度は速くなりません。

Xサーバーよりも優先度を低くしておくことをお勧めします。XサーバーがCPU時間を必要とする場合は、ゲームが複雑なものを表示するようにゲームに要求しているためである可能性が高く、表示は通常CPUを必要とするタスクです(ただし、その量はの作業はGPUで行われます— CPUの優先度はGPUに影響しません)。

CPUはコードを実行するように設計されています。プロセスの優先順位を変更しても、CPUの処理量には影響しませんが、CPUに損傷を与えることはありませんが、CPUが熱くなり、コンピューターのファンが強くなります。

Linuxプログラムでreniceを使用してもCPUは消費されませんが、必ずしも意図したとおりに動作するとは限りません。

優先順位には、CPUがコードを実行する速度に関係するnothingがあります。異なる優先度レベルのプログラムからのコードを同等に高速に実行します。優先順位が変わるのは、オペレーティングシステムが選択時に実行するプログラムを選択することです。 CPUは、一度に1つの「スレッド」の実行しか実行できません(技術的には、マルチコアCPUのコアごとに1つ)。それ以上の処理が必要な場合は、マルチタスクに依存します。異なるプログラムの実行を交互に切り替えて、CPUよりも多くのスレッドを実行しているように見せます。これらの各タスクに与える時間を選択するときは、ヒントとして優先度を使用します。

コンピュータにとって「リアルタイム」が意味することは、「この速度で実行する」ことではなく、「このプロセスを先取りしないこと」です。リアルタイムプログラミングは多くの分野で非常に重要です。たとえば、車のアンチロックブレーキを管理するソフトウェアを作成している場合、私は本当に診断を実行する必要があるとOSが判断したため、タスクを数ミリ秒遅れて実行したくないワイパー。したがって、自動車のアンチロックブレーキ管理ソフトウェアは「リアルタイム」の優先順位で実行されます。

正直なところ、Linuxでは、「リアルタイム」の優先度レベルは少し間違っています。これは、Linuxがプロセスをスケジュールする方法が原因です。 Windowsでは、より高い優先度で実行されているプロセスがある場合、より高い優先度のタスクが何かを待機していない限り、低い優先度で実行されているプロセスにはCPU時間は与えられません。 「リアルタイム」のWindowsタスクの上で実行できるのは、カーネルプロセスだけです。 Windowsではtonのブロートウェアが常にバックグラウンドで実行されているため、優先度を「リアルタイム」に上げると、すべてのジャンクが実行されなくなります。

ただし、これには問題があります。優先度の高いタスクが、優先度の低いタスクのいずれかに依存している場合があります。これは「優先順位の逆転」と呼ばれ、マルチスレッドプログラミングの世界では大きなトピックです。これが発生すると、優先度の高いタスクが優先度の低いタスクを飢えさせ、それ自体が停止していることに気付かないことがあります。 Linuxでは、優先順位は全か無かのアプローチではなく、CPUのどの部分が各プログラムに与えられるかを決定する方法と見なされるため、Linuxではこれは起こりません。 -20で実行中のプロセスは実質的に 0で実行中のプロセスよりも多くのCPU時間を取得しますが、-20プログラムがある場合でも、0プログラムはsome CPU時間を取得します。メモリが機能する場合、現在のLinuxスケジューラは、-1のプログラムを0の2倍のCPUパワーで提供し、-2のプログラムを-1の2倍で提供します。これは、CPU時間の0.9999046%が-20のプログラムに移動することを意味しますが、少しの部分doesは0のプログラムに移動します。0のプログラムは200kHzで実行されているように感じますプロセッサー!

必要な場合はtrueリアルタイムで、他のものが横取りするのを防ぐことができます。カーネルドライバーを作成するか、Linuxのリアルタイム拡張機能を使用する必要があります。 RedhatにはMRGと呼ばれるものがあります。これにより、Linuxで真のリアルタイム処理が可能になります。その場合、「リアルタイム」は特別なことを意味します。 MRGの下では、「リアルタイム」グループのユーザーはこれらのリアルタイム拡張機能の使用が許可されています(これは、NiceフレンドリーなLinuxスケジューラーを意図的に使用していないため、プロセッサーを永久にビジー状態に保つ可能性があります)。

2
Cort Ammon

スレッドの実行中にCPU要求の量を変更することについて話していますか?

最近のCPUは実際には非常に速い速度のステッピングを使用しています。たとえば、Intel Core i5/i7のクロッキングの分析を行った場合、クロック速度が非常に速くちらつきとちらつきを示しています。これは、インテルが消費電力量に応じてパフォーマンスを調整できる方法の一部です。デスクトップPCで利用できる負荷はあるかもしれませんが、CPUがより効率的に動作しているときに、熱に変換されているため、ワットあたりの最大のバンを取得することが重要です。

これは、他のゲームフォーラムで読んだことからのみわかります。私はCPUサイエンティストではありません。

スレッドを最大の「厄介さ」に調整することによるダメージはないと思います。あなたが注意しなければならない唯一のことはあなたのCPUがどれだけ熱くなっているかです、しかしあなたがBIOSで過電圧を使っていなければそれがシャットダウンする前にCPUを調理することはほとんど不可能です。

最近のCPUは速度を急速に変えるように設計されています。 Intel Speed Steppingと「CPU C状態」を検索すると、私が何を意味するかがわかります。

2
bitofagoob