performance - Matlab矩阵乘法速度

标签 performance matlab matrix time-complexity matrix-multiplication

我想知道 matlab 怎么能这么快地将两个矩阵相乘。将两个 NxN 矩阵相乘时,执行 N^3 次乘法。即使是 Strassen Algorithm它需要 N^2.8 次乘法,这仍然是一个很大的数字。我正在运行以下测试程序:

a = rand(2160);
b = rand(2160);
tic;a*b;toc

使用 2160 是因为 2160^3=~10^10(a*b 应该是大约 10^10 次乘法)

我得到了:

Elapsed time is 1.164289 seconds.

(我在 2.4Ghz 笔记本电脑上运行,没有线程发生) 这意味着我的电脑在 1 秒多一点的时间内进行了 ~10^10 次操作。

这怎么可能??

最佳答案

它是几件事的组合:

  • Matlab 确实是多线程的。
  • 内核使用向量指令进行了高度优化。

这是我机器上的数字:Core i7 920 @ 3.5 GHz(4 核)

>> a = rand(10000);
>> b = rand(10000);
>> tic;a*b;toc
Elapsed time is 52.624931 seconds.

任务管理器显示 4 个核心的 CPU 使用率。

现在进行一些数学运算:

Number of multiplies = 10000^3 = 1,000,000,000,000 = 10^12

Max multiplies in 53 secs =
    (3.5 GHz) * (4 cores) * (2 mul/cycle via SSE) * (52.6 secs) = 1.47 * 10^12

因此 Matlab 在最大可能的 CPU 吞吐量下实现了大约 1/1.47 = 68% 的效率。

我没有看到任何异常。

关于performance - Matlab矩阵乘法速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12721912/

相关文章:

python - Python 3 中更快的 for 循环

c++ - 在 C++ 中查找序列中的第 N 项

mysql - 对于小型 Web 项目,MySQL 或 Oracle 哪个更快?

jquery - DataTables jQuery插件在初始加载后设置recordsTotal

performance - 将 3D numpy 数组拆分为 3D block

c - 是否有像 MATLAB 舍入函数这样的 C 舍入函数?

matlab - 这是一个 Matlab 错误吗?你有同样的问题吗?

matlab - 为什么 log 和 exp matlab 函数会产生相反的结果?

MATLAB - 通过垂直连接子矩阵重新排列矩阵

java - 使用 BITwise 运算实现二维数组