1

我正在尝试在大型集群上运行并行作业;所有代码和功能在我的计算机上都可以正常工作(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'.
4

2 回答 2

1

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

解决方法是添加以下行:

p = 'PATH_TO_LOCAL_DIRECTORY_OF_FUNCTIONS';

设置(作业,'FileDependencies',{p});

我之前曾尝试设置 FileDependencies 属性 - 但我之前使用了一个路径,无论出于何种原因,matlab 工作人员都无法使用。我的解决方案是将我的整个子函数目录复制到运行 unix 作业的远程(临时)目录;只要“FileDependencies”属性指向它,这个远程目录就对 matlab 工作人员是本地的并且可见。

于 2012-08-08T15:29:59.613 回答
0

阅读文档,您似乎需要设置文件和路径依赖项。

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

于 2012-08-08T00:01:59.437 回答