MathGroup Archive 2007

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

Search the Archive

Re: Re: Speeding Up Realtime Visualization

  • To: mathgroup at
  • Subject: [mg84289] Re: [mg84273] Re: Speeding Up Realtime Visualization
  • From: Sseziwa Mukasa <mukasa at>
  • Date: Mon, 17 Dec 2007 19:19:07 -0500 (EST)
  • References: <>

On Dec 17, 2007, at 3:03 AM, Will wrote:

> Ok, great! It has sped it up a bit. Thanks.
> I think my problem is actually *how* I'm forming the matrix which  
> I'm viewing, not actually visualizing the thing.
> Here's the code where I think I'm going wrong:
> (this is a double buffer setup)
> While[True,
>      For[i = 2, i < length, i++,
>         For[j = 2, j < length, j++,
>       x[[c,i,j]] = (functions of x[[p,i,j]] & y[[p,i,j]]);
>       y[[c,i,j]] = (functions of x[[p,i,j]] & y[[p,i,j]]);
>         ]
>      ]
>     If[p == 1, c = 1; p = 2, c = 2; p = 1]; (c/p inverter)
> ]
> Note that for each definition of x[[c,1,2]] and y[[c,1,2]], the  
> functions call 5-6 values from x[[p]] and/or y[[p]]. So I suspect  
> it's this array setup I have that's slowing down the execution.
> I've also tried setting up the definitions of the arrays via a  
> Compile function. Although this speeds it up a little more, it's  
> still no where near what I need/want it to be. Of course, I can  
> turn down my integrator step intervals to get the speed I want, but  
> the drop in quality is way too much.
> Any ideas?

It's hard to say without more details, but at the level you've  
described the problem, perhaps it would be better to do all your  
computations using MapIndexed, or Array or something and do your  
assignment once to x[[c,Range[2,length],Range[2,Length]]] and y 
[[c,Range[2,length],Range[2,Length]]].  It may not improve anything  
or it may allow Mathematica to perform further optimization, in  
general large block transfers are more efficient than small memory  
copies but at the level of the Mathematica language it's hard to be  
sure how such a statement is going to be implemented.  This technique  
would of course use more memory, but there's usually a time/space  
tradeoff in these situations anyway.  Also to facilitate block memory  
transfers you may want to split x and y into x1, y1 and x2, y2 and  
reorganize your loop accordingly eg.

      For[i = 2, i < length, i++,
         For[j = 2, j < length, j++,

       x2[[i,j]] = (functions of x1[[i,j]] & y[[i,j]]);

       y2[[i,j]] = (functions of x1[[i,j]] & y1[[i,j]]);

      For[i = 2, i < length, i++,
         For[j = 2, j < length, j++,

       x1[[i,j]] = (functions of x2[[i,j]] & y2[[i,j]]);

       y1[[i,j]] = (functions of x2[[i,j]] & y2[[i,j]]);


Without details on how x[[c,i,j]] depends on x[[p,i,j]] and y 
[[p,i,j]] it's hard to see any options for improvement.

Incidentally, why do you have an extra row and column in y and x?



  • Prev by Date: Re: quadratic multiplication
  • Next by Date: RE: Mathematica 6 Documentation - how does one add to it?
  • Previous by thread: Re: Speeding Up Realtime Visualization
  • Next by thread: Re: Re: Speeding Up Realtime Visualization