首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SPMD的运行时间大于顺序matlab?

为什么SPMD的运行时间大于顺序matlab?
EN

Stack Overflow用户
提问于 2017-01-14 19:14:28
回答 1查看 196关注 0票数 0

我使用spmd同时计算了两段代码。我使用的计算机有一个8 cores.which的处理器,这意味着通信开销几乎为零!

我比较了这个spmd块的运行时间以及spmd之外的相同代码和tic & toc

当我运行代码时,并行版本的代码要比顺序形式花费更多的时间。

知道为什么会这样吗?

下面是我所说的示例代码:

代码语言:javascript
复制
tic;
spmd
    if labindex == 1
       gamma = (alpha*beta);
    end
    if labindex == 2
        for t = 1:T,
            for i1=1:n
                for j1=1:n
                    kesi(i1,j1,t) = (alpha(i1,t) + phi(j1,t));
                end;
            end;
        end;
    end
end
t_spmd = toc;


tic;
    gamma2= (alpha * beta);
for t = 1:T,
    for i1=1:n
        for j1=1:n
            kesi2(i1,j1,t) = (alpha(i1,t) + phi(j1,t));
        end;
    end;
end;
t_seq = toc;
disp('t spmd : ');disp(t_spmd);
disp('t seq : ');disp(t_seq);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-16 08:14:42

这里有两个原因。首先,使用if labindex == 2意味着spmd块的主体仅由一个工作人员执行-这里没有并行性。

其次,重要的是要记住(默认情况下)并行池工作人员在单个计算线程模式下运行。因此,在使用本地工作人员时,只有当您的并行结构的主体不能通过MATLAB隐式多线程时,才能期望加速。

最后,在这种特殊情况下,最好使用bsxfun (或R2016b或更高版本中的隐式扩展),如下所示:

代码语言:javascript
复制
T       = 10;
n       = 7;
alpha   = rand(n, T);
phi     = rand(n, T);
alpha_r = reshape(alpha, n, 1, T);
phi_r   = reshape(phi, 1, n, T);
% In R2016b or later:
kesi    = alpha_r + phi_r;
% In R2016a or earlier:
kesi    = bsxfun(@plus, alpha_r, phi_r);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41653937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档