优化:在每一步计算或在最后计算所有?

时间:2013-08-15 09:47:14

标签: c# optimization vectorization

我做了很多计算,中间,我得到一个结果,称之为X.

我有一些与X相关的变量:

X_sum :到目前为止总数

X_sumOfSquares :顾名思义;每次产生X时(X * X)的总和,基本上是X ^ 2的总和。

N:计算X的操作被调用的次数

最后,我使用这些数字来计算X的真实均值所在的置信区间,基于我的样本的平均值。

无论我想要实现什么,我的问题是:

假设我计算X 1000次,所以N = 1000.哪种方法更快:

  1. 每次有X时更新x_sum和x_sumOfSquares。
  2. 在开头创建大小为1000的数组,在该数组中存储X的所有值。最后遍历数组并计算x_sum和x_sumOfSquares。
  3. 对于第二种方法,确实应该有一种方法来矢量化这种方法,有很多方法可以在C ++中实现这一点,例如我记得英特尔C ++有一些这种简单情况的自动矢量化,但我不知道如何在C#中做到这一点。

1 个答案:

答案 0 :(得分:0)

第一种方法比天真迭代更快,因为您不需要在过程结束时迭代X向量。

如果您只需要统计计算的X值向量,那么内存使用也会更便宜。

您还可以考虑使用Linq方法计算Sum / Mean / Count(Linq查询并行运行)     总和:总和()     N:计数()     Std:Aggregate()