【问题标题】:Matlab's fftn gets slower with multithreading?Matlab 的 fftn 使用多线程会变慢?
【发布时间】: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 设置。
  • 考虑在这里回答您自己的问题,以便人们可以看到您的调查结果(并可能投票!)...

标签: matlab fftw


【解决方案1】:

如果不对 .mex 文件进行一些仔细的工作,我似乎无法做到这一点。 http://www.mathworks.com/matlabcentral/answers/35088-how-to-control-number-of-threads-in-fft 有答案。如果有人有一个简单的解决方案会很好......

【讨论】:

    【解决方案2】:

    要使用不同的内核,您应该使用并行计算工具箱。例如,您可以使用parfor 循环,并且必须将函数作为句柄列表传递:

    function x = f(n, i)
      ...
    end
    
    m = ones(8);
    parfor i=1:8
      m(i,:) = f(m(i,:), i);
    end
    

    更多信息请访问:

    High performance computing

    Multithreaded computation

    Multithreading

    【讨论】:

    • 我不想让 for 循环并行运行。我正在努力让 fftn 走得更快。矩阵乘法会自动使用我所有的内核,但 fftn 似乎没有。
    • fftn中据说fftn(X)等价于:Y = X;对于 p = 1:length(size(X)) Y = fft(Y,[],p);你为什么不尝试将 parfor 包含在那个“for”循环中?希望对您有所帮助。
    • 这些调用是对 fft 串行进行的。如果我尝试将其与 parfor 并行化,那么我将在 Y 上出现竞争条件。
    • Luis,澄清 rcompton 的响应:对于多维信号,fftn 在信号的第一个方向应用 fft,然后在信号的第二个方向对结果应用 fft,依此类推。该过程是顺序的,不能直接并行化。
    猜你喜欢
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2017-11-08
    • 2021-07-13
    相关资源
    最近更新 更多