MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Re: Re: Slowdown


>> You can see a big jump in the hash value at weirdness$10.

Actually, the hash value gets much SMALLER at that point.

Bobby

On Tue, 4 Jan 2005 03:13:00 -0500 (EST), Andrzej Kozlowski <akoz at mimuw.edu.pl> wrote:

> I just noticed another thing, which seems to throw more light at what
> is happenng. Look carefully at the Hash values of the different names
> of the form weirdness$number:
>
>
> MapIndexed[{First[#2], Hash[#1]} & ,
>    ToExpression /@ (StringJoin["weirdness", "$",
>        ToString[#1]] & ) /@ Range[20]]
>
>
> {{1, 1783099877}, {2, 1783099878}, {3, 1783099879},
>    {4, 1783099880}, {5, 1783099881}, {6, 1783099882},
>    {7, 1783099883}, {8, 1783099884}, {9, 1783099885},
>    {10, 667842086}, {11, 667842087}, {12, 667842088},
>    {13, 667842089}, {14, 667842090}, {15, 667842091},
>    {16, 667842092}, {17, 667842093}, {18, 667842094},
>    {19, 667842095}, {20, 667843323}}
>
> You can see a big jump in the hash value at weirdness$10. That is
> exactly the point at which the slowdown occurs.
>
> Andrzej Kozlowski
>
>
> On 3 Jan 2005, at 21:55, Andrzej Kozlowski wrote:
>
>> I can't see any siginificant slowdowns demonstrated by your code. The
>> differences in timings between different combinations seem
>> insignificant. Cna you suggest any other name but "weirdness" that
>> shows significant slowdown?
>>
>> Besides, using Module only obsures what is really happening. Module
>> simply renames local variables by appending $somenumber to their name
>> but the "number" that is used is different each time. You can do that
>> whiteout Module and see exactly which names produce the slowdown
>> effect. It seems that the names weirdness$1 to weirdness$9 do not.
>>
>> In[1]:=
>> L=weirdness$1[];
>>           Do[L=weirdness$1[L,i],{i,10^4}]//Timing
>>
>> Out[2]=
>> {0.03 Second,Null}
>>
>> In[3]:=
>> L=weirdness$9[];
>>           Do[L=weirdness$9[L,i],{i,10^4}]//Timing
>>
>> Out[4]=
>> {0.08 Second,Null}
>>
>> The problem seems to begin with weirdness$10
>>
>> In[5]:=
>> L=weirdness$10[];
>>           Do[L=weirdness$10[L,i],{i,10^4}]//Timing
>>
>> Out[6]=
>> {13.2 Second,Null}
>>
>> and continues for higher values, as far as I have checked.
>>
>> When you run Module with a fresh Kernel Mathematica seems to always
>> begin by appending $17:
>>
>> In[1]:=
>> Module[{weirdness, L},
>>    L = weirdness[];
>>    Do[L = weirdness[L, i], {i, 1}]
>> ] // Trace
>>
>> Out[1]=
>> {Module[{weirdness,L},L=weirdness[];Do[L=weirdness[L,i],{i,1}]],{L$17=\
>> weirdness$17[];Do[L$17=weirdness$17[L$17,
>>
>> i],{i,1}],{L$17=weirdness$17[],weirdness$17[]},{Do[L$17=weirdness$17[L$
>> \
>> 17,i],{i,1}],{{{L$17,weirdness$17[]},{i,1},weirdness$17[weirdness$17[],
>>
>> 1]},L$17=weirdness$17[weirdness$17[],1],weirdness$17[weirdness$17[],1]\
>> },Null},Null},Null}
>>
>> on subsequent runs this is increased:
>>
>> In[2]:=
>> Module[{weirdness, L},
>>    L = weirdness[];
>>    Do[L = weirdness[L, i], {i, 1}]
>> ] // Trace
>>
>> Out[2]=
>> {Module[{weirdness,L},L=weirdness[];Do[L=weirdness[L,i],{i,1}]],{L$19=\
>> weirdness$19[];Do[L$19=weirdness$19[L$19,
>>
>> i],{i,1}],{L$19=weirdness$19[],weirdness$19[]},{Do[L$19=weirdness$19[L$
>> \
>> 19,i],{i,1}],{{{L$19,weirdness$19[]},{i,1},weirdness$19[weirdness$19[],
>>
>> 1]},L$19=weirdness$19[weirdness$19[],1],weirdness$19[weirdness$19[],1]\
>> },Null},Null},Null}
>>
>> in any case all these numbers are larger than 10 and produce slowdown,
>> but the numbers 10-16 which never occur inside Module also suffer form
>> this problem:
>>
>> In[3]:=
>> L=weirdness$11[];
>>           Do[L=weirdness$11[L,i],{i,10^4}]//Timing
>>
>> Out[4]=
>> {13.1 Second,Null}
>>
>> In[5]:=
>> L=weirdness$16[];
>>           Do[L=weirdness$16[L,i],{i,10^4}]//Timing
>>
>> Out[6]=
>> {14.62 Second,Null}
>>
>> However, I have not been able to find any other name but weirdness
>> that produces this effect. This seems weird.
>>
>> Andrzej Kozlowski
>>
>>
>>
>> On 3 Jan 2005, at 18:29, yehuda ben-shimol wrote:
>>
>>> Hi Roland,
>>> I'm afraid this is not true. Just try to run the code I sent with my
>>> post.  "weirdness" was time consuming while weirdness1 was not. In
>>> addition it happened (not consistently) that function name of a SINGLE
>>> character suffered from this behavior as well.
>>> the code is given below for your convenience.
>>>
>>> t = CharacterRange["a", "z"];
>>> Do[fname = StringJoin[t[[Table[Random[Integer, {1,26}], {i}]]]];
>>> Print[i, "\t", fname, "\t",
>>> 	Timing[
>>> 	  Module[{fs = ToExpression[fname], L},
>>>           L = fs[];
>>>         Do[L = fs[L, j], {j, 104}]]]], {i, 1, 50}, {5}]
>>>
>>>
>>> yehuda
>>>
>>> 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.
>>>>
>>>
>>
>
>
>
>



-- 
DrBob at bigfoot.com
www.eclecticdreams.net


  • Prev by Date: Re: Re: Re: Re: Slowdown
  • Next by Date: Run, RunThrough on OSX?
  • Previous by thread: Re: Re: Re: Re: Re: Slowdown
  • Next by thread: Re: Re: Slowdown