У меня есть код, требующий много времени, так как он содержит несколько циклов for
. Независимо от того, можно ли оптимизировать код с помощью векторизации, это еще одна тема. Проблема в том, что, поскольку для завершения требуется много времени (часов), я решил проверить загрузку процессора при запуске кода. К моему удивлению, я обнаружил, что он колеблется от 0 до 3%!Как повысить эффективность использования ЦП при запуске кода MATLAB с помощью циклов?
Почему процессор не использует по крайней мере, на 25%, так как мой процессор четырехъядерный (и я думаю, что каждое ядро обрабатывает 1 поток в то время, не так ли?), По умолчанию, когда его ничего не делает? Как увеличить загрузку процессора при запуске кода, чтобы он выполнялся быстрее?
В случае необходимость, вот код (функция xyz
на скриншоте) Я бег:
users(:,1)=unique(M(:,10));
categories(:,1)=unique(M(:,2));
N=size(users,1);
for i=1:N
U=M(M(:,10)==users(i,1),:);
C(:,1)=unique(U(:,2));
[~,~,subs] = unique(U(:,2));
vals = U(:,9);
C(:,2) = accumarray(subs(:), vals(:), [], @(x) 1-mean(x));
for j=1:size(categories,1)
for k=1:size(C,1)
if categories(j,1)==C(k,1)
categories(j,i)=C(k,2);
end
end
end
clear C;
end
Возможно, из-за конфигурации вашей системы/ОС он не может использовать более 4 ГБ памяти и разгрузить свою задачу на жестком диске. – rahnema1
Мой чисто умозрительный ответ заключается в том, что он использует 100% одного процессора для фактического расчета, но что использование _per second_ (фактически, я считаю, что график показывает загрузку процессора за 6 секунд) намного ниже, потому что ваш расчет выполняется в неоптимизированной тройной вложенной петле, и поэтому между каждым отдельным вычислением существует много времени простоя. – craigim