arrays - 多维数组上的 Matlab 求和性能

标签 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 更快。​​

非常感谢。

最佳答案

这是 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.

关于arrays - 多维数组上的 Matlab 求和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626367/

相关文章:

matlab - 通过给定的 LU 分解和常数向量求解线性方程组

c++ - 如何在 C++ 中使用 mex.h

matlab - 如何在 Matlab 中利用并行处理

c - pthread 函数返回 vector ?

python - 在Python中使用Dask并行运行函数

php - 如何找出是否在嵌套数组中

javascript - 为什么以下 if 语句排除与其余数组相同的数组?

javascript - 获取句子中的单词

javascript - 检查数组是否可堆栈排序

python - 在 Python 脚本中调用 MATLAB .m 文件和函数