Ich habe einen einfachen Baum, der eine Reihe von Werten in seinen Blättern speichert und einige einfache Funktionen, um das Testen zu erleichtern.Wie kann ich diesen Baum in Haskell parallel reduzieren?
Wenn ich eine unbegrenzte Anzahl von Prozessoren habe und der Baum ausgeglichen ist, sollte ich in der Lage sein, den Baum mit jeder binären assoziativen Operation (+, *, min, lcm) in logarithmischer Zeit zu reduzieren.
Indem ich Tree zu einer Instanz von Foldable mache, kann ich den Baum mit integrierten Funktionen sequentiell von links nach rechts oder von rechts nach links verkleinern, aber das benötigt lineare Zeit.
Wie kann ich Haskell verwenden, um einen solchen Baum parallel zu reduzieren?
{-# LANGUAGE DeriveFoldable #-}
data Tree a = Leaf a | Node (Tree a) (Tree a)
deriving (Show, Foldable)
toList :: Tree a -> [a]
toList = foldr (:) []
range :: Int -> Int -> Tree Int
range x y
| x < y = Node (range x y') (range x' y)
| otherwise = Leaf x
where
y' = quot (x + y) 2
x' = y' + 1
Können Sie nicht einfach die Implementierung von 'Faltbar' anpassen, um parallel zu sein? – Xodarap
Mögliches Duplikat von [Beschleunigung der Binärbaumdurchquerung mit mehreren Prozessoren Haskell (parallel)] (http: // stackoverflow.com/questions/27091624/Beschleunigung-binary-Tree-Traversal-mit-Multiple-Prozessoren-hakell-parallel) – jberryman
@ Xodarap Wie würde ich das tun? –