Как параллельно 4 работает с PARFOR с Core i3 в Matlab

У меня есть Matlab R2012b для Ubuntu 64 бит. У меня процессор Intel Core i3 M 330 @ 2,13 ГГц × 4.

Я хочу использовать parfor для параллелизации 4 циклов одновременно. Поскольку Intel Core i3 имеет 2 ядра и 4 потока, я использую этот код:

if matlabpool('size') == 0 % checking to see if my pool is already open
    matlabpool(4)
else
    matlabpool close
    matlabpool(4)
end

И я получаю следующую ошибку:

Ошибка:

Вы запросили как минимум 4 рабочих, но для кластера "local" свойство NumWorkers установлено, чтобы разрешить максимум 2 рабочих. Чтобы запустить связывающее задание на большем количестве работников, чем это (максимум до 12 для локального кластера), увеличьте значение свойства NumWorkers для кластера. Значением по умолчанию NumWorkers для локального кластера является количество ядер на локальном компьютере.

Зачем? Значение по умолчанию NumWorkers на моей машине равно 2, но если я могу сделать 4 цикла одновременно, как мне его получить?

2 ответа

Решение

Чтобы увеличить значение по умолчанию NumWorkersоткройте Диспетчер профилей кластера (Параллельно-> Управление профилями кластера). Выберите localпрофиль, нажмите изменить и увеличить NumWorkers до максимально возможного значения (в вашем случае 4). Теперь можно создать matlabpool с большим количеством рабочих, чем физических ядер на вашей машине.

Однако обратите внимание, что использование большего количества рабочих, чем ядер, может привести к снижению производительности по сравнению с тем же числом рабочих, что и для ядер.

Программно изменить значение NumWorkers от 2 до 4 local Профиль кластера, вы можете использовать:

myCluster = parcluster('local');
myCluster.NumWorkers = 4;  % 'Modified' property now TRUE
saveProfile(myCluster);    % 'local' profile now updated,
                           % 'Modified' property now FALSE    
Другие вопросы по тегам