#include "fusion-phases.h"
module Data.Array.Parallel.Unlifted.Distributed.Data.UVSegd
( lengthD
, takeLengthsD
, takeIndicesD
, takeElementsD
, takeStartsD
, takeSourcesD
, takeVSegidsD
, takeUSSegdD)
where
import Data.Array.Parallel.Unlifted.Distributed.Primitive.DT
import Data.Array.Parallel.Unlifted.Sequential.UVSegd (UVSegd)
import Data.Array.Parallel.Unlifted.Sequential.USSegd (USSegd)
import Data.Array.Parallel.Unlifted.Sequential.Vector
import Data.Array.Parallel.Pretty
import Control.Monad
import Prelude as P
import qualified Data.Array.Parallel.Unlifted.Sequential.UVSegd as UVSegd
import qualified Data.Array.Parallel.Unlifted.Distributed.Data.USSegd as DUSegd
instance DT UVSegd where
data Dist UVSegd
= DUVSegd !(Dist (Vector Int))
!(Dist USSegd)
data MDist UVSegd s
= MDUVSegd !(MDist (Vector Int) s)
!(MDist USSegd s)
indexD str (DUVSegd vsegids ussegds) i
= UVSegd.mkUVSegd
(indexD (str P.++ "/indexD[UVSegd]") vsegids i)
(indexD (str P.++ "/indexD[UVSegd]") ussegds i)
newMD g
= liftM2 MDUVSegd (newMD g) (newMD g)
readMD (MDUVSegd vsegids ussegds) i
= liftM2 UVSegd.mkUVSegd (readMD vsegids i) (readMD ussegds i)
writeMD (MDUVSegd vsegids ussegds) i uvsegd
= do writeMD vsegids i (UVSegd.takeVSegids uvsegd)
writeMD ussegds i (UVSegd.takeUSSegd uvsegd)
unsafeFreezeMD (MDUVSegd vsegids ussegds)
= liftM2 DUVSegd (unsafeFreezeMD vsegids)
(unsafeFreezeMD ussegds)
deepSeqD uvsegd z
= deepSeqD (UVSegd.takeVSegids uvsegd)
$ deepSeqD (UVSegd.takeUSSegd uvsegd) z
sizeD (DUVSegd _ ussegd)
= sizeD ussegd
sizeMD (MDUVSegd _ ussegd)
= sizeMD ussegd
measureD uvsegd
= "UVSegd " P.++ show (UVSegd.takeVSegids uvsegd)
P.++ " " P.++ measureD (UVSegd.takeUSSegd uvsegd)
instance PprPhysical (Dist UVSegd) where
pprp (DUVSegd vsegids ussegds)
= text "DUVSegd"
$$ (nest 7 $ vcat
[ text "vsegids: " <+> pprp vsegids
, text "ussegds: " <+> pprp ussegds])
lengthD :: Dist UVSegd -> Dist Int
lengthD (DUVSegd _ ussegd)
= DUSegd.lengthD ussegd
takeLengthsD :: Dist UVSegd -> Dist (Vector Int)
takeLengthsD (DUVSegd _ ussegd)
= DUSegd.takeLengthsD ussegd
takeIndicesD :: Dist UVSegd -> Dist (Vector Int)
takeIndicesD (DUVSegd _ ussegd)
= DUSegd.takeIndicesD ussegd
takeElementsD :: Dist UVSegd -> Dist Int
takeElementsD (DUVSegd _ ussegd)
= DUSegd.takeElementsD ussegd
takeStartsD :: Dist UVSegd -> Dist (Vector Int)
takeStartsD (DUVSegd _ ussegd)
= DUSegd.takeStartsD ussegd
takeSourcesD :: Dist UVSegd -> Dist (Vector Int)
takeSourcesD (DUVSegd _ ussegd)
= DUSegd.takeSourcesD ussegd
takeVSegidsD :: Dist UVSegd -> Dist (Vector Int)
takeVSegidsD (DUVSegd vsegids _)
= vsegids
takeUSSegdD :: Dist UVSegd -> Dist USSegd
takeUSSegdD (DUVSegd _ ussegd)
= ussegd