That seems right. Is most of the memory allocation happening in y[:, i]?

 — John

On Mar 8, 2014, at 4:11 PM, Spencer Russell <[email protected]> wrote:

> Hmm, replacing slope = A * y[:, i] with A_mul_B!(slope, A, y[:, i:i]) gave a 
> very slightly reduced memory allocation and about the same speed. Am I using 
> it correctly?
> 
> -s
> 
> 
> On Sat, Mar 8, 2014 at 3:39 PM, John Myles White <[email protected]> 
> wrote:
> Looks like A_mul_B! should work for you to avoid memory allocation. 
>  — John
> 
> 
> On Mar 8, 2014, at 3:38 PM, Spencer Russell <[email protected]> wrote:
> 
>> I'm learning a little numerical ODE stuff, so I whipped up an implementation 
>> of the Euler algorithm.
>> 
>> It accepts systems of 1st-order equations, and the code was clean and I was 
>> happy, and all was right in the world. Then I noticed that for small step 
>> sizes it was allocating a very large amount of memory. It seems that the 
>> allocation is happening in the matrix math, because when I wrote out the 
>> matrix multiplication explicitly I got about a 30x speedup and huge 
>> reduction in memory allocation (50MB instead of 2GB).
>> 
>> This feels like a bit of a nuclear option, and makes what was really nice 
>> general code into something much uglier. Is there a better solution?
>> 
>> https://gist.github.com/ssfrr/4f5ecfaf462bb5b487db
>> 
>> -s
> 
> 

Reply via email to