在MATLAB中实现矩阵的并行乘法

3

在Matlab中,是否有一种相对简单且透明的方法来并行计算两个大矩阵的乘积?

理想情况下,我希望只需要几行代码就能完成并行乘法,类似于:

    C_1 = A*B        % normal
    C_2 = pmult(A,B) % parallel
    % C_1 and C_2 have the same entries

如果有一种简单的方法来进行并行乘法,是否可以请某人指向代码?如果没有,是否有任何想法,感觉实施并行矩阵乘法算法的最佳方式是什么?
提前感谢 Stackoverflow 社区。
编辑-- 我认为我遇到的问题的一部分是稀疏矩阵的矩阵乘法不会自动并行化;对于密集矩阵,它会自动并行化。新问题:Matlab能否并行计算稀疏矩阵乘法?(CPU 并行化,因为我没有启用 CUDA 图形卡)
2个回答

7

有趣。我之前确信我的乘法不是并行的。最初,我发现使用matlabpool打开本地并行化了乘法。然而,在重新审视简单的*后,我发现这也会导致矩阵并行相乘。感谢您的帮助。 - Malcolm
1
我认为Matlab不会自动并行计算稀疏矩阵之间的乘法。你知道如何让Matlab并行计算稀疏矩阵乘法吗?还是我在错误的方向上努力了? - Malcolm

4

你所说的“parallel”是什么意思?这两种方法都使用显式并行,都需要Parallel Computing Toolbox(第二个还需要可用的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

谢谢。最终我使用matlabpool open local得到了所需内容。有趣的是,在我的Matlab(R2008a)中,distributed.rand无法工作。 - Malcolm
我认为Matlab不会自动并行计算稀疏矩阵之间的乘法。你知道如何让Matlab并行计算稀疏矩阵乘法吗?还是我在错误的方向上努力了? - Malcolm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接