12 コアのマシンと、fftn に大きく依存するいくつかの matlab コードにアクセスできます。コードを高速化したい。
fft は並列化できるので、より多くのコアが役立つと思いますが、私はその反対を見ています。
次に例を示します。
X = peaks(1028);
ncores = feature('numcores');
ntrials = 20;
mtx_power_times = zeros(ncores,ntrials);
fft_times = zeros(ncores, ntrials);
for i=1:ncores
for j=1:ntrials
maxNumCompThreads(i);
tic;
X^2;
mtx_power_times(i,j) = toc;
tic
fftn(X);
fft_times(i,j) = toc;
end
end
subplot(1,2,1);
plot(mtx_power_times,'x-')
title('mtx power time vs number of cores');
subplot(1,2,2);
plot(fft_times,'x-');
title('fftn time vs num of cores');
これは私にこれを与えます:
行列乗算の高速化は素晴らしいですが、すべてのコアを使用すると、fft がほぼ 3 倍遅くなるようです。どうしたの?
参考までに、私のバージョンは 7.12.0.635 (R2011a) です。
編集: 1D変換を行う大きな2D配列では、同じ問題が発生します:
編集:問題は、fftw が maxNumCompThreads が強制するスレッド制限を認識していないことです。maxNumCompThreads を何に設定しても、すべての CPU がフルスピードで動作します。
それで... Matlabでfftに使用したいプロセッサの数を指定する方法はありますか?
編集: .mex ファイルで慎重に作業しないと、これを行うことができないようです。http://www.mathworks.com/matlabcentral/answers/35088-how-to-control-number-of-threads-in-fftに答えがあります。どなたか簡単に直していただけると助かります...