我有权访问12核心机器和一些严重依赖于fftn的matlab代码。我想加快我的代码。Matlab的fftn使用多线程会变慢?
既然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)
编辑:在大型二维数组服用维变换,我得到了同样的问题:
编辑:出现的问题是fftw没有看到maxNumCompThreads强制执行的线程限制。无论我设置了maxNumCompThreads,我都可以全速进入。
所以......有没有我可以指定我想有多少处理器用于在Matlab中的FFT的方法吗?
编辑:看起来我没有在.mex文件中做一些小心的工作就无法做到这一点。 http://www.mathworks.com/matlabcentral/answers/35088-how-to-control-number-of-threads-in-fft有一个答案。如果某人有一个简单的修复方法将会很好...
会发生什么,如果你的基准'FFT(X,[],1)'和'FFT(X,[],2)'? (可能在更大的矩阵大小上。)那些显示任何并行性吗?如果不是这样,'fftw'库可能根本不使用并行性,并且您可能需要使用不同的MATLAB设置。 – 2012-03-02 23:53:16
考虑在这里回答你自己的问题,让人们可以看到你的调查结果(和潜在投上一票!)... – 2013-07-10 14:00:36