Commit 755d64f8 authored by Alfredo Di Napoli's avatar Alfredo Di Napoli Committed by Alfredo Di Napoli

Add basic benchmarks

parent c9385388
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
......@@ -9,9 +10,14 @@ import Gargantext.Core.Viz.Phylo.API.Tools (readPhylo)
import Gargantext.Core.Viz.Phylo.PhyloMaker (toPhylo)
import Gargantext.Core.Viz.Phylo.PhyloTools
import Gargantext.Prelude.Crypto.Auth (createPasswordHash)
import qualified Gargantext.Core.LinearAlgebra as LA
import qualified Gargantext.Core.Methods.Similarities.Accelerate.Distributional as Accelerate
import Test.Tasty.Bench
import Paths_gargantext
import qualified Data.Array.Accelerate as A
import qualified Data.Massiv.Array as Massiv
import qualified Data.Array.Accelerate.Interpreter as Naive
phyloConfig :: PhyloConfig
phyloConfig = PhyloConfig {
......@@ -37,6 +43,28 @@ phyloConfig = PhyloConfig {
, exportFilter = [ByBranchSize {_branch_size = 3.0}]
}
testMatrix :: A.Matrix Int
testMatrix = A.fromList (A.Z A.:. 14 A.:. 14) $
[ 30, 36, -36, -16, 0, 7, 34, -7, 5, -4, 0, 21, 6, -35,
0, -31, 20, -15, -22, -7, -22, -37, -29, -29, 23, -31, -29, -23,
-24, -29, 19, -6, 16, 7, 15, -27, -27, -30, -9, -33, 18, -23,
7, -36, 12, 26, -17, -3, -2, -15, -4, 26, 24, 9, -4, 4,
32, 28, -2, -10, 34, -3, 20, -9, -22, 20, -26, 34, 18, -21,
7, -12, 12, -2, 36, 10, 34, -37, 13, -9, -28, 34, 33, -18,
-4, -32, -1, 29, 29, -28, 24, 28, 35, 19, 8, -18, 25, -35,
-14, -4, -24, -1, 7, 34, -37, -28, -12, -32, -5, -23, 27, 33,
-36, -28, 21, -29, -2, -26, -4, -31, -26, -21, 33, -11, -33, 20,
25, 14, 5, -7, 5, 24, 37, 1, -3, 23, 25, -16, 17, 5,
-35, 36, -2, -2, 1, -14, 34, -30, -10, 12, 25, 21, 0, 34,
17, -1, 20, -19, 15, 20, -5, -30, -35, -13, 5, 17, -10, -19,
-34, -11, -18, 26, -29, -28, 0, 3, 23, -6, 36, 4, 16, 28,
13, -37, -16, 2, 7, -13, 21, -10, -33, -33, -26, -19, -1, 29]
{-# INLINE testMatrix #-}
testMassivMatrix :: Massiv.Matrix Massiv.D Int
testMassivMatrix = LA.accelerate2MassivMatrix testMatrix
{-# INLINE testMassivMatrix #-}
main :: IO ()
main = do
_issue290Phylo <- force . setConfig phyloConfig <$> (readPhylo =<< getDataFileName "bench-data/phylo/issue-290.json")
......@@ -51,5 +79,10 @@ main = do
, bgroup "Phylo" [
bench "toPhylo (small)" $ nf toPhylo issue290PhyloSmall
]
, bgroup "distributional" [
bench "Accelerate (Naive)" $ nf (Accelerate.distributionalWith @Double Naive.run) testMatrix
, bench "Accelerate (LLVM)" $ nf Accelerate.distributional testMatrix
, bench "Massiv " $ nf (Massiv.computeAs Massiv.U . LA.distributional @Double) testMassivMatrix
]
]
]
......@@ -902,6 +902,10 @@ benchmark garg-bench
Paths_gargantext
build-depends: base
, bytestring ^>= 0.11.5.3
, accelerate
, accelerate-llvm
, massiv
, deepseq
, gargantext
, gargantext-prelude
, tasty-bench
......
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-|
Module : Gargantext.Core.LinearAlgebra
Description : Linear Algebra utility functions
......@@ -19,6 +20,11 @@ module Gargantext.Core.LinearAlgebra (
-- * Functions
, createIndices
-- * Convertion functions
, accelerate2MassivMatrix
, massiv2AccelerateMatrix
, massiv2AccelerateVector
-- * Operations on matrixes
, (.*)
, diag
......@@ -26,15 +32,18 @@ module Gargantext.Core.LinearAlgebra (
, distributional
) where
import Data.Array.Accelerate qualified as Acc
import Data.Bimap (Bimap)
import Data.Bimap qualified as Bimap
import Data.List.Split qualified as Split
import Data.Map.Strict (Map)
import Data.Map.Strict qualified as M
import Data.Massiv.Array (D, Matrix, Vector, Array, Ix3)
import Data.Massiv.Array qualified as A
import Data.Set qualified as S
import Data.Set (Set)
import Prelude
import Data.Massiv.Array qualified as A
import Data.Massiv.Array (D, Matrix, Vector, Array, Ix3)
import Protolude.Safe (headMay)
newtype Index = Index { _Index :: Int }
deriving newtype (Eq, Show, Ord, Num, Enum)
......@@ -48,6 +57,28 @@ createIndices = set2indices . map2set
set2indices :: Ord t => Set t -> Bimap Index t
set2indices s = foldr (uncurry Bimap.insert) Bimap.empty (zip [0..] $ S.toList s)
-- | Converts an accelerate matrix into a Massiv matrix.
accelerate2MassivMatrix :: (A.Unbox a, Acc.Elt a) => Acc.Matrix a -> Matrix D a
accelerate2MassivMatrix m =
let (Acc.Z Acc.:. _r Acc.:. c) = Acc.arrayShape m
in A.delay $ A.fromLists' @A.U A.Par $ Split.chunksOf c (Acc.toList m)
-- | Converts a massiv matrix into an accelerate matrix.
massiv2AccelerateMatrix :: (Acc.Elt a, A.Source r a) => Matrix r a -> Acc.Matrix a
massiv2AccelerateMatrix m =
let m' = A.toLists2 m
r = Prelude.length m'
c = maybe 0 Prelude.length (headMay m')
in Acc.fromList (Acc.Z Acc.:. r Acc.:. c) (mconcat m')
-- | Converts a massiv vector into an accelerate one.
massiv2AccelerateVector :: (A.Source r a, Acc.Elt a) => A.Vector r a -> Acc.Vector a
massiv2AccelerateVector m =
let m' = A.toList m
r = Prelude.length m'
in Acc.fromList (Acc.Z Acc.:. r) m'
-- | Computes the diagnonal matrix of the input one.
diag :: Num e => Matrix D e -> Vector D e
diag matrix =
......
......@@ -97,24 +97,6 @@ testMatrix_02 = SquareMatrix $ fromList (Z :. 7 :. 7) $
13, -37, -16, 2, 7, -13, 21]
accelerate2MassivMatrix :: (Massiv.Unbox a, Elt a) => Matrix a -> Massiv.Matrix Massiv.D a
accelerate2MassivMatrix m =
let (Z :. _r :. c) = A.arrayShape m
in Massiv.delay $ Massiv.fromLists' @Massiv.U Massiv.Par $ Split.chunksOf c (A.toList m)
massiv2AccelerateMatrix :: (Elt a, Massiv.Source r a) => Massiv.Matrix r a -> Matrix a
massiv2AccelerateMatrix m =
let m' = Massiv.toLists2 m
r = Prelude.length m'
c = maybe 0 Prelude.length (headMay m')
in A.fromList (Z :. r :. c) (mconcat m')
massiv2AccelerateVector :: (Massiv.Source r a, Elt a) => Massiv.Vector r a -> Vector a
massiv2AccelerateVector m =
let m' = Massiv.toList m
r = Prelude.length m'
in A.fromList (Z :. r) m'
--
-- Main test runner
--
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment