Data.Array.Repa が実際に hmatrix よりも高速であることは興味深いことです。hmatrix は LAPACK を使用して実装されているため、これは予想外です。これはレパがアンボックスタイプを使っているからでしょうか?
import Data.Array.Repa
import Data.Array.Repa.Algorithms.Matrix
main = do
let
a = fromListUnboxed (Z:.1000:.1000::DIM2) $ replicate (1000*1000) 1.0 :: Array U DIM2 Double
b = fromListUnboxed (Z:.1000:.1000::DIM2) $ replicate (1000*1000) 1.0 :: Array U DIM2 Double
m <- (a `mmultP` b)
print $ m!(Z:.900:.900)
1 コアでの
実行時間: 7.011 秒 2 コアでの実行時間: 3.975 秒
import Numeric.LinearAlgebra
import Numeric.LinearAlgebra.LAPACK
main = do
let
a = (1000><1000) $ replicate (1000*1000) 1.0
b = (1000><1000) $ replicate (1000*1000) 1.0
print $ (a `multiplyR` b) @@> (900,900)
実行時間: 20.714 秒