
#15665: Break up the stable pointer table -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: (none) Type: feature request | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.4.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #7670 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by dfeuer): Ah, I think I do see one. Start by using one free list per block, and tracking the number of free list entries both per block and per capability. When adding an entry to the free list for a block, check whether both of the following are true: 1. The block has "sufficient" free entries (to be worth the synchronization overhead) and 2. The capability has "sufficient" other free entries (so it's not going to have to jump straight from the donor line to the recipient line). In that case, the capability relinquishes the block to a shared list. Any capability that runs out of free entries can try to get a (partially used) block from that list and only allocate a fresh one if that fails. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15665#comment:8 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler