Matlab 群集上的Parfor:无法识别函数

Matlab 群集上的Parfor:无法识别函数,matlab,parallel-processing,cluster-computing,Matlab,Parallel Processing,Cluster Computing,我尝试在集群的不同机器上运行一个简单的任务。 我的配置已经过验证(没问题)。当我运行代码时 在“本地”配置上,它可以工作。但是当我使用集群时 配置时,我得到以下错误: 使用并行_函数时出错(第598行) 类型为“double”的输入参数的未定义函数“lafunc”。 错误堆栈:(无远程错误堆栈) petittest中出错(第6行)--»(petittest是我的程序名) 它的平均值=1:200 我试图修改代码以使用“dfeval”而不是parfor循环, 但我得到了同样的结果(无法识别函数laf

我尝试在集群的不同机器上运行一个简单的任务。 我的配置已经过验证(没问题)。当我运行代码时 在“本地”配置上,它可以工作。但是当我使用集群时 配置时,我得到以下错误:

使用并行_函数时出错(第598行) 类型为“double”的输入参数的未定义函数“lafunc”。 错误堆栈:(无远程错误堆栈) petittest中出错(第6行)--»(petittest是我的程序名) 它的平均值=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

%%%%%%%%%%%%%%%%%%%%%%

非常感谢,每一条信息都对我有用

确保在同一工作目录中运行的所有工作节点上的MATLAB脚本,以及包含所需函数的其他目录都包含在该路径中。因此,您可以在脚本中专门设置工作目录和路径:

matlabpool open
cd workdir
addpath funcdir
...
运行
matlabpool open
后,它将在所有辅助对象上运行所有与路径相关的命令。看


您还可以使用
'FileDependencies'
参数打开matlabpool,以便所有工作人员都知道在哪里查找所需的文件。请参阅文档。

您的集群大致是如何安排的?您是否在head节点上运行此代码?如果您将内置函数而不是lafunc,parfor是否有效?@IanHincks是的,我们正在集群的头节点上运行该程序。parfor确实使用内置函数,因此我认为这与其他工作人员看不到位于主节点上的手工函数有关。另外,我发现使用dfeval的“FileDependencies”选项可以做类似的事情,但我想知道是否可以使用parfor来做。谢谢!我猜您的节点不共享一个公共文件系统,因此在它们的路径中没有函数lafunc。因此,您需要以某种方式将该函数放到每个节点的文件系统中,或者内联声明该函数(
lafunc=@(x)x*x;
,位于parfor循环之上)。或者将parfor循环放在函数内部,并将lafunc作为子函数。这些就是我现在能想到的所有选项。@IanHincks:最后,在另一个答案中给出的建议奏效了!谢谢你的帮助!matlabpool中的“文件依赖项”已成功。非常感谢,这将帮助这里的很多人!!很抱歉提醒您,但请不要忘记接受/支持您认为有用的答案。