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
|
Hi Eliot,
Probably a stupid question but what's the difference between SimpleStackBasedCogit and StackToRegisterMappingCogit ? > 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. |
Thanks Eliot.
And indeed, I subscribe to the below question as well :) Cheers, Doru On 7 Feb 2011, at 09:12, Francois Stephany wrote: > Hi Eliot, > > Probably a stupid question but what's the difference between SimpleStackBasedCogit and StackToRegisterMappingCogit ? > >> 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. > > -- www.tudorgirba.com "We are all great at making mistakes." |
In reply to this post by fstephany
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. |
Ok :)
In practice which one the end user should use ? Are there any performance/stability difference ? >> 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. > |
Thanks Francois for asking the questions for me :)
Cheers, Doru On 7 Feb 2011, at 11:02, Francois Stephany wrote: > Ok :) > In practice which one the end user should use ? Are there any performance/stability difference ? > >>> 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. >> > > -- www.tudorgirba.com "Problem solving efficiency grows with the abstractness level of problem understanding." |
In reply to this post by Igor Stasenko
Guess that is what is meant.. Register based vms like Parrot will offer more info... As to motivation for this mapping
|
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. > > -- Best regards, Igor Stasenko AKA sig. |
So StackToRegisterMappingCogit should be faster than the other ? If so,
why does the SimpleStackBasedCogit still exist ? (Sorry but I'm a total newbie) 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 |
In reply to this post by fstephany
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 fstephany
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
|
In reply to this post by fstephany
On Mon, Feb 7, 2011 at 09:12, Francois Stephany
<[hidden email]> wrote: > Probably a stupid question but what's the difference between > SimpleStackBasedCogit and StackToRegisterMappingCogit ? And would it make sense to name the VM binaries/applications to reflect which interpreter they use? Alternatively, is there some way to see that from the image? -- Damien Pollet type less, do more [ | ] http://people.untyped.org/damien.pollet |
On Mon, Feb 7, 2011 at 11:16 AM, Damien Pollet <[hidden email]> wrote: On Mon, Feb 7, 2011 at 09:12, Francois Stephany At least for the Cog VMs Smalltalk getSystemAttribute: 1007 answers the interpreter and 1008 answers the Cogit, if any.
|
In reply to this post by Eliot Miranda-2
Thanks for your pointer and explanations Eliot !
> On Mon, Feb 7, 2011 at 6:52 AM, Francois Stephany > <[hidden email] <mailto:[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 |
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 > |
New vms that read cog images - as in cog is no longer a one-way street? That would make it safer/easier to test.
________________________________________ From: [hidden email] [[hidden email]] On Behalf Of Levente Uzonyi [[hidden email]] Sent: Tuesday, February 08, 2011 2:19 PM To: Pharo Development Cc: Squeak Virtual Machine Development Discussion; The general-purpose Squeak developers list Subject: Re: [Pharo-project] new Cog VMs available 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 > |
On 09.02.2011 02:31, Schwab,Wilhelm K wrote:
> New vms that read cog images - as in cog is no longer a one-way street? That would make it safer/easier to test. Yes. Cheers, Henry |
GREAT!!!!!
________________________________________ From: [hidden email] [[hidden email]] On Behalf Of Henrik Sperre Johansen [[hidden email]] Sent: Tuesday, February 08, 2011 8:38 PM To: [hidden email] Subject: Re: [Pharo-project] new Cog VMs available On 09.02.2011 02:31, Schwab,Wilhelm K wrote: > New vms that read cog images - as in cog is no longer a one-way street? That would make it safer/easier to test. Yes. Cheers, Henry |
Free forum by Nabble | Edit this page |