Я работаю над программой MATLAB, в которой есть много других пользовательских пакетов, часто содержащих файлы с одинаковым именем. Поэтому я решил использовать подход пользовательского пакета (http://www.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html), чтобы эффективно получать точечную нотацию при обращении к конкретным функциям в различных пакетах, которые я использую. Например, у меня есть пакет под названием pose
, который имеет эту файловую структуру:MATLAB с использованием parfor (параллельного вычислительного инструментария) и пользовательских пакетов с +
MATLAB % on the MATLAB path
--- +pose
--- detect.m
--- MORE STUFF
--- +tracker
--- MORE STUFF
--- main.m
В моем main.m
файле, у меня есть распараллеленный цикл:
parfor i=start:stop
... BLAH BLAH
boxes = pose.detect(stuff);
... BLAH BLAH
end
Но я получаю ошибку, что
MATLAB не может определить, относится ли «поза» к функции или переменной . См. Параллель для циклов в MATLAB, «Однозначные переменные имена».
Глядя на документацию по параллельному программированию MATLAB (http://www.mathworks.com/help/distcomp/programming-considerations.html), кажется, что все функции, которые вы используете внутри цикла parallel, должны быть прозрачными внутри цикла for. Но это кажется прямым нарушением другого принципа параллельного программирования в MATLAB, который заключается в том, что «все рабочие, выполняющие parfor-loop, должны иметь тот же путь поиска MATLAB, что и клиент».
Кто-нибудь знает, как смириться с этим?