Reality speed check. isNil vs. == nil is half fast.
stéphane ducasse
ducasse at iam.unibe.ch
Mon May 2 16:08:09 UTC 2005
Blaire I agree we should pay attention not to deteriorate the
atmosphere...But I'm sure that
andreas words were more than he really thought. Email is a bad medium
to communicate, I learn it each I try to communicate using this
frustrating character-based systems :)
Stef
>> From: Andreas Raab <andreas.raab at gmx.de>
>> Geesh. This "bechmark" is as bogus as it gets. Unbelievable. Try it
>> with polymorphic receivers (say more than 3 different ones to kill
>> the cache performance for a change). Seriously, benchmarks should be
>> defined by people who understand what they are measuring.
>
> Wow. What an amazing vitriolic tongue lashing to someone who is just
> trying to help. I think the only unbelievable thing is your response.
> I think this is a perfect opportunity to educate, not tear down. The
> Squeak community is one of the best in the world, but responses like
> this make people not want to participate. It's one of the reasons that
> I have been more of a lurker. It's intimidating. I don't want to feel
> the wrath of a petulant child on a mailing list.
>
>> My comparison was based on the fact that the microbenchmarks show
>> that *on average* the difference between bytecodes and sends is
>> roughly 1:30. On *average* mind you, not on a totally bogus,
>> send-the-same-message-to-the-same-object-with-guarantueed-cache-hit
>> "benchmark".
>
> Again, this is a perfect opportunity to educate, if his understanding
> was wrong, all you had to do was to tell him what the correct way was.
> The last sentence was over the top and unnecessary. Is this not a
> helpful community?
>
>> And besides, system performance has very little to do with these
>> micro-benchmarks anyway - I don't buy *any* of those points made
>> about how horrible it is that we aren't aware about how much time we
>> "waste" when sending a message instead of utilizing a bytecode.
>
> But, shouldn't we be fast at message sending? Isn't Smalltalk known
> for message sending? It should be fast. Maybe I'm missing something
> here and I apologize for bursting into this argument. But, I do know
> that speed on the small doesn't matter if the algorithms are bad on
> the large.
>
>> Let's stop this pointless discussion, shall we?
>
> I think this is a valid discussion, because I would love to know how
> to make valid benchmarks in Squeak. Making Squeak better should always
> be up for discussion. I think you should make benchmarks without
> internal knowledge of the VM. Why? Because you can cook the benchmarks
> to avoid where the problem areas are in the VM. Does Smalltalk have a
> standard set of VM benchmarks? Besides, I do not see the problems with
> Peace's benchmarks. They seem to be valid to me. I would like a humane
> discussion on why they aren't. Thanks.
>
>> - Andreas
>>
>> Peace Jerome wrote:
>>> Some comments andreas made got me curious as to how
>>> much speed was given up for correctness.
>>>
>>> So I did a little test.
>>> foo isNil vs. foo == nil .
>>>
>>> My result seem to show that former is half as fast as
>>> the latter.
>>>
>>>
>>> After I realized I had to do a control to eliminate
>>> the time spent looping from the comparison. And I
>>> repeated the test ten times in each loop so the
>>> looping time didn't swamp the out come.
>>>
>>> 1000000 timesRepeat: [. . . . . . . . . ]]
>>>
>>> For a G3 imac running under OS9.1 my results were
>>> control: 900
>>> isNil 3000
>>> == nil 2000
>>>
>>> Once the control was subtracted out the time factor
>>> was about 2::1 regardless of the value of foo.
>>>
>>> If you want to try this on your system the text of the
>>> test was:
>>>
>>>
>>>
>>> [ { nil . true . false . Morph new } collect: [ :foo
>>> | {
>>> [1000000 timesRepeat: [. . . . . . . . . ]] .
>>> [1000000 timesRepeat: [foo isNil . foo isNil . foo
>>> isNil . foo isNil . foo isNil . foo isNil . foo isNil
>>> . foo isNil . foo isNil . foo isNil]] .
>>> [1000000 timesRepeat: [ foo == nil . foo == nil . foo
>>> == nil . foo == nil . foo == nil . foo == nil . foo ==
>>> nil . foo == nil . foo == nil]] } collect: [
>>> :testBlock | testBlock timeToRun ] ] ] value collect:
>>> [ :results | results second - results first /
>>> (results third - results first ) asFloat ]
>>>
>>> and my results for this example were:
>>>
>>>
>>> #(2.03679245283019
>>> 2.051643192488263
>>> 2.058878504672897
>>> 2.06578947368421)
>>>
>>> This is not a conclusive indication of why squeak is
>>> now slower. It is an indication that more examination
>>> will be useful. A lot of inner loop stuff was
>>> changed without regard for the speed impact.
> --
> Blaine Buxton, Mad Scientist In Training
> My Amps: Smalltalk, Lisp, and Ruby
> http://www.blainebuxton.com
>
> _________________________________________________________________
> On the road to retirement? Check out MSN Life Events for advice on how
> to get there! http://lifeevents.msn.com/category.aspx?cid=Retirement
>
>
More information about the Squeak-dev
mailing list
|