Stability Property Registration #
A stability property records that a signal maintains a specific value for a known duration.
Instances For
def
Sparkle.Core.OptimizedSim.StabilityProperty.applies
{d : Domain.DomainConfig}
(prop : StabilityProperty d)
(signalId : String)
(currentCycle : Nat)
:
Equations
Instances For
def
Sparkle.Core.OptimizedSim.StabilityProperty.remainingCycles
{d : Domain.DomainConfig}
(prop : StabilityProperty d)
(currentCycle : Nat)
:
Equations
- prop.remainingCycles currentCycle = prop.startCycle + prop.duration - currentCycle
Instances For
Temporal Property Registry #
Stores proven stability properties that can be used for cycle-skipping.
- properties : List (StabilityProperty d)
Instances For
Create an empty property registry
Instances For
def
Sparkle.Core.OptimizedSim.PropertyRegistry.addProperty
{d : Domain.DomainConfig}
(reg : PropertyRegistry d)
(prop : StabilityProperty d)
:
Add a stability property to the registry
Equations
- reg.addProperty prop = { properties := prop :: reg.properties }
Instances For
def
Sparkle.Core.OptimizedSim.PropertyRegistry.canSkip
{d : Domain.DomainConfig}
(reg : PropertyRegistry d)
(signalId : String)
(currentCycle : Nat)
:
Query if we can skip cycles for a signal at current time
Equations
- One or more equations did not get rendered due to their size.
Instances For
Simulation Statistics #
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Sparkle.Core.OptimizedSim.SimulationStats.init = { totalCycles := 0, evaluatedCycles := 0, skippedCycles := 0, skipEvents := 0 }
Instances For
Equations
- stats.addEvaluation = { totalCycles := stats.totalCycles, evaluatedCycles := stats.evaluatedCycles + 1, skippedCycles := stats.skippedCycles, skipEvents := stats.skipEvents }
Instances For
Equations
- stats.addSkip n = { totalCycles := stats.totalCycles, evaluatedCycles := stats.evaluatedCycles, skippedCycles := stats.skippedCycles + n, skipEvents := stats.skipEvents + 1 }
Instances For
Equations
- stats.speedup = if (stats.evaluatedCycles == 0) = true then 1.0 else (stats.evaluatedCycles.toFloat + stats.skippedCycles.toFloat) / stats.evaluatedCycles.toFloat
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Optimized Simulator #
def
Sparkle.Core.OptimizedSim.simulateOptimized
{d : Domain.DomainConfig}
(registry : PropertyRegistry d)
(signalId : String)
(signal : Signal.Signal d Nat)
(maxCycles : Nat)
:
Simulate with cycle-skipping optimization (Nat signals only for simplicity)
Equations
- One or more equations did not get rendered due to their size.
Instances For
partial def
Sparkle.Core.OptimizedSim.simulateOptimized.sim
{d : Domain.DomainConfig}
(registry : PropertyRegistry d)
(signalId : String)
(signal : Signal.Signal d Nat)
(maxCycles t : Nat)
(acc : List Nat)
(stats : SimulationStats)
:
def
Sparkle.Core.OptimizedSim.simulateStandard
{d : Domain.DomainConfig}
(signal : Signal.Signal d Nat)
(maxCycles : Nat)
:
Simulate without optimization (for comparison)
Equations
- Sparkle.Core.OptimizedSim.simulateStandard signal maxCycles = List.map signal.atTime (List.range maxCycles)
Instances For
Helper Functions #
def
Sparkle.Core.OptimizedSim.mkStabilityProperty
{d : Domain.DomainConfig}
(signalId : String)
(value startCycle duration : Nat)
:
Equations
- Sparkle.Core.OptimizedSim.mkStabilityProperty signalId value startCycle duration = { signalId := signalId, startCycle := startCycle, value := value, duration := duration }
Instances For
Equations
Instances For
Example Usage #
Equations
Instances For
Equations
- Sparkle.Core.OptimizedSim.resetCounterProperty = Sparkle.Core.OptimizedSim.mkStabilityProperty "resetCounter" 0 0 1000
Instances For
Equations
- One or more equations did not get rendered due to their size.