[GHC] #14741: High-memory usage during compilation using Template Haskell
GHC
ghc-devs at haskell.org
Fri Jan 18 12:04:38 UTC 2019
#14741: High-memory usage during compilation using Template Haskell
-------------------------------------+-------------------------------------
Reporter: donatello | Owner: sighingnow
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.2.2
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Compile-time | Unknown/Multiple
performance bug | Test Case:
Blocked By: | Blocking:
Related Tickets: #16190 | Differential Rev(s): Phab:D4384
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by hsyl20):
I have made a patch to add an helper to TH to create "bytes" primitives:
https://gitlab.haskell.org/hsyl20/ghc/tree/hsyl20-T14741
Using it we can patch `file-embed` like this:
{{{
19c19
< module Data.FileEmbed
---
> module FileEmbed
49,53c49
< #if MIN_VERSION_template_haskell(2,5,0)
< , Lit (StringL, StringPrimL, IntegerL)
< #else
< , Lit (StringL, IntegerL)
< #endif
---
> , Lit (..)
60a57
> import Language.Haskell.TH
65a63
> import qualified Data.ByteString.Internal as B
154c152,156
< #if MIN_VERSION_template_haskell(2, 8, 0)
---
> #if MIN_VERSION_template_haskell(2, 15, 0)
> `AppE` LitE (bytesPrimL (
> let B.PS ptr off sz = bs
> in mkBytes ptr (fromIntegral off) (fromIntegral sz))))
> #elif MIN_VERSION_template_haskell(2, 8, 0)
}}}
Using previous patches for #16198 and #16190, we get the following results
when we embed a file of the given size:
* V1: HEAD + patch for #16198
* V2: V1 + patch for #16190 (default threshold set to 500K)
* V3: V2 + this patch
|| Size || 8.6.3 || V1 || V2 || V3 || Gain (V3 over v2)
||
|| 128 || 2.650 || 2.331 || 2.346 || 2.291 || +2% ||
|| 3K || 2.651 || 2.289 || 2.290 || 2.310 || -1% ||
|| 30K || 2.590 || 2.353 || 2.307 || 2.299 || +0% ||
|| 100K || 2.717 || 2.379 || 2.389 || 2.298 || +4% ||
|| 500K || 3.621 || 2.814 || 2.331 || 2.315 || +1% ||
|| 1M || 4.694 || 3.526 || 2.654 || 2.320 || +12% ||
|| 2M || 6.784 || 4.668 || 2.650 || 2.350 || +11% ||
|| 3M || 8.851 || 5.616 || 3.073 || 2.400 || +22% ||
|| 30M || 63.181 || 34.318 || 8.517 || 3.390 || +60% ||
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14741#comment:18>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list