我在Matlab中使用Strassen算法的代码运行得太慢了

时间:2014-10-04 21:58:28

标签: performance matlab strassen

这是我第一次提出问题,如果我做错了,请原谅我。

我正在尝试在matlab中对Strassen的算法进行编码,它似乎有效,但它非常慢(取决于截止,对于64x64矩阵,它已经可以占用一秒钟)。

它比天真的实现慢(有3个循环)。有什么我做的可怕的错吗?下面是函数,输入已经是正确的大小(2 ^ n)

function [ D ] = ActualStrassen( PaddedA, PaddedB )

   [m n] = size(PaddedA);

   if n < 5
      D = PaddedA*PaddedB;

   else
      A11 = PaddedA( 1:n/2     , 1:n/2    );
      A12 = PaddedA( 1:n/2     , n/2+1:end);
      A21 = PaddedA( n/2+1:end , 1:n/2    );
      A22 = PaddedA( n/2+1:end , n/2+1:end);
      B11 = PaddedB( 1:n/2     , 1:n/2    );
      B12 = PaddedB( 1:n/2     , n/2+1:end);
      B21 = PaddedB( n/2+1:end , 1:n/2   );
      B22 = PaddedB( n/2+1:end , n/2+1:end);

      M1=ActualStrassen( A11 + A22 , B11 + B22);
      M2=ActualStrassen( A21 + A22 , B11      );
      M3=ActualStrassen( A11       , B12 - B22);
      M4=ActualStrassen( A22       , B21 - B11);
      M5=ActualStrassen( A11 + A12 , B22      );
      M6=ActualStrassen( A21 - A11 , B11 + B12);
      M7=ActualStrassen( A12 - A22 , B21 + B22);

      D11= M1 + M4 - M5 + M7;
      D12= M3 + M5;
      D21= M2 + M4;
      D22= M1 - M2 + M3 + M6;

      D = [D11, D12; D21, D22];

   end
end

0 个答案:

没有答案