packages feed

futhark-0.25.35: src/Futhark/Profile/EventSummary.hs

module Futhark.Profile.EventSummary (EvSummary (..), eventSummaries) where

import Data.Map qualified as M (Map, fromListWith)
import Data.Text qualified as T (Text)
import Futhark.Profile (ProfilingEvent (ProfilingEvent))

data EvSummary = EvSummary
  { evCount :: Integer,
    evSum :: Double,
    evMin :: Double,
    evMax :: Double
  }
  deriving (Show)

eventSummaries :: [ProfilingEvent] -> M.Map (T.Text, T.Text) EvSummary
eventSummaries = M.fromListWith comb . map pair
  where
    pair (ProfilingEvent name dur provenance _details) =
      ((name, provenance), EvSummary 1 dur dur dur)
    comb (EvSummary xn xdur xmin xmax) (EvSummary yn ydur ymin ymax) =
      EvSummary (xn + yn) (xdur + ydur) (min xmin ymin) (max xmax ymax)