我有一个关于sum
的问题,在matlab中。Matlab在多维数组上的求和性能
对于载体(1×N个矩阵),sum
似乎是并行化。例如,
a=rand(1,100000000);
maxNumCompThreads(2);
tic;for ii=1:20;b=sum(a,2);end;toc
maxNumCompThreads(1);
tic;for ii=1:20;b=sum(a,2);end;toc
> Elapsed time is 1.219342 seconds.
> Elapsed time is 2.393047 seconds.
但如果不是我考虑一个2×N个矩阵,
a=rand(2,100000000);
maxNumCompThreads(2);
tic;for ii=1:20;b=sum(a,2);end;toc
maxNumCompThreads(1);
tic;for ii=1:20;b=sum(a,2);end;toc
> Elapsed time is 7.614303 seconds.
> Elapsed time is 7.432590 seconds.
在这种情况下,sum
似乎并没有从额外的核心受益。
以前有人遇到过这个吗?我想知道这是否可能是由于索引开销,以及在2xN矩阵的情况下是否有可能使sum
更快。
非常感谢。
我看不到这种行为(matlab 2012a)。 1D阵列的比率为2线程vs单线程提高〜10%。我得到2D阵列的第一个循环(2个线程)也比第二个(单线程)稍快(2%)。虽然它不如一维阵列有效,但它不是你所报告的。 – bla
@natan感谢您的评论。我使用matlab 2011b和2013a在几台机器(2和4个内核)上检查了这一点,我总是观察这种行为。 – user2578309