IOで50%を費やすプログラムにコアを追加することで何かを得ることはできますか?私は完全にIOバウンドとCPUバウンドの簡単なケースを得ますが、各スレッドがIOを待っている時間の一部を費やすシナリオでは完全にはわかりません。スレッド数が50%のIO競合が発生しているプログラムの実行時間が増加すると、コア数が増加しますか?
私の直感は、コアを追加することによって、各スレッドがIOの競合を増やすということです。だから今、各スレッドは、IOを待っている時間の60%を費やしているかもしれません。その結果、純中性または正味ネガティブネガティブです。
EDIT
Threads: Fast IO - Slow CPU
Threads: Balanced IO and CPU
これらは私がスレッド/コアを追加すると、IO待ち時間にどのように影響するかを理解しようとしています簡単な状況のいくつかの例の図です。
私が見ることは、タスクIO時間とタスクCPUの比率が、追加のスレッドの有用性を決定することです。たとえば、IO = 10ms、CPU = 40msの場合、合計タスク時間は50msです。 50ms/10ms = 5であるため、この状況は5つのスレッドの恩恵を受ける可能性がありますが、パフォーマンスが向上しない可能性があります。
これは間違いありませんか?
プログラムがI/Oで50%を費やしているスレッドを1つ持っている場合、別のスレッドを追加すると2倍の速さになります。 IOの待機時間は、もう一方の計算時間と重複します。 3番目のスレッドを追加してもそれが速くなるわけではありません。 –
@HansPassant私は少し混乱しています。 10スレッド/コアが稼働していて、IOの待機時間の50%を費やした場合はどうなりますか?スレッド/コアを20倍にすると、実行時間が半分になりますが、それ以上のコアは役に立たないでしょうか? – nathan
次に、適切な結論はベンチマークにバグがあるか、誰かが宿題を完成しようとしていることです。あなたは宿題をしていることを自分で考えなければなりません。 –