Я работаю над сложной функцией, которая вызывает несколько подфункций (в одном файле). Для передачи данных setappdata
/getappdata
. Более того, некоторые подфункции содержат persistent
переменных (инициализируются один раз, чтобы впоследствии сохранить вычисления).
Я рассматривал возможность выполнения этой функции на нескольких воркерах в параллельном пуле, но забеспокоился, что может произойти непреднамеренный обмен данными (который в противном случае был бы уникальным для каждого воркера).
Мой вопрос: как узнать, являются ли данные в global
и/или persistent
и/или appdata
общими для рабочих процессов или уникальными для каждого из них?
Несколько, возможно, релевантных вещей:
- В моем случае задачи полностью параллельны и их результаты никак не должны влиять друг на друга (распараллеливание делается просто для экономии времени).
- Временные файлы или папки не создаются, поэтому нет риска, что один работник по ошибке прочитает файлы, оставленные другим.
- Все переменные
persistent
и appdata создаются/назначаются внутри подфункцииparfor
.
Я знаю, что каждому рабочему процессу соответствует новый процесс с собственным пространством памяти (и, предположительно, рабочим пространством global
/persistent
/appdata
). На основании этого и этого официального комментария, я бы сказал, что, вероятно, такого обмена не происходит... Но как мы можем это установить?
global
,persistent
,appdata
не распределяется между рабочими процессами Parallel Computing Toolbox. (Обычно люди хотят, чтобы это было так.) - person Edric   schedule 03.10.2018