Grid Engine集群+ OpenCV:奇怪的行为

时间:2014-10-10 21:37:57

标签: c++ opencv cluster-computing sungridengine

我使用Grid Engine集群运行一些OpenCV代码。代码在本地执行时运行良好,但是当提交到网格时,它无法正常工作。我在这里提取了一个最小的例子。

在目录~/code/中,我有一个文件test.cpp,其中包含以下代码:

#include <opencv2/core.hpp>
#include <iterator>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
using namespace cv;
using namespace std;


int main(int ac, char** av)
{    
    /// Create a random matrix
    Mat M;

    /// Create a subfolder
    string folderName = "sub/";
    mkdir(folderName.c_str(),0777);

    return 0;
}

编译时没有错误。

在本地执行时,即

username@machine:~/code$ ./test

它会按预期创建一个子文件夹,即~/code/sub

为了提交到网格,我在主目录(即job.sh)中创建了一个包含

的作业脚本~/job.sh
cd code/
./test

然后使用

提交
qsub job.sh

什么都没发生。 (并没有错误)。

但是,当我删除该行

Mat M;

它确实按预期创建了文件夹。

这种行为的可能原因是什么?我想到像OpenCV的共享库没有安装在网格的其他计算机上,但我不确定,我也不知道如何验证。

提前感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

您希望提交作业的队列中的所有执行节点都可以访问这些库。如果执行节点可以访问共享位置(例如NFS mount),则可以在那里安装库。否则,您需要在所有执行节点上安装所需的库。有关SET_LIB_PATH的其他链接:

blogs.oracle.com/templedf/entry/inheriting_job_environment

虽然这有助于指向正确的位置,但仍需要访问库