Skip to content
Snippets Groups Projects
Forked from Glasgow Haskell Compiler / GHC
51034 commits behind the upstream repository.
  • Simon Marlow's avatar
    6015a94f
    Pointer Tagging · 6015a94f
    Simon Marlow authored
      
    This patch implements pointer tagging as per our ICFP'07 paper "Faster
    laziness using dynamic pointer tagging".  It improves performance by
    10-15% for most workloads, including GHC itself.
    
    The original patches were by Alexey Rodriguez Yakushev
    <mrchebas@gmail.com>, with additions and improvements by me.  I've
    re-recorded the development as a single patch.
    
    The basic idea is this: we use the low 2 bits of a pointer to a heap
    object (3 bits on a 64-bit architecture) to encode some information
    about the object pointed to.  For a constructor, we encode the "tag"
    of the constructor (e.g. True vs. False), for a function closure its
    arity.  This enables some decisions to be made without dereferencing
    the pointer, which speeds up some common operations.  In particular it
    enables us to avoid costly indirect jumps in many cases.
    
    More information in the commentary:
    
    http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts/HaskellExecution/PointerTagging
    6015a94f
    History
    Pointer Tagging
    Simon Marlow authored
      
    This patch implements pointer tagging as per our ICFP'07 paper "Faster
    laziness using dynamic pointer tagging".  It improves performance by
    10-15% for most workloads, including GHC itself.
    
    The original patches were by Alexey Rodriguez Yakushev
    <mrchebas@gmail.com>, with additions and improvements by me.  I've
    re-recorded the development as a single patch.
    
    The basic idea is this: we use the low 2 bits of a pointer to a heap
    object (3 bits on a 64-bit architecture) to encode some information
    about the object pointed to.  For a constructor, we encode the "tag"
    of the constructor (e.g. True vs. False), for a function closure its
    arity.  This enables some decisions to be made without dereferencing
    the pointer, which speeds up some common operations.  In particular it
    enables us to avoid costly indirect jumps in many cases.
    
    More information in the commentary:
    
    http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts/HaskellExecution/PointerTagging
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
RtsAPI.c 15.15 KiB