Re: Slowdown
- To: mathgroup at smc.vnet.net
- Subject: [mg53261] Re: Slowdown
- From: David Bailey <dave at Remove_Thisdbailey.co.uk>
- Date: Mon, 3 Jan 2005 04:29:38 -0500 (EST)
- References: <cr33tt$je6$1@smc.vnet.net> <cr8ekc$r8r$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Roland Franzius wrote: > Maxim wrote: > >>Consider: >> >>In[1]:= >>Module[{f, L}, >> L = f[]; >> Do[L = f[L, i], {i, 10^4}] >>] // Timing >> >>Module[{weirdness, L}, >> L = weirdness[]; >> Do[L = weirdness[L, i], {i, 10^4}] >>] // Timing >> >>Out[1]= >>{0.015*Second, Null} >> >>Out[2]= >>{3.063*Second, Null} >> >>Here the timings differ by a factor of 200. Besides, the timing grows >>linearly in the first case and quadratically in the second (therefore, for >>n=10^5 there will be an approximately 2000 times slowdown). We can only >>guess that something goes wrong with the symbol name hashing. > > > The timing difference occurs when the symbol "wierdness" exceeds 8 > characters. Test it for "wierdnes". That seems to be a consequence of > the machine routine for string comparison. Up to 8 characters can be > used without using a memory to memory compare. Of course it should be > possible to write a compare routine that makes not such a bit step. > In fact almost all symbols (of whatever length) are not weird! I am sure Mathematica manipulates symbols as pointers - so their length should only be relevant to performance for a few operations, such as input/output. David Bailey dbaileyconsultancy.co.uk