, если я наберу lscpu
в командной строке:
CPU(s): 4
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
, то есть у меня 2 физических ядра.
У меня нет опыта параллельных вычислений, но он мне нужен для мои цели. Итак, поскольку я являюсь пользователем MatLab, меня интересуют parfor
циклы, но мне нужно понимать, что на самом деле происходит.
Я написал красный из документации MatLab, это номер по умолчанию рабочих процессов - по одному на физическое ядро ЦП с использованием одного вычислительного потока , а также этот выбор оптимизирует производительность. Я хочу понять, как количество рабочих влияет на производительность:
Чтобы убедиться в этом, я попытался запустить (вдохновленный this ) следующий стандартный фрагмент кода, изменив число рабочих в строке parpool
.
m = 500;
A = randn(m);
N = 200;
parpool(1);
tic
x = zeros(1,N);
parfor i=1:N
x(i) = max(abs(eig(A)));
end
toc
и я измеряю с ti c -to c затраченное время.
С 1 рабочим: % Elapsed time is 26.534430 seconds.
С 2 рабочими: % Elapsed time is 14.528462 seconds.
С 3 рабочими: % Elapsed time is 14.403359 seconds.
С 4 рабочими: % Elapsed time is 17.946775 seconds.
Если I go включен с рабочие, это занимает больше времени.
У меня два вопроса:
Я ожидал бы лучшей производительности с двумя рабочими: почему с 3 рабочими У меня все еще хорошие результаты?
Почему больше рабочих подразумевает больше времени?