2

私は非常に並列的なソフトウェアを実行しています。実行する必要のあるコマンドは互いにまったく依存しないものが約400あるので、それらをフォークして期待します。CPUが増えると、単位時間あたりに実行されるプロセスが増えることを意味します。

コード:

foreach cmd ($CMD_LIST)
    $cmd &    #fork it off
end

とてもシンプルです。これが私のテスト結果です:

1 CPUでは、これには1006秒、つまり16分46秒かかります。

10個のCPUを使用すると、これには600秒または10分かかりました。

なぜ時間がかかるのは(大まかに)10で割らないのですか?ここでだまされた気がする=(

編集-もちろん、私はあなたが知りたいと思う追加の詳細を提供したいと思っていますが、最も簡単な言葉でこれが私がしていることなので、何が関連しているかわからないだけです。

4

1 に答える 1

3

プロセスは100%CPUバウンドであると想定しています。

プロセスがディスクまたはネットワークI/Oを実行する場合、ボトルネックはそれらの操作にあり、並列化できません(たとえば、1つのプロセスが100k / sでファイルをダウンロードし、2つのプロセスがそれぞれ50k / sでダウンロードするため、何も表示されません。まったく改善され、さらにオーバーヘッドのためにパフォーマンスが低下する可能性があります)。

参照:Amdahl's_law-これにより、並列化可能な部分と並列化不可能な部分の比率を把握して、タスクを並列化するときのパフォーマンスの向上を見積もることができます)

于 2012-11-06T22:49:29.013 に答える