群集上的Parfor:无法识别功能

Fré*_*din 2 parallel-processing matlab cluster-computing

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

使用parallel_function时出错(第598行)未定义函数'lafunc'用于'double'类型的输入参数.错误堆栈:(没有远程错误堆栈)petittest中的错误(第6行) - »(petittest是我程序的名称)parfor it = 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

%%%%%%%%%%%
Run Code Online (Sandbox Code Playgroud)

lafunc函数的位置

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

function [y]=lafunc(x)
y=x*x;
end

%%%%%%%%%%%%%%%%%%%%%%
Run Code Online (Sandbox Code Playgroud)

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

yuk*_*yuk 7

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

matlabpool open
cd workdir
addpath funcdir
...
Run Code Online (Sandbox Code Playgroud)

运行后matlabpool open,它将在所有工作程序上运行所有与路径相关的命令.看到这里.

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