[M3devel] optimization [ was Re: Performance issues with CM3 ]
Tony Hosking
hosking at cs.purdue.edu
Mon Apr 27 04:37:17 CEST 2009
I was just wondering if your code has a lot of TRY blocks, which come
with the PushEFrame overhead.
On 27 Apr 2009, at 12:28, Mika Nystrom wrote:
> How would I know? I'm trying to turn on profiling but it seems to
> be a
> bit involved. Involves re-building all the libraries?
>
> (cm3 -profile seems to look for FreeBSD4p instead of plain
> FreeBSD4...)
>
> Mika
>
> Tony Hosking writes:
>> Hmm. Interesting. What about exception scopes?
>>
>> On 27 Apr 2009, at 11:17, Mika Nystrom wrote:
>>
>>> 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