-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Lowering of large basic blocks takes a very long time (>40s) #48990
Comments
I wonder if this is similar to what I was seeing in #41684 |
While we're on the topic of things which cause superlinear scaling of compilation latency, is there a related issue for functions with lots of slots? In TuringLang/Turing.jl#1754 (comment) we were seeing 20+ min compile times and actual OOMs because of those. |
Not that I know of. Do you have an MWE that bypasses the Turing/Zygote pipeline and just shows the expensive eval? If so, please do go ahead and file an issue for it. The closer you can get to a function that is dead simple but happens to have a lot of slots and demonstrates the scaling issue, the easier it will be to investigate improvements in the compiler. |
I found that this is due to linear lookup of variables in closure conversion and a couple other places. Can be fixed pretty easily by throwing a hash table at it. |
Replace some more linear lookups with hash tables.
Replace some more linear lookups with hash tables.
For functions with very large basic blocks, it looks like lowering can take 10's of seconds.
MWE (bad_expr.zip):
Notice the >85% time spent
LOWERING
Julia also cannot respond to interrupts while lowering, so the user has no way to interrupt this ~40 second pause.
The text was updated successfully, but these errors were encountered: