在unix集群上找不到函数:matlab parallel:undefined function

时间:2012-08-07 16:43:48

标签: parallel-processing cluster-computing undefined matlab

我正在尝试在大型集群上运行并行作业;所有代码和函数在我的计算机上运行良好(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'.

2 个答案:

答案 0 :(得分:1)

找到解决方案;在这种情况下,它可能特定于我正在研究的unix系统架构。我从一个文件系统提交作业,它们在一个单独的(临时)目录中运行 - 在一个单独的文件系统上。我认为这些实际上是不同建筑物中的不同硬件,但我并不积极。

分辨率是添加以下行:

  

p ='PATH_TO_LOCAL_DIRECTORY_OF_FUNCTIONS';

     

集(作业, 'FileDependencies',{P});

之前我曾尝试设置FileDependencies属性 - 但之前我使用的路径无论出于何种原因,matlab工作者都无法使用。我的解决方案是将整个子功能目录复制到运行unix作业的远程(临时)目录;然后,只要'FileDependencies'属性指向它,这个远程目录就可以在matlab工作者本地访问和显示。

答案 1 :(得分:0)

阅读documentation,您似乎需要设置文件和路径依赖关系。

请参阅并行作业对象的FileDependenciesPathDependencies属性。