[M3devel] optimization [ was Re: Performance issues with CM3 ]

Mika Nystrom mika at async.caltech.edu
Mon Apr 27 03:17:24 CEST 2009


Tony Hosking writes:
...
>> With lots of tweaks and adjustments, I now see my code running about
>> 100% slower under CM3 than the same code does under PM3 (on the
>> same machine).  This is including my typecase hacks, as described
>> earlier today.  I'm guessing most of it is the FreeBSD pthreads
>> implementation in libc_r + the calls to PushEFrame.
>
>Yikes!  How much of this is module initialization (startup) time?
>

Ok, I re-checked just to make sure.  As far as I know, exactly the same code,
no initialization overhead (program's already running):

CM3:

> (time-call (lambda()(make-standard-stuff "Example")))
1.309586018207483
> 

PM3:

>  (time-call (lambda()(make-standard-stuff "Example")))
0.5641579627990723
> 

Bear in mind this is pretty close to a worst-case test for the "delta" between
PM3 and CM3.  Lots of small procedures, lots of typecases.

Well, actually, I can make it worse.  Turn on locking in the Scheme environments
(so that they could be used by multi-threaded interpreters):

CM3:

>  (time-call (lambda()(make-standard-stuff "Example")))
2.1610950572649017
>

PM3:

>  (time-call (lambda()(make-standard-stuff "Example")))
0.6010241508483887
> 

CM3 without my change to RTType:

> (time-call (lambda()(make-standard-stuff "Example")))
2.2972461158642545
> 

250% slower.

But it is very demanding on pthreads.  Lots of little procedures,
lots of typecases, lots of locking.  (No contention, though.)

    Mika

P.S. the code in question is a scheme-m3 stub generator; it's making
stub interfaces in the tests above.



More information about the M3devel mailing list