【问题标题】:LU decomposition by parallel MATLAB并行MATLAB的LU分解
【发布时间】:2013-04-30 17:25:42
【问题描述】:

我正在尝试使用并行工具箱在 MATLAB 中计算 NxN 矩阵的 LU 分解。我想使用 parfor 但有一个问题。 for 循环中的步骤是依赖的。这是我的 LU 分解(列)的示例:

function[L, U] = LU_col(A)  

n=size(A,1);
L=eye(n);
U=A    

for k=1:n-1
 L(k+1:n,k) = U(k+1:n,k)/U(k,k);
 for j=k+1:n
   U(k+1:n,j) = U(k+1:n,j) - L(k+1:n,k)*U(k,j);
 end
end

end

你知道如何用 parfor 解决它吗?谢谢

【问题讨论】:

  • 为什么不lu()
  • 我建议使用内在的lu,我相信它是多线程的,将在多核机器上并行执行。

标签: matlab parallel-processing


【解决方案1】:

parfor 的合同包括以下有点模糊的注释“限制适用于循环体中的 STATEMENTS”。这些限制包括任何阻止它成为embarrassingly parallel 的东西。在您的情况下,L 和 U 的每个元素都将被多个循环修改,这意味着 for 循环的迭代需要一些协调,这会触发 Matlab 对使用 parfor 命令的安全检查。

如果您能找到解决方法,而无需对算法进行重大更改,我会感到非常惊讶。

要回显之前的 cmets,内置的lu 命令应该非常有效。作为一个内置的,它的实现很可能是编译的 C 或 Fortan,大量使用了同类最佳的线性代数库。

【讨论】:

    【解决方案2】:

    正如 High Performance Mark 所指出的,MATLAB 的内置 LU 是多线程的,因此几乎可以保证在单台机器上击败您在 PARFOR 中尝试的任何东西的性能。如果您有多台机器,最好的办法是使用distributed 数组。

    matlabpool open mycluster 64
    d = distributed.rand(60000);
    [l, u] = lu(d);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多