Сетка кластерного двигателя + OpenCV: странное поведение

Я использую 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

Решение

Библиотеки должны быть доступны для всех исполнительных узлов в очереди, в которую вы хотите отправить задание. Если исполнительные узлы имеют доступ к общему расположению, например, к монтированию NFS, вы можете установить библиотеки там. В противном случае вам нужно установить необходимые библиотеки на всех исполнительных узлах. Дополнительная ссылка относительно SET_LIB_PATH:

blogs.oracle.com/templedf/entry/inheriting_job_environment

Хотя это поможет указать правильное местоположение, библиотеки по-прежнему должны быть доступны

0

Другие решения


По вопросам рекламы [email protected]