I'm doing row-wise/col-wise calculation, isn't it inevitable to create row/col copies after iteratively extract single elements? I will consider to take a shot on option 1, ArrayViews if this single-element-extraction comes to a dead end. Thanks, Milan!
On Fri Nov 28 2014 at 6:00:07 PM Milan Bouchet-Valat <[email protected]> wrote: > Le vendredi 28 novembre 2014 à 01:45 -0800, Todd Leo a écrit : > > Hi Fellows, > > > > > > Say I have a 1000 x 1000 matrix, and I'm going to do some calculation > > in a nested for-loop, with each pair of rows/cols in the matrix. But I > > suffered a heavy performance penalty in row/col extraction. Here's my > > minimum reproducible example, which I hope explains itself. > > > > > > A = rand(0.:0.01:1.,1000,1000) > > > > > > function test(x) > > for i in 1:1000, j in 1:1000 > > x[:,i] > > x[:,j] > > end > > end > > > > > > test(A) # warm up > > gc() > > @time test(A) > > ## elapsed time: 13.28547939 seconds (16208000080 bytes allocated, > > 72.42% gc time) > > > > It takes 13 seconds, only extracting the rows/cols for the sake of > > further calculations. I'm wondering if anything I could do to improve > > the performance.Thanks in advance. > This is because extracting a row/column creates a copy. Depending on > what calculation you want to do on them, you can: > - use arrays views (which will become the default when extracting slices > in 0.4): https://github.com/JuliaLang/ArrayViews.jl > - manually write loops to go over the row and column so that you only > extract one individual element of the matrix at a time > > > Regards >
