Matlab вложил циклы parfor внутри функций, будут ли использоваться все рабочие, если внешний цикл небольшой?

Если я правильно понимаю документацию, у меня может быть цикл parfor внутри другого цикла parfor, если внутренний цикл находится в отдельном вызове функции, что верно в моем случае.

Мой вопрос заключается просто в следующем:

В некоторых случаях мой внешний цикл использует только 2 потока/рабочих. У меня 6 воркеров в параллельном пуле.

Будет ли внутренний цикл parfor использовать 4 неиспользуемых рабочих?


person David Parks    schedule 04.03.2016    source источник
comment
Вы должны иметь возможность использовать pool = gcp; pool.NumWorkers внутри внутреннего цикла for для получения информации о том, сколько рабочих процессов используется.   -  person Suever    schedule 04.03.2016


Ответы (1)


Из собственной документации MATLAB (http://www.mathworks.com/help/distcomp/nesting-and-flow-in-parfor-loops.html):

Тело цикла parfor не может содержать другой цикл parfor. Но он может вызвать функцию, содержащую другой цикл parfor.

Однако, поскольку воркер не может открыть параллельный пул, он не может параллельно запускать внутренний вложенный цикл parfor. Это означает, что параллельно может выполняться только один уровень вложенных циклов parfor. Если внешний цикл выполняется параллельно в параллельном пуле, внутренний цикл выполняется последовательно на каждом рабочем потоке. Если внешний цикл выполняется последовательно в клиенте (например, par для указания нулевых рабочих процессов), функция, содержащая внутренний цикл, может выполнять внутренний цикл параллельно для рабочих процессов в пуле.

Поскольку рабочий процесс не может сам открыть пул, внутренний цикл parfor будет работать последовательно.

person Poelie    schedule 04.03.2016