MATLABの平行行列乗算
-
26-10-2019 - |
質問
MATLABの2つの大きなマトリックスを並行して乗算するための比較的簡単な実装や透明な方法はありますか?
理想的には、この並列乗算をせいぜい数行のコードで、おそらく次のようなもので実行したいと思います。
C_1 = A*B % normal
C_2 = pmult(A,B) % parallel
% C_1 and C_2 have the same entries
このパラレルの乗算を簡単に行う方法がある場合、誰かが私にコードを教えてください。そうでない場合、MATLABに並列マトリックス増殖アルゴリズムを実装する最良の方法であると感じるものについて、誰かがアイデアを持っていますか?
事前に、素晴らしいStackoverflowコミュニティ。
編集 - 私が遭遇していた問題の一部は、マトリックスの乗算は スパースマトリックス 自動的に平行化されていません。それは自動的に平行化されます 密なマトリックス。 新しい質問:MATLABはスパースマトリックスの乗算を並行して行うことができますか? (CPUの並列化は、CUDA対応のグラフィックカードを持っていないため)
解決
Matlabは、おそらくその暗黙のマルチスレッドサポートを介してすでにこれを行っています。見る http://www.mathworks.com/support/solutions/en/data/1-4pg4an/?solution=1-4pg4an;オペレーター。些細な並列化可能な操作は、MATLABによってすでに行われています。マルチコアマシンで実行するだけです。
他のヒント
並行とはどういう意味ですか?これらの2つのアプローチは明示的な並列性を使用し、どちらも必要です 並列コンピューティングツールボックス (2番目にはaも必要です 有能なGPU).
オプション1:MPI並列性
matlabpool open local
D = distributed.rand(2000); % distributed across workers of matlabpool
R = D * D; % mtimes overloaded to compute in parallel
オプション2:GPU並列性
G = gpuArray(rand(2000)); % place data on the GPU
G2 = G * G; % operate on it in parallel
所属していません StackOverflow