5

Я использую класс TreeBagger, предоставляемый Matlab (R2014a & b) в сочетании с панелью распределенных вычислений. У меня есть кластер local с 30 рабочими, на машине с Windows 7 с 40 ядрами.Почему TreeBagger в Matlab 2014a/b использует только несколько работников из параллельного пула?

я называю TreeBagger конструктор для создания регрессионной леса (ансамбль, содержащий 32 деревьев), передавая options структуру с 'UseParallel' набором для 'always'.

Однако TreeBagger, по-видимому, использует только 8 рабочих, из 30 доступных (судя по использованию ЦП на процесс, наблюдаемому с помощью диспетчера задач). Когда я пытаюсь проверить бассейн с простой parfor петли:

parfor i=1:30 
    a = fft(rand(20000)); 
end 

Тогда все 30 работников заняты.

Мой вопрос: (Как) могу ли я заставить TreeBagger использовать все доступные ресурсы?

+0

Заключительное предположение, однако, на основе документации для опции «UseParallel» «если паркур Parallel Computing Toolbox открыт», это может быть меньше работников, поскольку оно предназначено для работы с Parallel Computing Toolbox, а не с помощью Distributed Computing Toolbox и так как это может быть ограничено меньшим количеством (8 работников, похоже, были знакомы, но я считаю, что его 12 в настоящее время) – RTL

+0

Я думаю, что в какой-то момент было просто переименование между «параллельным вычислительным инструментом» и «распределенным вычислительным инструментом» - R2014a и b не ограничьте число рабочих до 12. Насколько я могу судить, перейдя через код, 'TreeBagger' просто вызывает' parfor'. –

+0

Кажется, немного отстает от времени ... Я полностью согласен с тем, что проверил источник: «TreeBagger» называет «smartForSliceout» для основного цикла, который использует «parfor» и 'getParallelPoolSize' (который в основном является обертка для 'gcp'), чтобы определить размер пула ... Поэтому я не могу понять, почему все работники не заняты ... информация в вопросе указывает, что 30 рабочих активны (если только некоторая внутренняя распараллеливание в' fft' не скрывает факт, что пул меньше 30 - это было бы просто проверить с помощью 'gcp') – RTL

ответ

0

Основываясь на документации для класса TreeBagger, кажется, что требуемые операции довольно интенсивно для памяти. Не зная больше о внутренней системе планирования, используемой Matlab, представляется вероятным, что распределение рабочей нагрузки между меньшим числом рабочих с большим объемом памяти для каждого рабочего - это то, что, по мнению планировщика, является наиболее эффективным способом решения проблемы.

Количество рабочих, используемых/доступных, также может зависеть от количества физических ядер в системе (что отличается от числа ядер с гипервитой), а также ресурсов, которые Matlab может потреблять.

Разделение памяти с интенсивными задачами на меньшее, чем максимальное количество рабочих, является распространенной методикой в ​​HPC для некоторых типов проблем.