【发布时间】:2016-06-11 19:12:09
【问题描述】:
我有三个函数(qrcalc、zcalc、pcalc),我想并行运行三个独特的输入集。这是我的尝试,但它不起作用:
function [outall]=parallelfunc(in1,in2,in3)
if parpool('size') == 0 % checking to see if pool is already open
A=feature('numCores');
parpool('local',A);
else
parpool close
A=feature('numCores');
parpool('local',A);
end
spmd
if labindex==2
out1=qrcalc(in1);
elseif labindex==3
out2=zcalc(in2);
elseif labindex==4
out3=pcalc(in3);
end
outall=[out1;out2;out3];
end
错误:使用并行尝试时出错>(spmd 正文)(第 20 行)错误 在工人 3 上检测到。UndefinedFunction 错误被抛出 'out1' 的工人。这可能是因为包含“out1”的文件是 工人无法访问。为此指定所需的文件 并行池使用命令:addAttachedFiles(pool, ...)。见 parpool 的文档以获取更多详细信息。
parallelattempt 中的错误>(spmd)(第 11 行)spmd
parallelattempt 中的错误(第 11 行)spmd
对于如何做到这一点有什么建议吗?
这是不需要自定义函数的代码版本。因此我将它们替换为zeros、magic 和ones:
function [outall]=parallelattempt(in1,in2,in3)
poolobj = gcp;
addAttachedFiles(poolobj,{'zeros.m','ones.m','magic.m'})
spmd
if labindex==2
out1=zeros(in1);
elseif labindex==3
out2=magic(in2);
elseif labindex==4
out3=ones(in3);
end
outall=[out1;out2;out3];
end
【问题讨论】:
-
究竟是什么不起作用?我在这里看到了几件可能有问题的事情。包含错误消息和/或解释什么不起作用是有益的。
-
嗨@Matt,我将错误添加到主要问题中,并使用了零、魔法和一的修改函数。并且还更早地启动了并行池。
标签: matlab parallel-processing