Skip to content
  • Adam Nelson's avatar
    Redesign with symbolic values (incomplete) · 5fbca740
    Adam Nelson authored
    Thread and memory semantics are being overhauled to use lazy symbolic values,
    making the system similar to the one described in the Nienhuis paper.
    
    Everything up to uvmThreadSemantics compiles; uvmScheduler is still incomplete.
    Tests currently don't work.
    
    Changes include:
    
    - The "symbolic" monad defines lazy computations.
    
    - Thread semantics execute an entire block at a time.
    
    - Thread semantics is greatly simplified, with fewer record types, queues, and
      edge cases.
    
    - Thread semantics does not know anything about the actual values of its
      registers. Branching instructions must receive a "guess" value from the
      scheduler; this value may be a real register value or a branch prediction.
    
    - There are now only two scheduler step types: Commit (commits a memory message)
      and Proceed (moves a thread to the next block, optionally with a branch
      prediction).
    
    - Pluggable memory models are gone; concurrency semantics will be handled by an
      extra layer on top of the scheduler.
    
    - DefineUtils has some shortcuts for defining monads and num wrapper types.
    5fbca740