我使用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的共享库没有安装在网格的其他计算机上,但我不确定,我也不知道如何验证。
提前感谢您的任何建议。
答案 0 :(得分:0)
您希望提交作业的队列中的所有执行节点都可以访问这些库。如果执行节点可以访问共享位置(例如NFS mount),则可以在那里安装库。否则,您需要在所有执行节点上安装所需的库。有关SET_LIB_PATH的其他链接:
blogs.oracle.com/templedf/entry/inheriting_job_environment
虽然这有助于指向正确的位置,但仍需要访问库