module DPH_mmult (main) where import Data.Vector as V import Control.DeepSeq import Prelude hiding (pi) import DPH_mmult_wrapper import System.Random as Rand import Data.List as L import Data.Array.Parallel.PArray as PA import Data.Time.Clock import GHC.Conc (numCapabilities, getNumCapabilities) import System.CPUTime (getCPUTime) import Control.Exception (evaluate) import Utils_mmult --Dado que nf no funciona en tiempo de ejecución instance (NFData a, PA a) => NFData (PArray a) where rnf = rnf . PA.toVector fromVectors = PA.fromVector . V.map (PA.fromVector) paMatrixA = fromVectors matrixA paMatrixB = fromVectors matrixB --Esta funcion es sólo para poder imprmir el resultado igual que --vector, para comparar que da bien contra el resto de los ejemplos toVectors pas = (V.map PA.toVector (PA.toVector pas)) main = do putStrLn $ "numCapabilites = " L.++ show numCapabilities getNumCapabilities >>= \a -> putStrLn ("getNumCapabilities = " L.++ show a) evaluate (rnf paMatrixA) evaluate (rnf paMatrixB) putStrLn "vectores evaluados!" start <- getCurrentTime let result = matMult_wrapper paMatrixA paMatrixB evaluate (rnf result) end <- getCurrentTime putStrLn $ "DPH: " {-L.++ show (toVectors result)-} L.++ " in " L.++ show (diffUTCTime end start)