WIP: typemap split on non-leaf TypeNames #16418
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There's still a few TODO items to get full use of this optimization, but I figured I'd give a sneak peek at some of the numbers I think I'm getting. Currently, this seems to give about a 50% speedup on loading precompiled files and makes the most significant dent to-date in #15048:
I think this should finally gets us to the realm where #15048 is caused by general slow startup issues (which may be helped by #5155) and not specific to reloading method tables :)
The longer technical explanation for what this patch does is that it creates a new hashmap level in the TypeMap object that splits on the uid of the names of concrete types. This gives us the following sorted levels:
linear-sorted list of the stuff that goes here (the technical definition of stuff isjl_args_morespecific_typename
)offs
(prevents matching varargs)jl_args_morespecific_typename
from another sig)::Any