我尝试在群集的不同机器上运行简单任务。 我的配置已经过验证(没关系)。当我在'本地'配置上运行代码 时,它可以工作。但是,当我使用群集 配置,我得到以下错误:群集上的Parfor:无法识别功能
错误使用parallel_function(线598) 未定义功能“lafunc”类型“双”的输入参数。 错误堆栈:(无远程错误堆栈) 错误petittest(6号线) - »(petittest是我的程序的名字) PARFOR吧= 1:200
我尝试修改使用的代码 “dfeval”而不是parfor循环, 但我得到了同样的结果(无法识别函数lafunc)。
如何让群集中的其他工作人员识别我手动定义的函数 lafunc?
的代码如下:
%%%%%%%%%%%%%
laconfig='/home/matlab/fred/LACED_DC1.mat';
setmcruserdata('ParallelConfigurationFile',laconfig);
matlabpool open
parfor it=1:200
yo=lafunc(it);
disp(yo)
end
matlabpool close
%%%%%%%%%%%
其中lafunc功能
%%%%%%%%%%%%%%
function [y]=lafunc(x)
y=x*x;
end
%%%%%%%%%%%%%%%%%%%%%%
非常感谢,每一块信息是对我来讲很有用!
大致上,您的集群如何安排?你在头节点上运行这个代码吗?如果您将内置函数替换为lafunc,parfor是否可以工作? – 2012-02-14 17:21:31
@IanHincks是的,我们正在集群头节点上运行程序。 parfor可以使用内置函数,所以我相信这与其他工作人员看不到位于主节点上的手工功能有关。 P.S.我发现使用dfeval的'FileDependencies'选项可以做类似的事情,但我想知道是否可以使用parfor来完成。非常感谢! – 2012-02-14 18:24:04
我猜你的节点不共享一个通用的文件系统,所以在他们的路径中没有函数lafunc。因此不知何故,您需要将该函数放到每个节点的文件系统上,或者在parfor循环之上声明函数内联('lafunc = @(x)x * x;')。或者将parfor循环放入函数中,并将lafunc作为子函数。这些都是我现在可以想到的所有选项。 – 2012-02-14 19:09:09