Matlab和多维数组的性能

时间:2013-07-13 02:19:53

标签: arrays matlab parallel-processing sum

我在matlab中有一个关于sum的问题。

对于向量(1xN矩阵),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.

但如果我改为考虑2xN矩阵,

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更快。

非常感谢。

1 个答案:

答案 0 :(得分:2)

这是MATLAB不太清楚的事情。无论何时创建数组,MATLAB都会生成一个行向量,但在场景后面它实际上更喜欢列向量。因此,对行(第一维)中的数组求和比行(第二维)更快。对于您的情况,如果您将a转换为行主要表示并在第一维中执行sum,则可以看到好处。在我的机器上,我得到以下

a = rand(100000000, 2);
maxNumCompThreads(2); 
tic; for ii=1:20; b=sum(a,1); end; toc
maxNumCompThreads(1);
tic; for ii=1:20; b=sum(a,1); end; toc

> Elapsed time is 2.485628 seconds.
> Elapsed time is 4.381082 seconds.