Hi All, new Cog VMs are available, SimpleStackBasedCogit @ http://www.mirandabanda.org/files/Cog/VM/VM.r2359/ and StackToRegisterMappingCogit @ http://www.mirandabanda.org/files/Cog/VM/VM.r2361. I think the new code generator is ready for prime time now. I fixed a number of bugs over the past three weeks and we're now using the StackToRegisterMappingCogit internally at Teleplace. There's still work to be done merging plugins and details with the standard VMs but I hope that r2361 is production-ready as far as core Smalltalk execution is concerned.
Enjoy. Eliot
|
On Sun, Feb 06, 2011 at 07:38:10PM -0800, Eliot Miranda wrote: > > Hi All, > > new Cog VMs are available, SimpleStackBasedCogit @ > http://www.mirandabanda.org/files/Cog/VM/VM.r2359/ and > StackToRegisterMappingCogit @ > http://www.mirandabanda.org/files/Cog/VM/VM.r2361. I think the new code > generator is ready for prime time now. I fixed a number of bugs over the > past three weeks and we're now using the StackToRegisterMappingCogit > internally at Teleplace. There's still work to be done merging plugins and > details with the standard VMs but I hope that r2361 is production-ready as > far as core Smalltalk execution is concerned. > > Enjoy. Thanks! I just installed VM.r2361 and it's working fine. Dave |
In reply to this post by Eliot Miranda-2
Hi Francois, On Mon, Feb 7, 2011 at 12:12 AM, Francois Stephany <[hidden email]> wrote: Hi Eliot, See the following thread: Here's a summary:
The SimpleStackBasedCogit is a one-to-one translation of bytecodes to machine code so tat every push or pop in the bytecode results in a corresponding push or pop in the generted code. This results in a machine that passes all parameters on the stack and reifies all comparison results as either true or false.
The StackToRegisterMappingCogit defers generating code until it reaches a bytecode that consumes operands on the stack (i.e. a send, a temp or inst var store, a return, a closure creation or an Array creation ( {...} )). This results in a machine that is able to pass parameters in registers for small arity sends (currently 0 or 1 arg), and able to inline some integer arithmetic and comparison, e.g. that involved in inlined to:do: loops, and can do some constant folding (hint: write 2 + 3 + 4 + i, not i + 2 + 3 + 4).
There are two main benefits. The StackToRegisterMappingCogit produces machine code that is about 20% more compact than the SimpleStackBasedCogit (hence meaning less frequent code zone reclamations and better cache performance) and considerably faster for microbenchmarks, for example the empty 1 to: 100000000 do: [:i|] (equivalent to i := 1. [i <= 100000000] whileTrue: [i := i + 1]) is 4 times faster than the SimpleStackBasedCogit.
At a macro level StackToRegisterMappingCogit speeds up code such as compiling a method by about 10%, with low-level arithmetic-intensive code showing greater speedups. best,
Eliot
|
In reply to this post by Eliot Miranda-2
On Mon, Feb 7, 2011 at 6:52 AM, Francois Stephany <[hidden email]> wrote: So StackToRegisterMappingCogit should be faster than the other ? If so, why does the SimpleStackBasedCogit still exist ? Juts in case people find bugs with the StackToRegisterMappingCogit that are not in SimpleStackBasedCogit. SimpleStackBasedCogit is "mature"; we've used it for almost two years at Teleplace, and while I've fixed serious bugs in it in the past month it is quite possibly less buggy than StackToRegisterMappingCogit.
One can only learn by asking questions. Not knowing, one is not in a position to know whether a question is stupid or not, so one must not be afraid of asking stupid questions if one wants to learn. Please continue.
best, Eliot
|
> (Sorry but I'm a total newbie) > > One can only learn by asking questions. Not knowing, one is not in a position to know whether a question is stupid or not, so one must not be afraid of asking stupid questions if one wants to learn. Please continue. **TX**! |
In reply to this post by Eliot Miranda-2
On Sun, 6 Feb 2011, Eliot Miranda wrote: > Hi All, > > new Cog VMs are available, SimpleStackBasedCogit @ > http://www.mirandabanda.org/files/Cog/VM/VM.r2359/ and > StackToRegisterMappingCogit @ > http://www.mirandabanda.org/files/Cog/VM/VM.r2361. I think the new code > generator is ready for prime time now. I fixed a number of bugs over the > past three weeks and we're now using the StackToRegisterMappingCogit > internally at Teleplace. There's still work to be done merging plugins and > details with the standard VMs but I hope that r2361 is production-ready as > far as core Smalltalk execution is concerned. > > Enjoy. Thanks, StackToRegisterMappingCogit is really impressive. IIRC for the 4.1.1 VM Andreas fixed something about ImageSegment loading which is missing from the CogVMs. It would be good to have that fix, because now arrayOfRoots is nil when I'm trying to load an ImageSegment. It's not urgent at all, because I could work the problem around using the new SqueakVMs which can read Cog images and have the fix. Levente > > > Eliot > |
Free forum by Nabble | Edit this page |