[GHC] #9872: Runing type functions is too slow
GHC
ghc-devs at haskell.org
Fri Dec 19 15:38:39 UTC 2014
#9872: Runing type functions is too slow
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner:
Type: bug | Status: closed
Priority: normal | Milestone:
Component: Compiler | Version: 7.8.3
Resolution: fixed | Keywords:
Operating System: | Architecture: Unknown/Multiple
Unknown/Multiple | Difficulty: Unknown
Type of failure: | Blocked By:
None/Unknown | Related Tickets:
Test Case: |
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Comment (by goldfire):
I have some work-in-progress [https://github.com/goldfirere/ghc/tree/wip
/opt-flatten here] that cuts allocation amounts for the T9872x cases by
half. I'm still twiddling knobs to find the best combination of settings,
but the high-order bit is this: try to reduce a type family (in
`flatten_exact_fam_app_fully`) '''before''' flattening the arguments. Only
if that fails do we flatten the arguments.
This works well if we have something like
{{{
type family F a where
F a = G a
type family G a
type family H a where
H Bool = Char
}}}
and we call `F (H Bool)`. The current (HEAD) flattener will flatten `H
Bool`, then reduce `F Char` to `G Char`, then flatten `Char` ''again'',
then try to reduce `G Char`. With my patch, it just reduces `F (H Bool)`
to `G (H Bool)`, then tries to reduce `G`, fails, and then reduces `H
Bool` to `Char`. This saves one flattening. But, you can imagine it saving
a lot more (and it does, in practice).
On current tests, it works better not to use the flat-cache (which amounts
to memoization of type-level functions) for this very-eager reduction.
I'll look forward to trying Janek's tests, which satisfies a direct need:
I've been worried that I'm overspecializing to the existing tests, and
fresh tests will help.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9872#comment:23>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list