我正在尝试在大型集群上运行并行作业;所有代码和函数在我的计算机上运行良好(Mac OS 10.7和Matlab v7.13.0.564(R2011b)),但集群上的某些功能不起作用(unix-redhat 5.5 - kernel = 2.6.18-238.12.1.el5 Matlab v7.13.0.564(R2011b)
以下是一系列在我的计算机上无错误运行且在群集上失败的命令。函数add2nums
位于子目录./lib
中,并在下面进行了说明。
function out = add2nums(num1, num2)
out = num1+num2;
end
发生了什么以及如何解决?
>> addpath('./lib')
>> which add2nums
/My_Matlab_Path/lib/add2nums.m (matlab sees the function on my machine and on unix cluster)
>> sched = findResource('scheduler','type','local');
>> job = createParallelJob(sched,'configuration','local');
>> task = createTask(job,@add2nums,1,{[1 2],[3 4]},'CaptureCommandWindowOutput',true);
>> addpath('./lib')
>> submit(job)
>> waitForState(job)
>> task
task =
Task ID 1 from Job ID 19 Information
====================================
State : finished
Function : @add2nums
StartTime : Tue Aug 07 10:27:44 MDT 2012
Running Duration : 0 days 0h 0m 1s
- Task Result Properties
ErrorIdentifier : MATLAB:UndefinedFunction
ErrorMessage : Undefined function 'add2nums' for input arguments of type 'double'.
答案 0 :(得分:1)
找到解决方案;在这种情况下,它可能特定于我正在研究的unix系统架构。我从一个文件系统提交作业,它们在一个单独的(临时)目录中运行 - 在一个单独的文件系统上。我认为这些实际上是不同建筑物中的不同硬件,但我并不积极。
分辨率是添加以下行:
p ='PATH_TO_LOCAL_DIRECTORY_OF_FUNCTIONS';
集(作业, 'FileDependencies',{P});
之前我曾尝试设置FileDependencies属性 - 但之前我使用的路径无论出于何种原因,matlab工作者都无法使用。我的解决方案是将整个子功能目录复制到运行unix作业的远程(临时)目录;然后,只要'FileDependencies'属性指向它,这个远程目录就可以在matlab工作者本地访问和显示。
答案 1 :(得分:0)
阅读documentation,您似乎需要设置文件和路径依赖关系。
请参阅并行作业对象的FileDependencies和PathDependencies属性。