いくつかのループが含まれているため、実行に時間がかかるコードがあります。ベクトル化を使用してコードを最適化できるかどうかは別のトピックです。問題は、完了するまでに長時間(時間)を要していたため、コード実行時にCPU使用率をチェックすることにしました。私の驚いたことに、私はそれが0%と3%の間で変動していることを発見しました!ループを使用してMATLABコードを実行しているときのCPU使用率を上げるにはどうすればよいですか?
私のCPUはクワッドコアであるため、なぜCPUは、少なくとも25%を利用していない(と私は、各コアが、それはありませんが、一度に1つのスレッドを扱うと思う?)、デフォルトではときに他に何もしていないのですか?コード実行時にCPU使用率を上げて実行速度を上げるにはどうすればよいですか?それが関連している、ここで私が実行しているコード(機能のスクリーンショットでxyz
)がある場合には
:あなたはあなたが使用できる多くのスレッドを利用したい場合は、デフォルトのMATLABプログラムによって
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
システム/ OS構成によっては、4GBを超えるメモリを使用できないため、ハードディスク上でタスクをオフロードする可能性があります。 – rahnema1
私の純粋に推測的な答えは、実際の計算には単一のCPUの100%を使用していますが、利用率は2秒目です(実際にはグラフが6秒あたりのCPU使用率を示していると思います)最適化されていないトリプルネストループで実行されているため、個々の計算の間に多くのアイドル時間があります。 – craigim