2016-03-04 5 views
0

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

Мой вопрос просто:

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

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

+1

Вы должны иметь возможность использовать 'pool = gcp; pool.NumWorkers' изнутри внутреннего цикла, чтобы получить информацию о том, сколько работников используется. – Suever

ответ

0

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

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

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

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