在matlab(并行)中使用spmd将函数应用于向量的部分

时间:2015-10-02 23:22:25

标签: matlab parallel-processing spmd

我在MatLab中使用并行计算工具箱。

任务

我有一个矢量v。我有4个核心。 我想在每个核心上拆分向量(因此每个核心处理向量的1/4,假设长度(v)可被4整除)并在每个部分上应用函数f()。

所以核心1: f1 = f(v属于第1部分)

和核心2: f2 = f(v属于第2部分)

等等。

然后我想收集结果,以便在此之后我有: f =“包含f1的所有元素的一个向量,以及f2的所有元素等” 在主核心上(如果你愿意,可以使用root,也许MatLab称之为“客户端”,但我不确定)。

尝试

testEJBContainer = EJBContainer.createEJBContainer();

并吗

这不能按预期工作。我确实得到了正确的f大小,但不知怎的,似乎发生了“lpv”与每个核心相同的部分。但我不确定这是不是问题。

帮助吗

我没有做过很多MatLab并行编程。我将如何完成任务?

1 个答案:

答案 0 :(得分:0)

我认为您的代码非常接近,但我认为您不需要f_tmp。这是一个例子:

v = 1:10;
spmd
    v_dist = codistributed(v);
    lpv = getLocalPart(v_dist);
    f1 = sqrt(lpv);
    v2 = codistributed.build(f1, getCodistributor(v_dist));
end
assert(isequal(gather(v2), sqrt(v)));