3 つの異なる numpy 2D 配列で大規模な計算を順番に実行しています。配列は巨大で、それぞれ 25000x25000 です。各計算にはかなりの時間がかかるため、サーバーの 3 つの CPU コアで 3 つの計算を並行して実行することにしました。標準のマルチプロセッシング ガイドラインに従って、2 つのプロセスとワーカー関数を作成しています。2 つの計算は 2 つのプロセスを介して実行され、3 つ目の計算は個別のプロセスなしでローカルで実行されます。次のようなプロセスの引数として巨大な配列を渡しています。
p1 = Process(target = Worker, args = (queue1, array1, ...)) # Some other params also going
p2 = Process(target = Worker, args = (queue2, array2, ...)) # Some other params also going
ワーカー関数は、次のようにキューに追加されたリストで 2 つの numpy ベクトル (1D 配列) を返します。
queue.put([v1, v2])
私は使用していませんmultiprocessing.pool
しかし驚くべきことに、スピードアップは得られず、実際には 3 倍の速度で実行されています。大きな配列を渡すのに時間がかかりますか? 何が起こっているのか理解できません。配列を渡す代わりに共有メモリ オブジェクトを使用する必要がありますか?
誰かが助けてくれれば感謝します。
ありがとうございました。