web-dev-qa-db-ja.com

コードで100%CPUを使用しないのはなぜですか?

Windowsで実行されているC#.NET 4プログラムについて具体的に話していますXP以上)が、一般的な回答も受け入れられます。

すでに最適化された効率的なプログラムを想定しています。ここでの問題は、ハードウェアのCPU使用率が高いことによる影響と、使用率が高いプログラムを抑制して摩耗を減らす必要があるかどうかであり、実装が効率的であるかどうかではありません。

今日の同僚は、「最新のCPUは安価であり、100%のCPUですぐに低下する」ので、データロードプロセスで100%のCPU使用率を目指すべきではないと提案しました。

これは本当ですか?もしそうなら、なぜですか?以前は、集中的または長時間の操作には100%のCPU使用率が望ましいとの印象を受けていましたが、どちらの方法でも、この件に関して信頼できるソースを見つけることができませんでした。

42
Nick Udell

冷却が不十分な場合、CPUが過熱する可能性があります。しかし、それらすべて(少なくとも最近のすべてのPC CPU)は、クロック速度を抑制したり、最終的な手段としてシャットダウンしたりするさまざまな熱保護メカニズムを備えています。

つまり、ほこりっぽいラップトップでは、100%のCPU負荷で一時的な問題が発生する可能性がありますが、破損したり、「劣化」したりすることはありません。

CPUバウンドの問題については、100%のCPU負荷が適切な方法です。

アプリケーション(UI)の応答性に関しては、これはCPU使用率とは別の概念です。 1%のCPUを使用する応答しないアプリケーション、または100%のCPUを使用する応答性の高いアプリケーションを使用することは完全に可能です。 UIの応答性は、UIスレッドで行われた作業の量、およびUIスレッドと他のスレッドの優先順位に要約されます。

59
Joonas Pulakka

Windowsプログラム(winforms/WPF)は常に応答性を維持する必要があります。 100%のCPUリソースを使用する単純なプロセスの実装では、プログラムを簡単にしたり、システムを停滞させたり停止させたりすることは簡単ではありません。

優れた実装(たとえば、優先度の低い別のスレッドを使用する)であれば、問題にはなりません。

CPUがすぐに壊れることを心配する必要はありません。

15
Pieter B

100%CPUを使用しているプログラムには、通常何も問題はありません実際に有用な作業を行っており、より重要なものから時間をかけていません。特定のハードウェアプラットフォームがオーバーヒートを回避するために50%にスロットルを戻す必要がある前に、1秒間100%のCPUを継続的に使用することのみ可能であり、アプリケーションにとって一般的に優れています実行するのに役立つ作業がありますできるだけ速く実行するアプリケーションが実行する「べき」速度を推測するよりも、CPUまたはOSが必要なスロットルを処理できるようにします。アプリケーションまたはスレッドに実行する必要がある優先度の低い作業があるが、常に重要ではない場合、OSが優先度の低いタスクのCPU使用率を50%に制限すると、CPUが実行する必要がある場合に役立ちます。少しの間、すぐに「スプリント」する準備が整いますが、アプリケーションは、スレッドの優先度を低くすることを要求する以上に、そのようなことについて心配するべきではありません。

100%CPUを使用するのが悪い最大の状況は、次のいずれかです。

  • アプリケーションは、永続的なポーリングによって急がれる予定のないイベントをビジー待機しています[タスクが実行されたかどうかの確認に費やされた労力が、他の方法で費やされる可能性のあるCPUリソースを消費している場合、実際には遅延する可能性があります実行中タスク]。

  • アプリケーションがディスプレイを頻繁に再描画しています。 「過度に頻繁に」の定義は、ある程度は、表示デバイスの性質と表示されるコンテンツに依存します。ディスプレイハードウェアが120fpsを表示できる場合、モーションブラーを追加せずにアニメーションを120fpsで表示できても、追加せずに低いフレームレートできれいに表示できない場合があります。モーションブラーを使用してフレームをレンダリングする場合、フレームブラーを使用せずにレンダリングする場合よりも時間がかかる場合、それをサポートするハードウェアで120fpsでレンダリングすると、モーションブラーを使用して遅いフレームレートでレンダリングするよりもコストがかかりません。 [単純な状況:29スポークのホイール、1秒あたり1回転。 120fpsでは、ホイールは適切な速度と方向で回転しているように見えます。 60fpsで、ちらつきホイールは反対方向にゆっくりと回転するように見えます]。

前者は明らかに悪いと認識できます。 2つ目は少し微妙です。ユーザーがモバイルプラットフォームをターゲットにしている場合、一部のユーザーはバッテリーの寿命を気にせずに最高品質のアニメーションを望み、他のユーザーは低品質を受け入れるため、ユーザーが目的のアニメーションフレームレートを選択できるようにすることが望ましい場合があります。バッテリー寿命を延ばす代わりにアニメーション。アプリケーションにトレードオフの場所を推測させるのではなく、ユーザーがカスタマイズできるようにすると便利です。

15
supercat

「最新のCPUは安価で、100%のCPUですぐに劣化します。」

