有趣的是,Data.Array.Repa實際上比hmatrix更快,這是意外的,因爲hmatrix是使用LAPACK實現的。這是因爲Repa使用的是取消裝箱類型?爲什麼矩陣的乘法運算比使用hmatrix更快?
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.011s
有2個核心運行時間:3.975s
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.714s
你試過建設有標準適當的微基準?看起來好像測量結構和乘法以及一次性打印所有IO一定會得到很多噪音和結果,而這些噪音和結果不會與任何實際用例相關聯。 –
此外,代表並行,LAPACK可能不在這種情況下 – MFlamer
@ ThomasM.DuBuisson:好的建議!但是,我不認爲在這種情況下構建會花費太多時間,並且由於我只在矩陣中打印了一個元素,IO也不是什麼大不了的事情。有空的時候我會試試Criterion。 – kai