Подтвердить что ты не робот

Repa vs Mutable vector performance

Я закодировал две реализации алгоритма для вычисления всех собственных значений и собственных векторов симметричной матрицы. В одной реализации используется библиотека REPA

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

В то время как в другой реализации используются изменчивые векторы и монада ST

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

Алгоритм - это метод Якоби, описание которого можно найти в 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 будет больше, чем стоимость мутации матрицы с использованием монады ST, поскольку, насколько я понимаю, REPA не мутирует массив, но делает его копию.

Это REPA, сливающее всю операцию и не позволяющую копировать новый массив на каждой итерации? или это что-то еще?

Может кто-нибудь прокомментировать этот результат?

4b9b3361