我有一个耗时运行的代码,因为它包含一些for循环。代码是否可以通过使用矢量化进行优化是另一个话题。问题是,由于完成需要很长时间(几小时),所以我决定在代码运行时检查CPU利用率。令我惊讶的是,我发现它在0到3%之间波动!如何在循环运行MATLAB代码时提高CPU利用率?
为什么不利用至少25%的CPU,因为我的CPU是四核(我认为每个核心处理1个线程在同一时间,是不是?),默认情况下,当没有做别的事情?运行代码时如何提高CPU利用率,以便更快地执行?
如果它是相关的,这里是代码(在截图功能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
+0
这可能是由于您的系统/操作系统配置,它不能使用超过4GB的内存并将其任务卸载到硬盘上。 –
+0
我纯粹推测的答案是,它实际计算使用100%的单CPU,但利用率_per second_(事实上,我相信该图显示CPU每6秒利用率)远低于您的计算是在一个未优化的三重嵌套循环中完成的,因此每个计算之间有很多空闲时间。 –