この質問の「低下」の部分に実際に取り組んだ人はいないと思います。 ICは、ダイ温度がメーカーの制限を超えると劣化します。 ICは通常125Cまで動作するように設計されていますが、 10C増加するごとに寿命が50%短くなります

プロセッサには、常に温度調節機能があるとは限りませんでした。次に、一部のAMD Duronで問題が発生しました(ヒートシンクなしで実行すると、問題が発生する可能性があったとされています)。これで、すべてのPCプロセッサに、CPUクロックにフィードバックする温度センサーが組み込まれ、クロックを遅くして損傷を防ぎます。そのため、プログラムが使用可能なCPUを100%使用しているのに、冷却が不十分であるため、CPUが定格速度の75%でしか実行されていない場合があります。

ユーザープログラム内は、CPU消費の管理を試みるのに適切な場所ではありません。一般に、プログラムは可能な限り高速に処理を実行することと、入力またはディスクアクセスを待機して中断することを交互に繰り返す必要があります。可能であればビジー待機やスピンロックを回避する必要がありますが、システムの他の部分への礼儀です。

WindowsとLinuxの両方に、パフォーマンスと熱管理を行うCPU「知事」システムがあります。これはOSレベルで行われるため、システムの合計CPU消費を考慮することができます。ハードウェアを管理し、ユーザープログラムによる悪用を防ぐのは、オペレーティングシステムの責任です。ハードウェアの所有者は、ファンをきれいにして正常に動作させる責任があり、メーカーは適切なヒートシンクとファンを最初に取り付ける必要があります。

デバイスの冷却が不十分な場合がいくつかありますが、大量の返品がメーカーにそれを行わないように指示しています。

10
pjc50

「..最新のCPUは安価で、100%のCPUですぐに劣化します。」.

「CPUの劣化」を心配する必要はまったくありません。最近のCPUは、以前よりも品質が劣っていません。

CPUを作るのは非常に高価(そして数年ごとにさらに高価になっています)であり、新しいファブを構築するための数十億は珍しいことではありません(リンクを参照)。

http://en.wikipedia.org/wiki/Semiconductor_fabrication_plant

CPUの製造コストは、最大でnoに依存します。生産ユニットの。これは経済でよく知られている事実です。それが結局のところ、(比較的)「安価」で販売できる理由です。 (ここにはリンクは必要ないと思います)

最近のCPUが「以前の時代」よりも高品質である傾向があると考える理由をいくつか挙げることができます。

しかし、最も重要なのは、テストにおける利点です。最新の電子機器は「テスト用に設計」されています。ソフトウェアであろうとハードウェアであろうと、他のほとんどすべてのものに対してテストを評価するという幅広い洞察は、それほど古くはありません。 CPUの場合、さまざまな価格と周波数タイプを形成するためのテストも行われます。最高のCPUが最も高い周波数で販売されています。それにもかかわらず、安価なプロセッサーは、販売された周波数よりも高い周波数で動作することが非常によくあります。製造業者が一部の「高レベル」プロセッサーをより高い価格で販売したいという理由だけで不自由になります。

(一方で、もちろん、現在のように15億を超えるトランジスタを搭載したプロセッサでは、70年代のプロセッサの数千のトランジスタを使用した場合よりも多くのエラーが発生する可能性があります。しかし、これは私の回答IMOと矛盾しません。一般的なプロセッサ少なくともマイクロコードでは多くの既知のエラーが発生する傾向がありますが、これはここでは扱いません。)

もっとあなたのプログラムのCPU劣化について心配しない理由があります:

  • 第1の理由は、最近のCPUが熱くなりすぎると、周波数またはスロットルが減少することです。

    CPUを1年中24時間年中無休で100%使用すると、通常は2週間ごとに1時間だけ使用されるCPUよりも早く死ぬことになります。ところで、それは自動車にも当てはまります。そのような場合にのみ、私はCPU使用率と潜在的なスリープについて自分で考えます。

  • 2番目の理由は、OSからCPUを100%使用するプログラムを作成することが非常に難しいことです(Windowsなど)。さらに、最近のCPU(通常)には少なくとも2〜4コアがあります。したがって、シングルコアCPUを100%使用する傾向がある従来のアルゴリズムは、デュアルコアCPUで50%しかありません(簡略化されていますが、実際のシナリオで見られます)。

  • さらに、オペレーティングシステムはプログラムではなくCPUを制御するため、同じまたはより高い優先度(デフォルト)を持つ他のアプリケーションがある場合、プログラムは可能な限り多くのCPUしか取得しませんが、他のアプリケーションはそうしません。飢えさせる。 (もちろん、これは単純化された理論にすぎません。もちろん、Windows、Linux、その他のマルチタスクは完璧ではありませんが、全体として私はそれを真実と考えています)。

「以前は、集中的または長時間の操作には100%のCPU使用率が望ましいとの印象を受けました。」

