一般に、CPU使用率とプログラム内のスレッド数の関係は何ですか。仮定:
- マルチコアCPU
- スレッドはまったく同じ仕事をします(キューから同じ作業項目をフェッチして処理すると仮定します)
一般に、CPU使用率とプログラム内のスレッド数の関係は何ですか。仮定:
アプリケーションの性質によって異なります。
とはいえ、取得しようとしているCPU使用率は、依然として多くの要因(IO、同期、プログラム内の非並列部分)に依存しています。
アプリケーションの速度に関心がある場合は、アムダールの法則を常に覚えておいてください。アムダールの法則により、動作中のコアの数が無限であっても、アプリケーションにかかる時間(スピードアップ)に厳密な制限が与えられます。
明らかな関係を除いて、そのような一般的な関係はありません。
マルチスレッドアプリケーションが実際に使用するCPUの量は、主にアプリケーションの性質と、アプリケーションの実装方法によって異なります。
各スレッドによって実行される計算で、ロックやメモリアクセスなどについて他のスレッドとの競合が発生しない場合は、使用可能なCPUリソースの理論上の制限に近づくことができるはずです。
競合は、CPUの有効使用率を、場合によっては劇的に低下させる傾向があります。
しかし、どれだけスピードアップできるかを示す一般的な公式はありません。
関係がないか、簡単ではないと思います。スレッドが実行しているジョブによって異なります。1つのスレッドを持つプログラムはCPUの100%を消費する可能性があり、スレッドが多いプログラムはより少ない消費量になる可能性があります。
スレッドと完了したジョブの間の最適化された関係を探している場合は、ケースを調査し、おそらく経験的な解決策を見つける必要があります。
他の回答がすでに述べているように、「それは依存します」。理想的な世界では、nコアの場合、各コアの個別のスレッドで同じジョブを実行すると、ファクターnのスループットが得られます(スレッドを同期する必要があるため、すでに誤った仮定が含まれています)。同じキューから読み取ります)。
ディスラプターを理解する、ハードコア並行性の初心者向けガイドでは、タスクを並列化するときに考慮する必要のあるいくつかの優れた例を示し、並列化を試みると実行時間が長くなる場合も示しています。