10

一般に、CPU使用率とプログラム内のスレッド数の関係は何ですか。仮定:

  • マルチコアCPU
  • スレッドはまったく同じ仕事をします(キューから同じ作業項目をフェッチして処理すると仮定します)
4

4 に答える 4

18

アプリケーションの性質によって異なります。

  • 主に計算を行うアプリケーション-オーバーヘッドのためにあまり多くのスレッドを生成したくないので、コアごとに1スレッドの比率が妥当な決定であり、すべてのコアを利用したいのです。
  • 主にIO操作(httpリクエストなど)を実行するアプリケーションは、#coresよりもはるかに多くのスレッドを生成し、効率を向上させることができます。ボトルネックはIOリクエストごとの待機時間であり、毎回できるだけ多くの情報を取得する必要があるためです。あなたは待つ必要があります。

とはいえ、取得しようとしているCPU使用率は、依然として多くの要因(IO、同期、プログラム内の非並列部分)に依存しています。

アプリケーションの速度に関心がある場合は、アムダールの法則を常に覚えておいてください。アムダールの法則により、動作中のコアの数が無限であっても、アプリケーションにかかる時間(スピードアップ)に厳密な制限が与えられます。

于 2012-10-15T09:43:22.820 に答える
5

明らかな関係を除いて、そのような一般的な関係はありません。

  • アプリケーションは、使用可能なコアの数に実行中の(壁掛け時計)秒の数を掛けた数よりも多くのCPU時間(CPU秒)を使用することはできません。
  • 1つのスレッドが1秒あたり1秒を超えるCPUを使用することはできません。

マルチスレッドアプリケーションが実際に使用するCPUの量は、主にアプリケーションの性質と、アプリケーションの実装方法によって異なります。

  • 各スレッドによって実行される計算で、ロックやメモリアクセスなどについて他のスレッドとの競合が発生しない場合は、使用可能なCPUリソースの理論上の制限に近づくことができるはずです。

  • 競合は、CPUの有効使用率を、場合によっては劇的に低下させる傾向があります。

しかし、どれだけスピードアップできるかを示す一般的な公式はありません。

于 2012-10-15T09:44:30.160 に答える
1

関係がないか、簡単ではないと思います。スレッドが実行しているジョブによって異なります。1つのスレッドを持つプログラムはCPUの100%を消費する可能性があり、スレッドが多いプログラムはより少ない消費量になる可能性があります。

スレッドと完了したジョブの間の最適化された関係を探している場合は、ケースを調査し、おそらく経験的な解決策を見つける必要があります。

于 2012-10-15T09:43:09.177 に答える
1

他の回答がすでに述べているように、「それは依存します」。理想的な世界では、nコアの場合、各コアの個別のスレッドで同じジョブを実行すると、ファクターnのスループットが得られます(スレッドを同期する必要があるため、すでに誤った仮定が含まれています)。同じキューから読み取ります)。

ディスラプターを理解する、ハードコア並行性の初心者向けガイドでは、タスクを並列化するときに考慮する必要のあるいくつかの優れた例を示し、並列化を試みると実行時間が長くなる場合も示しています。

于 2012-10-15T09:51:53.267 に答える