One piece I'm curious about, reading this thread: why do we have so many 
IntMaps and operations on them? Name lookup is a fundamental operation a 
compiler must do, and that would use an IntMap: good. But maybe there are other 
IntMaps used that are less necessary. A key example: whenever we do 
substitution, we track an InScopeSet, which is really just an IntMap. This 
InScopeSet remembers the name of all variables in scope, useful when we need to 
create a new variable name (this is done by uniqAway). Yet perhaps the tracking 
of these in-scope variables is very expensive and comprises much of the IntMap 
time. Might it be better just to always work in a monad capable of giving fresh 
names? We actually don't even need a monad, if that's too annoying. Instead, we 
could just pass around an infinite list of fresh uniques. This would still be 
clutterful, but if it grants us a big speed improvement, the clutter might be 
worth it.

The high-level piece here is that there may be good things that come from 
understanding where these IntMaps arise.

Richard

> On Jul 2, 2021, at 4:08 AM, Simon Peyton Jones via ghc-devs 
> <ghc-devs@haskell.org> wrote:
> 
> Jeff
>  
> Great stuff!  Welcome.
>  
> I strongly urge you to keep a constantly-update status wiki page, which lists 
> the ideas you are working on, and points to relevant resources and tickets.  
> An email thread like this is a good way to gather ideas, but NOT a good way 
> to organise and track them.
>  
> Looking carefully at profiles is a good plan.  That’s the hard data!
>  
> I think that some careful investigation of IntMap (at least the bits that GHC 
> uses heavily) would be a good idea.  Clearly we spend a lot of time in these 
> maps, so speedups here will yield a lot of benefit.  Look at the heavy 
> hitters from the profile, stare at the Core code and see if it’s s good as it 
> can be.
>  
> For example, Sebastian discovered a strange infelicity in IntMap.lookup, 
> which I’ve documented in a new ticket
> https://gitlab.haskell.org/ghc/ghc/-/issues/20069 
> <https://gitlab.haskell.org/ghc/ghc/-/issues/20069>
>  
> I think it’d also be worth measuring how unbalanced our IntMap trees get.  See
>    https://gitlab.haskell.org/ghc/ghc/-/issues/19820 
> <https://gitlab.haskell.org/ghc/ghc/-/issues/19820>
> The speculation there is that we are getting very unbalanced trees.  So 
> measure it!  If it’s true, we could improve matters by using a different 
> IntMap; or maybe by scrambling the key a bit --- see the ticket.
>  
> Simon
>  
> From: ghc-devs <ghc-devs-boun...@haskell.org> On Behalf Of Young, Jeff
> Sent: 02 July 2021 02:36
> To: ghc-devs@haskell.org
> Subject: Trying to speedup GHC compile times...Help!
>  
> Hi ghc devs,
> 
>  
> 
> I'm a long-time Haskeller but am just getting into GHC development. I started 
> a 12 week internship at Tweag I/O under Richard Eisenberg this week with the 
> singular goal to speedup GHC compile times. I'm specifically looking to 
> contribute to ghc issues 18541 
> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.haskell.org%2Fghc%2Fghc%2F-%2Fissues%2F18541&data=04%7C01%7Csimonpj%40microsoft.com%7C8a3369ac28654df6f08008d93cf9e28b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637607867394069068%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Zh5dzhUSjwsZdmr8B3G5T49CssX%2Bv8IGcHILRp8Ekjc%3D&reserved=0>and
>  18535 
> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.haskell.org%2Fghc%2Fghc%2F-%2Fissues%2F18535&data=04%7C01%7Csimonpj%40microsoft.com%7C8a3369ac28654df6f08008d93cf9e28b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637607867394079062%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=2I%2BQXmd%2Bn1nGz%2Bcr0qvhq9BLkKCucJkedPNxu7RpKSw%3D&reserved=0>.
>  So I thought I would reach out to the community to get some direction on 
> issues/features/problems to tackle in the pursuit of faster compilation 
> times. This is a full time internship and so I think there is a real 
> opportunity to nail down a deliverable for the community, but I want to get 
> some guidance from the experts (you fine people!) before going down a rabbit 
> hole.
> 
>  
> 
> To be specific I'm looking for lingering items such as:
> 
>   1. It would be great if we had <thing-here> but no one has time.
> 
>   2. Primop foo is half complete but is the right type for 
> <common-use-case-which-is-currently-just-a-list>.
> 
>   3. Swap <some-type> to an array-like type non-incrementally, that is, 
> establish a patch that rips out the previous type and replaces it with the 
> array-like across the entire compiler, rather than module-by-module.
> 
>  
> 
> Point 2 is a specific reference to MR 3571 
> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.haskell.org%2Fghc%2Fghc%2F-%2Fmerge_requests%2F3571&data=04%7C01%7Csimonpj%40microsoft.com%7C8a3369ac28654df6f08008d93cf9e28b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637607867394079062%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=5Sr1EjmeYN8ttZHFc4FS9%2BAXH1KoRSaNoozORhwwQYA%3D&reserved=0>
>  but I'm unsure of the status and etiquette around MRs, and I'm unsure 
> exactly how fulfilling the todos at the end of that MR would aid in faster 
> compilation times (and if there is evidence to that effect somewhere).
> 
>  
> 
> Thanks for the help!
> 
>  
> 
> - Jeff
> 
>  
> 
>  
> 
>    
> 
> _______________________________________________
> ghc-devs mailing list
> ghc-devs@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to