new Cog VMs available

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

new Cog VMs available

Eliot Miranda-2
 
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
Reply | Threaded
Open this post in threaded view
|

Re: new Cog VMs available

David T. Lewis
 
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

Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-project] new Cog VMs available

Eliot Miranda-2
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,

Probably a stupid question but what's the difference between SimpleStackBasedCogit and StackToRegisterMappingCogit ?

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



    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.



Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-project] new Cog VMs available

Eliot Miranda-2
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.


(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.

best,
Eliot





On 07/02/11 15:42, Igor Stasenko wrote:
On 7 February 2011 12:28, Krishsmalltalk
<[hidden email]>  wrote:
StackToRegisterMappingCogit maps values to machine registers when generating
code,
while stack-based one uses stack for everything.

Guess that is what is meant..
Register based vms like Parrot will offer more info... As to motivation for
this mapping


a motivation is simple: speed.
Access to CPU registers usually 2-5 orders of magnitude faster than
memory access.


On Feb 7, 2011, at 2:53 PM, Igor Stasenko<[hidden email]>  wrote:

On 7 February 2011 09:12, Francois Stephany<[hidden email]>
wrote:

Hi Eliot,

Probably a stupid question but what's the difference between

SimpleStackBasedCogit and c?

SimpleStackBasedCogit maps values to machine registers when generating code,
while stack-based one uses stack for everything.

    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.






--
Best regards,
Igor Stasenko AKA sig.







--
[hidden email]
http://www.agilitic.com
+32 (0)484/580.322



Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-project] new Cog VMs available

stephane ducasse-2

> (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**!


Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-project] new Cog VMs available

Levente Uzonyi-2
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
>