exponenta event banner

Обеспечить прозрачность в 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 включают в себя:

  • who и whos

  • 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 итерация.

См. также

|

Связанные темы