【发布时间】:2015-02-03 18:53:55
【问题描述】:
我有两个向量,比如 A:1xN 和 B:1xM。我想计算它们的外积并将结果添加到 NxM 矩阵中。现在,我把它分成两部分,首先计算 (A')B 然后添加它。在分析时,第一步比添加(8x)花费更多的时间。由于第一步中的乘法次数与第二步中的加法次数相同,所以差异仅仅是因为我的架构支持更快的加法吗?还是第一步分配内存用于存储结果所花费的时间?
>> x = randn(1,10000);
>> y = randn(1,10000);
>> tic; z=x'*y; toc;
Elapsed time is 0.560743 seconds.
>> tic; z=z+z; toc;
Elapsed time is 0.132228 seconds.
>> tic; z=z.*z; toc;
Elapsed time is 0.124191 seconds.
所以我认为这不是多对加。 z = z+z 和 z = z.*z 的时间相似。
【问题讨论】:
-
显示您的代码并解释它们的时间安排?
-
浮点值相乘比相加需要更多时间。您看到的行为可能是正常的
-
好吧,在编辑中,似乎并非如此。它可能在某些架构中,但不是在这里。
-
那么问题到底是什么?
-
@user3287648 我现在无法在 MATLAB 中对此进行测试,但内存分配可能会导致这种差异。在运行
z=x'*y之前尝试将z初始化为一个零矩阵;看看运行时间是否保持不变。此外,tic/toc不是分析代码的可靠方法。见stackoverflow.com/a/18955502/2541573
标签: performance matlab architecture product allocation