MathGroup Archive 2006

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

Search the Archive

Re: Extending Plus very slow

  • To: mathgroup at smc.vnet.net
  • Subject: [mg66777] Re: Extending Plus very slow
  • From: Giuseppe Bilotta <bilotta78 at hotpop.com>
  • Date: Tue, 30 May 2006 05:48:15 -0400 (EDT)
  • References: <e5ei4g$7ut$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

On Mon, 29 May 2006 10:24:16 +0000 (UTC), Giuseppe Bilotta wrote:

> I found an interesting bottleneck in the way
> Plus is handled. If I have:
> 
> Unprotect[Plus];
> PlusNS[a__AffineExpression /; Length[{a}] > 1] :=
>     Sanitize@AffineExpression[Plus @@ Center /@ {a},
>     Join @@ Deviations /@ {a}];
> Plus[a__AffineExpression /; Length[{a}] > 1] :=
>     Sanitize@AffineExpression[Plus @@ Center /@ {a},
>     Join @@ Deviations /@ {a}];
> a_AffineExpression + b_Interval := a + AffineExpression[b]
> a_Interval + b_AffineExpression := AffineExpression[a] + b
> AffineExpression[c_, dev_] + other_?NumberQ := 
>     AffineExpression[c + other, dev]
> Protect[Plus];
> 
> and then run an intensive test
> 
> LastNoiseSymbol = 0;
> rndaff := 
>     AffineExpression[Random[Real, {-1, 1}], Table[{Random[Integer, {2,
>        20}], Random[Real, {-1, 1}]}, {Random[Integer, {2, 8}]}]];
> Timing@(pretest = Table[rndaff, {10000}];)
> Timing@(test = Sanitize /@ pretest;)
> Timing@(sns = PlusNS @@ test;)
> Timing@(sp = Plus @@ test;)
> 
> I get that sp calculates in about 10 times as much time as sns (about
> 5 seconds vs about .5 seconds).

Sorry for replying to my own post, but after some extensive testing I
found out that the reason for the slowdown is the "Orderless"
attribute in Plus. Clearing it speeds things up considerably, but it
breaks "further down the line" ...
	
-- 
Giuseppe "Oblomov" Bilotta

"I'm never quite so stupid
 as when I'm being smart" --Linus van Pelt


  • Prev by Date: Re: Defining N for a new entity
  • Next by Date: Re: Derivative[1] applied to numeric constants
  • Previous by thread: Extending Plus very slow
  • Next by thread: Product and Summation sign