1

我想在 Matlab 中并行运行矩阵乘法的代码。我已经为它编写了顺序代码。我已经使用“spmd”方法并行运行它。但是,并行代码的执行时间比顺序代码多。我的座右铭是减少并行运行代码的执行时间。我不想使用内置函数进行乘法运算,因为我想删除 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 用于顺序,time2 用于并行

矩阵

time1 =

0.0041

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

time2 =

0.6950

>> 
4

1 回答 1

1

扩展评论而不是答案:

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