matlab中矩阵乘法的并行代码

时间:2013-04-17 05:51:44

标签: matlab parallel-processing

我想在Matlab中并行运行矩阵乘法代码。我已经为它编写了顺序代码。我使用'spmd'方法并行运行它。但是,并行代码的执行时间多于顺序代码。我的座右铭是减少并行运行代码的执行时间。 我不想使用Inbuilt函数进行乘法,因为我想删除for循环中的依赖项并运行它。我该怎么做?? 我试过停止代码.. 请帮帮我......

a=[1,2,3,4;5,6,7,0;8,9,10,11;12,13,14,15];
b=[1,2,3,4;5,6,7,0;8,9,10,11;12,13,14,15];
warning off all;      
%Sequential code
tic
  for i=1:4
  for j=1:4
       sum=0;
       for k=1:4
           sum=sum+(a(i,k)*b(k,j));
       c(i,j)=sum;
       end;
  end;
  end;
  time1 =toc

  %parallel code
  matlabpool('open');
tic
spmd
for i=1:4
  for j=1:4
       sum=0;
       for k=1:4
           sum=sum+(a(i,k)*b(k,j));
       c(i,j)=sum;
       end;
  end;
  end;
 end;
time2 =toc

我得到的输出是:time1为sequencecial,time2为parallel

  
    

矩阵

  
time1 =

0.0041

Starting matlabpool using the 'local' profile ... connected to 2 labs.

time2 =

0.6950

>> 

1 个答案:

答案 0 :(得分:1)

扩展评论而不是答案:

  • 您的测试矩阵非常小;任何可能的执行加速都将被启动并行执行池的开销所淹没;
  • 您似乎没有初始化输出矩阵c;已知代码建议动态创建矩阵比更新先前创建的矩阵要慢得多。请尝试c = zeros(grows,ncols)开始。
  • 我相信Matlab的最新版本将自动进行多线程直接矩阵乘法,你面临着一个真正的挑战,试图编写一个与本机速度相匹配的函数。