[Vm-dev] Integration of the BlockClolsure>>value primitive
Mathieu Suen
mathk.sue at gmail.com
Mon Aug 13 00:16:32 UTC 2007
Hi
Did someone have time to look at my changes?
Thanks
Mth
On Aug 5, 2007, at 8:35 PM, Marcus Denker wrote:
>
> On 27.07.2007, at 20:24, tim Rowledge wrote:
>
>>
>> On 27-Jul-07, at 11:20 AM, Andreas Raab wrote:
>>
>>> Could you please post your changes for review first?
>>
>> And didn't we already provide some closure handling prims a couple
>> (at least) of years ago as a result of Anthony Hannan's work?
>> Wasn't the new compiler supposed to use them?
>
> Yes, the Anthony added 189, this was added to the 3.6 vmmaker, if I
> remember correctly.
> This is for Object>>#executeMethod, the speedup is substancial...
> but then, the #value
> of BlockClosure remained a normal method:
>
> value
> "Evaluate the block with no args. Fail if the block expects other
> than 0 arguments."
>
> ^ environment executeMethod: method
>
> vs. the one on BlockContext:
>
> value
> "Primitive. Evaluate the block represented by the receiver. Fail
> if the
> block expects any arguments or if the block is already being
> executed.
> Optional. No Lookup. See Object documentation whatIsAPrimitive."
>
> <primitive: 81>
> ^self valueWithArguments: #()
>
> So for Closures, a #value requires right now a method invocation, a
> lookup
> and then prim 189. Math implemented a primitive for
> BlockContext>>#value,
> and the speedup is noticable (we should habe benchmarks somewhere).
>
> We are looking into other things to speedup. e.g, BlockClosures
> contains
> a method, on #value this method is evaluated, which means that a
> context
> is created. BlockContexts are pre-allocated at compiletime instead.
> So for
> BlockClosures beeing comparabel to BlockContexts, it is very important
> to make sure that the context-cache is not flushed. The cache is
> right now
> flushed far too often, e.g. on blockCopy:, which is send to
> thisContext, and
> especially for the NewCompiler code on accessing the closure
> environment
> (which is done with message sends to thisContext).
>
> With some care (and the right bytecodes) this can be improved
> dramatically it seems.
>
> Another thing that makes Closures slow are accesses of outer temp
> variables.
> They are done with message sends right now. Having bytecodes for
> these would
> make sense, too.
>
> Just avoiding context cache flushes + the #value primitive seem to
> get some
> impressive performance improvement already.... we need to do some more
> extensive benchmarking, but is lools quite good already.
>
>
> Marcus
> --
> Marcus Denker -- denker at iam.unibe.ch
> http://www.iam.unibe.ch/~denker
>
>
>
More information about the Vm-dev
mailing list