はい、これを続けてください。ただし、たとえば、別のプロセスを待機してループする、つまり何もしない場合、そのループでThread.Sleep()を数ミリ秒実行して他のプロセスに余分な時間を与えても、それほど悪くはありません。良いマルチタスクOSには必要ありませんが、これに関するいくつかの問題を解決しました。 Windows 2000の場合(もちろん、たとえば、計算でSleep()を使用するという意味ではありません。

3
Philm

悪魔の提唱者を演じるには:ある意味では、100%の使用率に到達できないプログラムは、摩耗を悪化させる可能性があります。キーストロークを待機して中断されていない限り、ほとんどの場合、ディスクI/Oを待機して中断されている可能性があります。また、ディスクは(依然として通常)大きな機械装置であり、消費電力は言うまでもなく、移動すると機械的な摩耗や衝撃/ジャイロスコープの影響を受けるリスクがあります。

3

このような劣化は理論的に可能であり、 " electromigration "と呼ばれます。エレクトロマイグレーションは温度に依存し、温度が上がると加速します。それが現代のCPUにとって実際的な問題であるかどうかは議論の余地があります。最新のVLSI設計手法はエレクトロマイグレーションを補償し、チップは他の理由で失敗する可能性が高くなります。

そうは言っても、エレクトロマイグレーションは通常の負荷と温度でも起こりますが、適切に設計されたチップが故障するずっと前に時代遅れになるか、または最初に別のメカニズムで失敗します。

エレクトロマイグレーションの速度はチップ温度に依存し、(非常に大まかに)10°Cごとに寿命が倍増します。これは実際、「HTOL」(高温動作寿命)と呼ばれるテストの基礎であり、チップがたとえば125°Cで死ぬのにかかる時間を測定します。 125°Cで動作するチップは、55°Cで動作するチップよりも約100倍速く故障するため、55°Cで少なくとも10年間持続するように設計されている場合、チップは125°Cで1か月以内に故障する可能性があります。 85°Cなどのより妥当な温度で動作している場合でも、そのようなチップは、設計よりも少なくとも5〜10倍早く故障します。

もちろん、CPUは通常、高温を念頭に置いて設計されているため、通常、85°Cで24時間年中無休で100%の負荷動作が可能です。したがって、CPUの「消耗」について心配する必要はなく、ソフトウェアエンジニアリングの観点から100%の負荷が適切かどうかについてのみ心配することをお勧めします。

3
Roman Starkov

クライアントでコードを実行している場合、100%のCPU使用率は、その時間内のクライアントコンピューターを優先度の高いタスク以外には使用できないことを意味します。ほとんどのアプリケーションは通常デフォルトの優先度で実行されるため、それらのコンピューターを使用しているユーザーはコンピューターがフリーズしていることに気づき、自分のコンピューターで他のことを行うことができなくなります。短いバーストについて話しているとしても、何かに取り組んでいるユーザーはそれを気づくでしょう。

他の人が言ったように、あなたはセットアップについてかなり秘密にしていたので、私は確かに言うことはできません。ただし、クライアントがデスクトップコンピューターの場合は、CPU使用率が100%にならないようにしてください。 CPUの劣化が原因ではありませんが、ユーザーの作業中にユーザーを混乱させることは適切ではありません。

1

つまり、状況は次のとおりです。すべてのCPUの100%を使用して5時間実行されるコードがあり、可能な限り最適化されています。マシンの所有者は問題なく、マシンは5時間使用できず、同僚がいます。コンピュータの摩耗が少ないため、すべてのCPUの83.33%を使用して6時間でコードを実行する方が良いと主張しています。

使用しているコンピュータによって異なります。コンピューターの製造元が、24時間365日稼働する科学的な環境で使用されていた安価な家庭用コンピューターの保証期間内に保証修理を拒否したことを知っています。彼らは明らかに、顧客にもっと高価なサーバーまたは「ビジネス」コンピューターを購入して欲しかった。彼らが成功したかどうかはわかりません。

私が所有しているすべてのMacは、ある時点で、一度に何日も100%のCPU使用率でコードを実行しています。 1つのケースでは、ラップトップ用の元の充電器を持っていなかったため、ディスプレイをオフにする必要がありました。4コアとハイパースレッディングでは、供給された充電器よりも多くの電力を使用していました。バッテリーが最大10%になるまで、コンピューターの5%でクロック速度が低下しました。 (ディスプレイをオフにすると、数日間フルスピードで動作しました)。いかなる場合でも、悪影響はありません。

うまく設計されたコンピュータがあれば、あなたは正しいです。不適切に設計された安価なコンピューターがあれば、同僚は正しいかもしれません。一方、待機時間のコストと、交換用のコンピューターを購入するコストを比較することもできます。

1
gnasher729

可能であれば、コードを優先度の低いタスクにして、CPUを多用するスレッドをGUIから切り離してください。その後、使用率は100%になる可能性がありますが、ユーザーはいつでも他のタスクを実行して応答性を維持できます。 CPU自体は、しばらくの間100%の使用率で稼働し続けるように設計されています。そうしないと、解放されません。エンドユーザーがハードウェアに深刻で危険な変更を加えていない限り、何も損傷することはありません。

0
raptortech97