【发布时间】:2012-09-25 04:09:19
【问题描述】:
我想知道 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 中的“Ma”代表魔法。
-
你怎么知道没有线程发生?
-
你确定它是在 CPU 上计算的吗? mathworks.com/discovery/matlab-gpu.html
-
Matlab 肯定是多线程的。我现在正在我的机器上测试它,它使用 4 个核心。
-
Matlab 肯定是做多线程的,至少 R2011b 是用默认设置做的,不受操作系统的干扰。
标签: performance matlab matrix time-complexity matrix-multiplication