2014-12-05 66 views
0

我有两个向量,比如A:1xN和B:1xM。我想计算它们的外积,并将结果添加到NxM矩阵。现在,我将它分成两部分,首先计算(A')B,然后加上它。在分析时,第一步比添加(8x)要花费更多的时间。由于第一步中的乘法次数与第二步中的加法次数相同,仅仅是由于我的体系结构支持更快的加法,所以差异是什么?或者是在第一步中分配内存来存储结果的时间?f在matlab中的外积的性能

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

所以我认为这不是一个多vs增加。 z = z + z和z = z。* z具有相似的时间。

+1

显示您的代码并解释他们的时间安排? – Divakar 2014-12-05 15:01:04

+2

乘以浮点值比添加浮点值需要更多的时间。你看到的行为可能是正常的 – 2014-12-05 15:06:33

+0

那么,在编辑中,似乎并非如此。它可能在某些体系结构中,不在这里。 – user3287648 2014-12-05 15:11:25

回答

0

使用两个矩阵和外部产品有许多不同之处。如果你想到你自己的“C”实现并比较它们,这将变得很明显。

  1. 外部产品可能需要多个索引来跟踪您从矢量中读取的位置以及您在矩阵中写入的位置。即更多的循环开销。
  2. 如果要添加或乘以相同的矩阵,则只需要一个循环索引。
  3. 第二和第三个操作也是需要较少内存指针的就地操作。
+0

我同意这两个指数,但不能增加这么多开销。我没有得到第三点。不同的读写相同? – user3287648 2014-12-05 17:10:37

+0

地址指针的数量较少。我更新了这个句子。你说得对,写入次数是一样的。但是由于读取两个变量,读取次数更多。 – Navan 2014-12-05 18:23:07

+0

虽然它读取两个变量,但总读数不需要更多。它们事实上会比z = A少。* A和B是与外积相同尺寸的完整矩阵。 – user3287648 2014-12-05 19:23:54