【发布时间】:2012-03-02 06:10:49
【问题描述】:
我可以使用 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');
这给了我这个:
矩阵乘法的加速非常好,但是当我使用所有内核时,我的 ffts 似乎慢了近 3 倍。怎么回事?
作为参考,我的版本是 7.12.0.635 (R2011a)
编辑:在大型 2D 数组上进行 1D 变换时,我遇到了同样的问题:
编辑: 问题似乎是 fftw 没有看到 maxNumCompThreads 强制执行的线程限制。无论我将 maxNumCompThreads 设置在什么位置,我都会让所有 cpu 全速运行。
那么...有没有一种方法可以在 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 设置。 -
考虑在这里回答您自己的问题,以便人们可以看到您的调查结果(并可能投票!)...