Call for help [was: [Re: [ENH] BehaviorHashEnh]]

Stephan Rudlof sr at evolgo.de
Fri Oct 1 23:11:47 UTC 2004


Stef,

I'm trying to think freshly, since this is very weird: I have measured
with a fresh 3.8alpha...

My results for the IdentitySet variant have been *much* worser than
yours, with or without the cs (which is expected, since the behavior of
IdentitySet won't be affected by the cs).
For this reason, the idea of the cs has been to introduce Behavior>>hash
- using String>>hash - to avoid the default Object>>hash which itself
calls ProtoObject>>identityHash. This is also the reason, why the
IdentitySet variant remains worse for my system (it just continues to
use >>identityHash).
But the cs doesn't seem to have a relevant effect in your system,
because *your* >>identityHash seems to work much better than mine!

Now the question: why?

ProtoObject>>identityHash calls a prim: which VM are you using?

It would be nice, if some other person would doIt the following
expression and post the result together with the VM version (squeak
-version) and processor version to get some more data.


DoIt
----

| allClasses allClassesSet block |
	allClasses := Smalltalk allClasses.
	block _ [allClassesSet _ allClasses asIdentitySet.
			[allClasses do: [:class | allClassesSet remove: class]] timeToRun].
	{block value. block value. block value}.


For me the result is

  #(3112 3166 3108)

for

sr at karl:~/DepS/Tmp$ squeak -version
3.7b-5 #1 Mon Jun 14 18:05:35 CEST 2004 gcc 3.3.3
Squeak3.7beta of '1 April 2004' [latest update: #5954]
Linux karl 2.4.26sr #1 Sun May 23 19:28:24 CEST 2004 i686 GNU/Linux
default plugin location: /usr/local/lib/squeak/3.7b-5/*.so

at a 366MHz Pentium.

Any additional ideas for the huge difference between mine and Stefs
results are also welcome.


Greetings
Stephan

stéphane ducasse wrote:
> | allClasses allClassesSet block |
> 	allClasses := Smalltalk allClasses.
> 	block _ [allClassesSet _ allClasses asSet.
> 			[allClasses do: [:class | allClassesSet remove: class]] timeToRun].
> 	{block value. block value. block value}
> 
> one before
> 	#(27 27 25)
> one after
> 	#(31 35 32)
> 
> | allClasses allClassesSet block |
> 	allClasses := Smalltalk allClasses.
> 	block _ [allClassesSet _ allClasses asIdentitySet.
> 			[allClasses do: [:class | allClassesSet remove: class]] timeToRun].
> 	{block value. block value. block value}.
> 
> two before
> 	#(19 19 19)
> two after
> 	 #(37 19 22)
> 
> 
> I hope this helps. This was with 6273
> 
> Stef
> 
> 

-- 
Stephan Rudlof (sr at evolgo.de)
   "Genius doesn't work on an assembly line basis.
    You can't simply say, 'Today I will be brilliant.'"
    -- Kirk, "The Ultimate Computer", stardate 4731.3



More information about the Squeak-dev mailing list