Repa vs Mutable矢量性能

时间:2015-03-26 17:18:12

标签: haskell repa

我编写了两种算法实现来计算对称矩阵的所有特征值和特征向量。一个实现使用REPA库

https://github.com/felipeZ/Haskell-abinitio/blob/master/Science/QuantumChemistry/NumericalTools/JacobiMethod.hs

虽然其他实现使用可变向量和ST monad

https://github.com/felipeZ/Haskell-abinitio/blob/master/Science/QuantumChemistry/NumericalTools/JacobiMethodST.hs

该算法是Jacobi方法,其描述可在以下找到 http://en.wikipedia.org/wiki/Jacobi_eigenvalue_algorithm

我使用100个100 x 100的矩阵测试了这两个实现,顺序运行代码,我发现了以下时间:

                  REPA      Mutable Vectors

Total time(s)    6.7            28.5

GC (s)           0.2             1.2

雅可比算法需要迭代更新一些矩阵条目,这意味着大多数矩阵在迭代之间保持不变。  因此,我会猜错(错误地)在REPA实现中为每次迭代复制新矩阵的成本将大于使用monad ST变换矩阵的成本,因为据我所知,REPA不会改变数组,但复制它。

REPA融合所有操作并避免在每次迭代中复制新数组?还是别的什么?

有人可以对此结果发表评论吗?

0 个答案:

没有答案