は、私はこれに似ている、という問題がある。Pythonのマルチプロセッシングと共有numpyの配列
import numpy as np
C = np.zeros((100,10))
for i in range(10):
C_sub = get_sub_matrix_C(i, other_args) # shape 10x10
C[i*10:(i+1)*10,:10] = C_sub
ので、どうやら各部分行列を独立に計算することができるので、シリアル計算としてこれを実行する必要はありません。 マルチプロセッシングモジュールを使用して、forループのプロセスを4つまで作成したいと思います。 私はマルチプロセッシングに関するいくつかのチュートリアルを読んだが、これを使って自分の問題を解決する方法を理解することはできなかった。あなたの助けのための
おかげ
:あなたは、プレーン
map
でstarmap
を置き換えることができますが、その後、あなたは、単一のパラメータを取る関数を提供する必要があります。マルチプロセッシングはデータをシリアル化*してサブプロセスに送信し、それをデシリアライズして計算を実行し、結果をシリアル化してメインプロセスに戻し、最後にデシリアライズします。シリアライゼーション/デシリアライゼーションにかなりの時間がかかり、プロセス間の通信もそれほど高速ではありません。 'get_sub_matrix'が文字通りわずかな行列アクセスであるなら、あなたはどんな高速化も得られません。 – Bakuriuこれは説明のためのものです。最終的に私の行列はおよそ100000 x 20000の大きさになりますが、get_sub_matrix_Cのほうが遅いのはもっと重要ですし、私はその関数をもっと速くすることはできません。 – RoSt
get_sub_matrix_Cはすべてのマトリックスまたはサブマトリックスにアクセスする必要がありますか?なぜなら、すべてが必要な場合、各サブプロセスのビッグ・マトリックスの1つのコピーの直列化は、非常に時間がかかり、メモリーを消費するからです。 – eguaio