Schwab,Wilhelm K writes:
 > Bryce,
 > 
 > I'll play dumb here - actually, I'm not playing in this case :)
 >  
 > The little I know about Exupery comes from FAQs.  In the past at least, you 
 > cautioned against enabling dynamic compiling of methods, at least in 
 > production.  How does that square with full-inlining?  Are they different 
 > concepts, or have thing improved enough that you are now confident enough to 
 > throw the switch?  Full-inlining sounds like it could consume a lot of 
 > space.  Is that a concern, or does the selection of what it compiles keep it 
 > manageable?  How does it decide what to compile, and (more relevant to my 
 > dumb questions) how does that differ from the dynamic compilation?
 > 
 > Please don't feel attacked - I'm simply trying to understand what is 
 > hopefully just around the corner.

What's changed is I've fixed a few bugs. It's possible that Exupery
is reliable. I've yet done enough testing to be sure but since the
last fix I haven't yet seen Exupery cause a crash. I'm confident
enough to throw the switch.

By full inlining all I mean is the ability to inline entire methods.
Exupery will already dynamically inline the primitives it compiles to
machine code. Dynamic inlining is the critical optimisation to allow
further optimisations, without it the compiler can only see a method
or a block at a time. It can't see where the loops are as they're
probably in a different method as with #do: loops. This really
limits the optimisations that can be performed later.

Full inlining will be driven by profiling so it's only the hot spots
that should get inlined, at least after I've tuned the
profiler. Inlining can sometimes reduce the amount of code
executed. For small methods it's easy to spend more code on the
message send than is consumed by the method body. Initially it's
likely the profiler will make bad inlining decisions like the current
profiler will compile every method seen eventually which is probably
bad for performance, compiling everything at least doesn't avoid
compiling infrequent methods that may trigger a compiler bug.

Full method inlining is a form of dynamic compilation. It lets the
dynamic compiler inline entire methods when it sees the need.

Bryce.

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to