parallel-tree-search 0.3 → 0.4
raw patch · 2 files changed
+11/−33 lines, 2 filesdep +paralleldep −containers
Dependencies added: parallel
Dependencies removed: containers
Files
Control/Concurrent/ParallelTreeSearch.hs view
@@ -10,37 +10,15 @@ -- This Haskell library provides an implementation of parallel search -- based on the search tree provided by the package tree-monad. -- -module Control.Concurrent.ParallelTreeSearch ( parallelTreeSearch ) where+module Control.Concurrent.ParallelTreeSearch ( parSearch ) where -import Control.Monad import Control.Monad.SearchTree--import Control.Concurrent---- | Enumerate the leaves of a @SearchTree@ in parallel.-parallelTreeSearch :: Int -- ^ number of threads to use- -> SearchTree a -- ^ tree to search- -> IO [a] -- ^ lazy list of leaves-parallelTreeSearch threadCount tree =- do ctr <- newMVar 1- res <- newChan- queue <- newChan- writeChan queue tree- sequence (replicate threadCount (forkIO (search ctr res queue)))- liftM (foldr (\mx xs -> maybe [] (:xs) mx) []) (getChanContents res)--search :: MVar Int -> Chan (Maybe a) -> Chan (SearchTree a) -> IO ()-search ctr res queue = process =<< readChan queue- where- process None = finished- process (One x) = do writeChan res (Just x); finished- process (Choice l r) = do modifyMVar_ ctr (return.succ)- writeChan queue l- writeChan queue r- search ctr res queue-- finished = do count <- modifyMVar ctr ((\n -> return (n,n)).pred)- if count == 0 then writeChan res Nothing- else search ctr res queue-+import Control.Parallel +-- | Enumerate the leaves of a @SearchTree@ using parallel depth-first search.+parSearch :: SearchTree a -- ^ tree to search+ -> [a] -- ^ lazy list of leaves+parSearch None = []+parSearch (One x) = [x]+parSearch (Choice l r) = rs `par` (parSearch l ++ rs)+ where rs = parSearch r
parallel-tree-search.cabal view
@@ -1,5 +1,5 @@ Name: parallel-tree-search-Version: 0.3+Version: 0.4 Cabal-Version: >= 1.6 Synopsis: Parallel Tree Search Description: @@ -20,7 +20,7 @@ Extra-Source-Files: README Library- Build-Depends: base, tree-monad, containers+ Build-Depends: base, tree-monad, parallel Exposed-Modules: Control.Concurrent.ParallelTreeSearch Ghc-Options: -Wall