私は計算しようとしている金額があり、コードを並列化するのが難しいです。私が並列化しようとしている計算は複雑です(numpy配列とscipy sparse行列の両方を使います)。それは数が少ない配列を吐き出し、私は約1000の計算から出力配列を合計したいと思います。理想的には、私はすべての反復にわたって実行中の合計を保持します。しかし、私はこれを行う方法を理解することができませんでした。python numpyで合計計算を並列化する方法は?
これまで、私はjoblibのParallel関数とpythonのマルチプロセッシングパッケージでpool.map関数を使ってみました。これらの両方のために、私はnumpy配列を返す内部関数を使用します。これらの関数はリストを返します。リストはnumpy配列に変換され、さらに合計されます。
しかし、joblib Parallel関数がすべての反復を完了すると、メインプログラムは実行されません(元のジョブは0%CPUを使用して中断状態にあるように見えます)。 pool.mapを使用すると、すべての反復が完了した後にメモリエラーが発生します。
単純に実行中の配列の合計を並列化する方法はありますか?
を編集します。目標は、並行して以外は次のようにすることです。
def summers(num_iters):
sumArr = np.zeros((1,512*512)) #initialize sum
for index in range(num_iters):
sumArr = sumArr + computation(index) #computation returns a 1 x 512^2 numpy array
return sumArr
となります。最小限のコード例を投稿してください。畳み込みをしようとしていますか? – Simon
いいえ、私は畳み込みをしていません。私は約1000回画像を回転しています。回転ごとに結果を合計する必要があります。 pool.mapについては、私はちょうど を使用しています。 'outputArr = np.array(pool.map(parloop、range(num_views))' '' parloop'はnumpy配列を返します。 – Kevin
これはすでに並行しているのでしょうか? "numpyは、あなたが行列のドットプロダクトをしたいことを知っているので、" BLAS "(基本線形代数サブルーチン)の一部として得られた最適化された実装を使用することができます。...多くのアーキテクチャは、マルチコアマシンあなたのnumpy/scipyがこれらのいずれかを使ってコンパイルされている場合、dot()は何もしなくても**(これが速ければ)並列に計算されます** " www.scipy.org/ParallelProgramming – endolith