parfor- контуры или spmd ЗаявленияТело parfor-луп или spmd блок должен быть прозрачным. Прозрачность означает, что все ссылки на переменные должны быть видны в тексте кода.
В следующих примерах переменная X не передается работникам. Только символьный вектор 'X' передается в eval, и X не отображается как входная переменная в теле цикла или блока. В результате во время выполнения MATLAB ® выдает ошибку.
X = 5; parfor ii = 1:4 eval('X'); end |
X = 5; spmd eval('X'); end |
Аналогично, невозможно очистить переменные из рабочей области, выполнив команду clear внутри parfor или spmd заявление:
parfor ii = 1:4 <statements...> clear('X') % cannot clear: transparency violation <statements...> end |
spmd; clear('X'); end |
Кроме того, можно освободить память, используемую переменной, установив ее значение пустым, если она больше не нужна.
parfor ii = 1:4 <statements...> X = []; <statements...> end
В случае spmd блоки можно удалить из клиентской рабочей области.
Как правило, требование прозрачности ограничивает весь динамический доступ к переменным, поскольку вся переменная может отсутствовать в любом данном работнике. В прозрачном рабочем пространстве невозможно создать, удалить, изменить, получить доступ или запросить переменные, если эти переменные в коде явно не указаны.
Примеры других действий или функций, нарушающих прозрачность в parfor-loop включают в себя:
evalc, evalin, и assignin с workspace аргумент указан как 'caller'
save и load, за исключением вывода load назначается переменной
Если сценарий пытается прочитать или записать переменные родительской рабочей области, то выполнение этого сценария может привести к нарушению прозрачности. Чтобы избежать этой проблемы, преобразуйте сценарий в функцию и вызывайте его с необходимыми переменными в качестве входных или выходных аргументов.
Примечание
Прозрачность применяется только к прямому телу parfor или spmd конструкция, а не для каких-либо функций, вызываемых оттуда. Обходной путь для save и load является скрытием вызовов save и load внутри функции.
MATLAB успешно выполняется eval и evalc операторов, которые появляются в функциях, вызываемых из parfor тело.
Вы можете запускать модели Simulink ® параллельно с parsim вместо использования команды parfor-контуры. Дополнительные сведения и примеры параллельного использования Simulink см. в разделе Запуск нескольких моделирований (Simulink).
Если для модели Simulink требуется доступ к переменным, содержащимся в .mat необходимо загрузить эти параметры в рабочую область каждого работника. Вы должны сделать это до parfor-луп, а после открытия parpool. Для этого можно использовать spmd или parfevalOnAll, как показано в примерах.
spmd evalin('base', 'load(''path/to/file'')') end
parfevalOnAll(@evalin, 0, 'base', 'load(''path/to/file'')')
Если для модели также требуются переменные, определенные в теле сценария MATLAB, необходимо использовать assignin или evalin для перемещения этих переменных в базовую рабочую область каждого работника parfor итерация.