Hi folks!
This post is a just a "heads up" based on some websurfing around VMs and JITs. I am itching badly to hear Eliot announce some kind of Cog-thingy - so consider this rambling post to be a symptom of that itch. :) There are a few things going on in the VM world that most of us have no clues about. We know about V8 but most may not know about TraceMonkey/Tamarin and its use of a new technique called "tracing" and a backing library for it - nanojit. Evidently TraceMonkey is giving V8 a real run for its money, and AFAICT this is mainly due to work of Andreas Gal (really interesting long article): http://andreasgal.com/2008/08/22/tracing-the-web And some other: http://www.bailopan.net/blog/?p=72 Hot off the press (yesterday): http://www.bailopan.net/blog/?p=430 After having read that Eliot does not think LLVM is suitable mainly due to lack of large basic blocks in Smalltalk code - and he seems to be looking hard at Factor and its JIT - I just wanted to mention the above as Yet Another Interesting Bit. I also think that the latest work on Lua (LuaJIT) includes tracing, not sure though. So Eliot, how is your work progressing? No pressure, just LOTS of interest! :) regards, Göran PS. Being bored hacking C#... |
Hi!
Just dug up their paper on TraceMonkey for PLDI 2009: http://blog.mozilla.com/dmandelin/tracemonkey-paper-pldi-2009/ Seemingly a really nice detailed paper! regards, Göran |
2009/6/24 Göran Krampe <[hidden email]>:
> Hi! > > Just dug up their paper on TraceMonkey for PLDI 2009: > > http://blog.mozilla.com/dmandelin/tracemonkey-paper-pldi-2009/ > > Seemingly a really nice detailed paper! > Lets wait till they add the resursion & tail call handling. Because without it, their JIT really sucks on recursive benchs :) Or, better, replace a 'loop' as a cornerstone of design, with tail-call : whileTrue: aBlock [ self value ] whileTrue: [ aBlockValue] ;) > regards, Göran > -- Best regards, Igor Stasenko AKA sig. |
Am 25.06.2009 um 10:44 schrieb Igor Stasenko: > Or, better, replace a 'loop' as a cornerstone of design, with tail- > call : > > whileTrue: aBlock > [ self value ] whileTrue: [ aBlockValue] You mean whileTrue: aBlock self value ifTrue: [ aBlock value. self whileTrue: aBlock] - Bert - |
2009/6/25 Bert Freudenberg <[hidden email]>:
> > Am 25.06.2009 um 10:44 schrieb Igor Stasenko: >> >> Or, better, replace a 'loop' as a cornerstone of design, with tail-call : >> >> whileTrue: aBlock >> [ self value ] whileTrue: [ aBlockValue] > > > You mean > > whileTrue: aBlock > self value ifTrue: [ > aBlock value. > self whileTrue: aBlock] > Yes. > - Bert - > > -- Best regards, Igor Stasenko AKA sig. |
In reply to this post by Göran Krampe
2009/6/24 Göran Krampe <[hidden email]> Hi! - Stephen
|
On Thu, 2009-06-25 at 07:57 -0400, Stephen Pair wrote:
> 2009/6/24 Göran Krampe <[hidden email]> > Hi! > > Just dug up their paper on TraceMonkey for PLDI 2009: > > > http://blog.mozilla.com/dmandelin/tracemonkey-paper-pldi-2009/ > > Seemingly a really nice detailed paper! > > regards, Göran > > > Reading through their papers, while I didn't spend a lot of time > studying the matter, I got the sense that the optimization strategies > that Self employed would effectively accomplish similar types of > optimizations, but arrive at them in a simpler and more general > manner. > One big advantage of a trace compiler is it doesn't compile whole methods so may be able to get by with a smaller code cache. While this probably doesn't matter so much on the desktop or server on some embedded devices it still will. Implementing a trace compiler is likely to involve more frequent hooks than implementing a whole method compiler. With a whole method compiler only sends and returns need hooks, with a trace compiler at least every backward jump needs hooks for native code. I've read some papers on a Java trace compiler that was slower than their whole method compiler but used much less memory. It's an interesting way of getting type feedback with different trade offs to entire method compilers. Bryce |
Free forum by Nabble | Edit this page |