New CogVMs available

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

New CogVMs available

Eliot Miranda-2

CogVM source as per VMMaker.oscog-eem.1339/r3370

Spur Cogit:
Since the invariant is that the receiver is never forwarded, Spur must check for
forwarding on block activation.  A become between closure creation and closure
evaluation can forward the receiver, and it must be unforwarded.  Here we do so
by checking for a forwarded receiver in the value[:] primitives. This is a
major blow to block performance; e.g. the nfib block
b := [:n| n <= 1
ifTrue: [1]
ifFalse: [1 + (b value: n - 1) + (b value: n - 2)]].
slows down by 11%.  So we can and will do better.  We should scan for receiver
usage in the JIT and optionally compile unforwarding code in the prolog
depending on whether self is used or not.

Fix Spur block performance now that we follow forwarded receivers in blocks; see
VMMaker.oscog-eem.1334.  Scan blocks for inst var usage, only unforwarding in
the prologue of blocks that actually refer to inst vars.  In a test Spur Squeak
image only 12.5% of blocks do refer to inst vars.  So this is definitely a win.

Add a special purpose store check trampoline to store check the updated
receiver.  Make sure it's only called if the eceiuver is updated.

Add state to CogBytecodeDescriptor, CogBlockStart
and CogBlockMethod to track block inst var usage.

Sista:
Fix the bug where rcvrReg was nil in genEqualsEqualsnoBranch.

Generic Cogit:
Use the Tst-based generators for immediate and SmallInteger tests more widely
to save a few more instructions.

Fix the hack introduced in VMMaker.oscog-eem.1199 for Sista which merely stopped
reclaiming closed PICs.  In non-Sista VMs do the usual thing of decaying usage
counts on PICs, as with methods, and reclaiming those least used.  In Sista,
retain PICs until the next cycle, identifying unused PICs as part of the
compaction scan, reminiscent of tri-colour incremental GC.

Move defaultCogCodeSize into the CogAbstractInstruction hierarchy so that
e.g.  CogARMCompiler can specify a larger default code zone.

Newspeak Cogit:
Fix assert-fails with absent receiver sends in Newspeak.  Have the implicit
and outer send lookup trampolines set the stacked receiver (when there is one)
when setting the implciit receiver.

Streamline send trampoline creation by refactoring trampoline name generation
so that the two limits, NumSendTrampolines - 2 and numRegArgs are treated
separately, and numArgsOrSendNumArgsReg: answers the relevant numArgs argument.
This should clear up confusion between numRegArgs (which can be 0, 1 & 2) and
NumSendTrampolines - 2, which is always 2.

linux builds:
Fix VERSION_TAG format to agree with existing convention.
--
best,
Eliot


Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-dev] New CogVMs available

Tobias Pape
And updated on ci.
On 04.06.2015, at 23:00, Eliot Miranda <[hidden email]> wrote:

> ... at http://www.mirandabanda.org/files/Cog/VM/VM.r3370
>
> CogVM source as per VMMaker.oscog-eem.1339/r3370
>
> Spur Cogit:
> Since the invariant is that the receiver is never forwarded, Spur must check for
> forwarding on block activation.  A become between closure creation and closure
> evaluation can forward the receiver, and it must be unforwarded.  Here we do so
> by checking for a forwarded receiver in the value[:] primitives. This is a
> major blow to block performance; e.g. the nfib block
> b := [:n| n <= 1
> ifTrue: [1]
> ifFalse: [1 + (b value: n - 1) + (b value: n - 2)]].
> slows down by 11%.  So we can and will do better.  We should scan for receiver
> usage in the JIT and optionally compile unforwarding code in the prolog
> depending on whether self is used or not.
>
> Fix Spur block performance now that we follow forwarded receivers in blocks; see
> VMMaker.oscog-eem.1334.  Scan blocks for inst var usage, only unforwarding in
> the prologue of blocks that actually refer to inst vars.  In a test Spur Squeak
> image only 12.5% of blocks do refer to inst vars.  So this is definitely a win.
>
> Add a special purpose store check trampoline to store check the updated
> receiver.  Make sure it's only called if the eceiuver is updated.
>
> Add state to CogBytecodeDescriptor, CogBlockStart
> and CogBlockMethod to track block inst var usage.
>
> Sista:
> Fix the bug where rcvrReg was nil in genEqualsEqualsnoBranch.
>
> Generic Cogit:
> Use the Tst-based generators for immediate and SmallInteger tests more widely
> to save a few more instructions.
>
> Fix the hack introduced in VMMaker.oscog-eem.1199 for Sista which merely stopped
> reclaiming closed PICs.  In non-Sista VMs do the usual thing of decaying usage
> counts on PICs, as with methods, and reclaiming those least used.  In Sista,
> retain PICs until the next cycle, identifying unused PICs as part of the
> compaction scan, reminiscent of tri-colour incremental GC.
>
> Move defaultCogCodeSize into the CogAbstractInstruction hierarchy so that
> e.g.  CogARMCompiler can specify a larger default code zone.
>
> Newspeak Cogit:
> Fix assert-fails with absent receiver sends in Newspeak.  Have the implicit
> and outer send lookup trampolines set the stacked receiver (when there is one)
> when setting the implciit receiver.
>
> Streamline send trampoline creation by refactoring trampoline name generation
> so that the two limits, NumSendTrampolines - 2 and numRegArgs are treated
> separately, and numArgsOrSendNumArgsReg: answers the relevant numArgs argument.
> This should clear up confusion between numRegArgs (which can be 0, 1 & 2) and
> NumSendTrampolines - 2, which is always 2.
>
> linux builds:
> Fix VERSION_TAG format to agree with existing convention.
> --
> best,
> Eliot