【发布时间】:2012-02-14 17:10:41
【问题描述】:
我尝试在集群的不同机器上运行一个简单的任务。 我的配置已经过验证(没关系)。当我运行代码时 在“本地”配置上,它可以工作。但是当我使用集群时 配置,我收到以下错误:
使用 parallel_function 时出错(第 598 行) 'double' 类型的输入参数的未定义函数 'lafunc'。 错误堆栈:(无远程错误堆栈) 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
%%%%%%%%%%%
lafunc 函数在哪里
%%%%%%%%%%%%%%
function [y]=lafunc(x)
y=x*x;
end
%%%%%%%%%%%%%%%%%%%%%%
非常感谢,每一条信息都对我有用!
【问题讨论】:
-
您的集群大致是如何安排的?您是否在头节点上运行此代码?如果您放置内置函数而不是 lafunc,parfor 是否有效?
-
@IanHincks 是的,我们正在集群的头节点上运行程序。 parfor 确实可以使用内置函数,所以我认为这与其他工作人员看不到位于主节点上的手工制作函数这一事实有关。附言我发现使用 dfeval 的“FileDependencies”选项可以做类似的事情,但我想知道是否可以用 parfor 来做。非常感谢!
-
我猜你的节点不共享一个公共文件系统,所以在他们的路径中没有函数 lafunc 。因此,您需要以某种方式将该函数放到每个节点的文件系统上,或者将函数声明为内联(parfor 循环上方的
lafunc=@(x) x*x;)。或者将 parfor 循环放在函数内部,并将 lafunc 作为子函数。这些是我现在能想到的所有选项。 -
@IanHincks :最后在另一个答案中给出的建议奏效了!感谢您的帮助!
标签: matlab parallel-processing cluster-computing