dph-base-0.6.0.1: Data/Array/Parallel/Base/TracePrim.hs
-- | When `tracePrimEnabled`, DPH programs will print out what flat array
-- primitives they're using at runtime. See `tracePrim` for details.
module Data.Array.Parallel.Base.TracePrim
( tracePrim
, TracePrim(..))
where
import Data.Array.Parallel.Base.Config
import qualified Debug.Trace
-- | Print tracing information to console.
--
-- This function is used to wrap the calls to DPH primitives defined
-- in @dph-prim-par@:"Data.Array.Parallel.Unlifted"
--
-- Tracing is only enabled when `tracePrimEnabled` is `True`.
-- otherwise it's a no-op.
--
tracePrim :: TracePrim -> a -> a
tracePrim tr x
| tracePrimEnabled = Debug.Trace.trace (Prelude.show tr) x
| otherwise = x
-- | Records information about the use of a flat array primitive.
--
-- These are the operator names that the vectoriser introduces.
--
-- The actual implementation of each operator varies depending on what
-- DPH primitive library is being used.
--
-- We only trace operators that are at least O(n) in complexity.
data TracePrim
= TraceReplicate { traceCount :: Int}
| TraceRepeat { traceCount :: Int, traceSrcLength :: Int }
| TraceIndex { traceIndex :: Int, traceSrcLength :: Int }
| TraceExtract { traceStart :: Int, traceSliceLength :: Int, traceSrcLength :: Int }
| TraceDrop { traceCount :: Int, traceSrcLength :: Int }
| TracePermute { traceSrcLength :: Int }
| TraceBPermuteDft { traceSrcLength :: Int }
| TraceBPermute { traceSrcLength :: Int }
| TraceMBPermute { traceSrcLength :: Int }
| TraceUpdate { traceSrcLength :: Int, traceModLength :: Int }
| TraceAppend { traceDstLength :: Int }
| TraceInterleave { traceDstLength :: Int }
| TracePack { traceSrcLength :: Int }
| TraceCombine { traceSrcLength :: Int }
| TraceCombine2 { traceSrcLength :: Int }
| TraceMap { traceSrcLength :: Int }
| TraceFilter { traceSrcLength :: Int, traceDstLength :: Int }
| TraceZipWith { traceSrc1Length :: Int, traceSrc2Length :: Int }
| TraceFold { traceSrcLength :: Int }
| TraceFold1 { traceSrcLength :: Int }
| TraceAnd { traceSrcLength :: Int }
| TraceSum { traceSrcLength :: Int }
| TraceScan { traceSrcLength :: Int }
| TraceIndexed { traceSrcLength :: Int }
-- Enumerations.
| TraceEnumFromTo { traceDstLength :: Int }
| TraceEnumFromThenTo { traceDstLength :: Int }
| TraceEnumFromStepLen { traceDstLength :: Int }
| TraceEnumFromStepLenEach { traceDstLength :: Int }
-- Selectors.
| TraceMkSel2 { traceSrcLength :: Int }
| TraceTagsSel2 { traceDstLength :: Int }
| TraceIndicesSel2 { traceDstLength :: Int }
| TraceElementsSel2_0 { traceSrcLength :: Int }
| TraceElementsSel2_1 { traceSrcLength :: Int }
| TraceMkSelRep2 { traceSrcLength :: Int }
| TraceIndicesSelRep2 { traceSrcLength :: Int }
| TraceElementsSelRep2_0 { traceSrcLength :: Int }
| TraceElementsSelRep2_1 { traceSrcLength :: Int }
-- Operations on segmented arrays.
| TraceReplicate_s { traceSrcLength :: Int }
| TraceReplicate_rs { traceCount :: Int, traceSrcLength :: Int }
| TraceAppend_s { traceDstLength :: Int }
| TraceFold_s { traceSrcLength :: Int }
| TraceFold1_s { traceSrcLength :: Int }
| TraceFold_r { traceSrcLength :: Int }
| TraceSum_r { traceSrcLength :: Int }
| TraceIndices_s { traceDstLength :: Int }
deriving Prelude.Show