Parfor в кластере: сбой при распознавании функции - PullRequest
2 голосов
/ 14 февраля 2012

Я пытаюсь выполнить простую задачу на разных машинах кластера. Моя конфигурация была проверена (это нормально). Когда я запускаю код на «локальной» конфигурации это работает. Но когда я использую кластер В конфигурации я получаю следующую ошибку:

Ошибка использования параллельной функции (строка 598) Неопределенная функция 'lafunc' для входных аргументов типа 'double'. Стек ошибок: (нет удаленного стека ошибок) Ошибка в petittest (строка 6) - »(petittest - это название моей программы) parfor it = 1: 200

Я пытаюсь изменить код, чтобы использовать "dfeval" вместо цикла parfor, но я получил такой же результат (нераспознанная функция lafunc).

Как заставить других работников в кластере распознать функцию lafunc что я определил вручную?

Код следующий:

%%%%%%%%%%%%%
laconfig='/home/matlab/fred/LACED_DC1.mat';
setmcruserdata('ParallelConfigurationFile',laconfig);

matlabpool open

parfor it=1:200

yo=lafunc(it);
disp(yo)

end

matlabpool close

%%%%%%%%%%%

где функция lafunc

%%%%%%%%%%%%%%

function [y]=lafunc(x)
y=x*x;
end

%%%%%%%%%%%%%%%%%%%%%%

Большое спасибо, каждая информация полезна для меня !!

1 Ответ

7 голосов
/ 14 февраля 2012

Убедитесь, что ваш скрипт MATLAB на всех рабочих узлах, работающих в одном и том же рабочем каталоге, и что другие каталоги с нужными вам функциями включены в путь. Таким образом, вы можете специально указать рабочий каталог и путь в вашем скрипте:

matlabpool open
cd workdir
addpath funcdir
...

После запуска matlabpool open он будет запускать все команды, связанные с путями, на всех рабочих. Смотри здесь .

Вы также можете открыть matlabpool с параметром 'FileDependencies', чтобы все работники знали, где искать необходимые файлы. См. Документацию для MATLABPOOL .

...