- ベストアンサー
CPUの使用率と計算量(計算結果の量)の関係
とある同じプログラム2本を、Win10で動かしています。 1つだけプログラムを動かしたときは、タスクマネージャーで見るとCPU使用率が50%で1分に1個結果が出ています。 が、2本動かすとCPUの使用率は97%で、それぞれの計算結果は0.75個ずつ結果が返ってきます。単純計算で1.5倍の結果しか得られません。 CPUの使用率から言えば、もう少し結果が返ってきそう、例えば1.9個くらい得られそうなのですが・・・・。 CPU使用率と計算量には比例関係はないんでしょうか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
単純計算は無理です。 ソフトによって1CPUしか使えないのもあれば4CPU以上使えるものもあります。またCPU数がいくら多くても、メモリは1つですし、HDDやSSDも一つです、つまり同時に書き換えることは無理ですから、交互ということになります。 またバックグランドでアンチウイルスが動いている場合など、バックグラウンド処理も影響します、CPUと言っても2CPUのものから64CPU、128(仮想CPU=スレッド)というものまであります。 またタスクマネージャーのパフォマンスでCPUの使用率を見る場合、表示されているグラフの上で、右クリック→グラフの変更→論理プロセッサにすれば各CPUがどの様な動きをしているか判ります、また具体的にどんな物を処理しているかは、Process Explorer https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer を使えば判りますが、同時に数百の処理をCPUは行っているわけで、その中の2つの処理の時間がと言っても、1が2になる訳がありません。
その他の回答 (6)
- i-q
- ベストアンサー率28% (988/3463)
(A)低稼働のバックグラウンド (B)OS本体 (C)フル稼働のアプリ Cが複数あると 切替に手間取って遅くなるのでは? 1つのプログラム内で計算2つやれば1.9倍近くに なるのではm(__)m
お礼
回答いただけてありがとうございます。 1,9倍にならなくて・・・。
- SPROCKETER
- ベストアンサー率26% (2131/8006)
2コア以上のマルチコアCPUで計算し、アクセスタイムの競合が0だったら、CPU使用率100%で1分間に1個の答えが出るはずですが、実際には理想状態になりません。2コアCPUで並列処理すると1.5倍。4コアCPUで並列計算すると2倍が限界です。 全く同じプログラムを動かした時に、4コア以上のマルチコアCPUで、CPU、キャッシュ、メモリーの競合が一つも無い状態であれば、CPU使用率が高くなるだけで、結果が出る時間は同じ1分間になるはずですが、そうなっていないのでしょうね。 何で2コアでは1.4倍で、4コアでは2倍なのかと言えば、コア数の平方根でしか処理性能が上がらないからです。実際には、必ず競合する部分があるので、2倍よりも少し落ちるはずです。 全く同じプログラムを動かす時には、1台のパソコンではなくて、2台のパソコンで別々に動かした方が理想状態になるので、1分間で結果が出る事になります。
お礼
回答いただけてありがとうございます。 2台目は用意できないので・・・・。むつかしそうですね。
- Eureka_
- ベストアンサー率41% (5096/12301)
多コアCPUで多く見られる「1CPUコアで2スレッドを並列実行できる」ものの場合、基本的には「CPUコアで行っている処理のうち、命令スケジュールの都合などで手が空いている部分があって、そこに別の処理をスケジュールしてねじ込めるなら2スレッド目として並列実行させる」ような処理フローになっています。 この2スレッド目を流し込む機構も歴史を重ねてだいぶ洗練されていますが、あくまでメインの処理が手空きになったところを間借りしてねじ込んでいるだけですからメイン処理と同等の効率は絶対に出ません。 Windowsのリソース管理はわりといいかげんで、「2スレッド実行できるなら1スレッドだけ動いてるときは負荷率50%だよね?」とアバウトに算定してるだけですから、表面上50%に見えててもCPUの機能としては6~70%くらいは使われてると考えて間違いないでしょう。
お礼
回答いただけてありがとうございます。 勉強になりました。
- notnot
- ベストアンサー率47% (4901/10362)
処理によります。 CPUだけがネックになっている処理なら、2倍近くになると思います。 ディスクIOや、メモリ使用もネックになるなら、1倍強でしょう。 ディスクをNVMeのSSDにしたり、物理メモリを2倍にすれば、パフォーマンスも2倍に近づくでしょう。
お礼
回答いただけてありがとうございます。
- teka0001
- ベストアンサー率0% (0/4)
お疲れ様です。 CPU使用率(全コアの平均)の計算方法になります。 (1.0-(CPUアイドル時間÷全時間)÷コア数)×100。 注意 OSから取得する情報のため,仮想環境の場合,誤差が大きくなることがあります。 ・収集間隔当たりの値を表示します。 2つ動かすことで計算結果が落ちるのはやはりCPU性能にもよりますし、計算に使うCPU使用が公平ではないということです。 同じような結果又は結果を上げたければ別途PCを準備された方が良いと思われます。
お礼
回答いただけてありがとうございます。 勉強になりました。
- sknbsknb2
- ベストアンサー率38% (1158/3037)
CPUの中は、実際に計算する機能の他に、データを入出力する機能、メモリとデータをやり取りする機能等があって、計算だけにすべての能力を使っているわけではありません。さらに入出力は一つしかないので、二本同時に動かすということは、片方がデータの入出力をしている時は、もう片方は待っていなければなりません。 ということで、CPU使用率の中には、計算以外に使われる部分が動いている時間や、待ち時間も含まれているので、倍の効率にはなりません。
お礼
回答いただけてありがとうございます。 勉強になりました。
お礼
回答いただけてありがとうございます。 勉強になりました。 また素敵なサイトの紹介ありがとうございます。