{-# OPTIONS -Wall -fno-warn-orphans -fno-warn-missing-signatures #-} module Data.Array.Parallel.Unlifted.Distributed.TheGang (theGang) where import Data.Array.Parallel.Unlifted.Distributed.Gang import Control.Concurrent (getNumCapabilities) import System.IO.Unsafe (unsafePerformIO) -- | DPH programs use this single, shared gang of threads. -- The gang exists at top level, and is initialised at program start. -- -- The vectoriser guarantees that the gang is only used by a single -- computation at a time. This is true because the program produced -- by the vector only uses flat parallelism, so parallel computations -- don't invoke further parallel computations. If the vectorised program -- tries to use nested parallelism then there is a bug in the vectoriser, -- and the code will run sequentially. -- theGang :: Gang theGang = unsafePerformIO (getNumCapabilities >>= forkGang) {-# NOINLINE theGang #-}