SubArrays work much better in julia 0.4; on the tasks you posted, you are likely to see substantially better performance.
--Tim On Tuesday, January 06, 2015 08:15:03 AM Tomas Mikoviny wrote: > Hi, > I'm trying to optimise julia script for spectra baseline correction using > rolling ball algorithm > (http://linkinghub.elsevier.com/retrieve/pii/0168583X95009086, > http://cran.r-project.org/web/packages/baseline). > Profiling the code showed that the most time consuming part is actually > subarray pickup. > I was just wondering if there is any other possible speedup for this > problem? > > I've started initially with standard sub-indexing: > > > a = rand(300000); > w = 200; > > > > @time for i in 1:length(a)-w > > a[i:i+w] > end > elapsed time: 0.387236571 seconds (645148344 bytes allocated, 56.46% gc > time) > > > > Then I've tried directly with subarray function and it improved the runtime > significantly: > > @time for i in 1:length(a)-w > > sub(a,i:i+w) > end > elapsed time: 0.10720574 seconds (86321144 bytes allocated, 32.13% gc time) > > > > With approach to internally remove and add elements I've gained yet some > extra speed-up (eliminating gc): > > subset = a[1:1+w] > > @time for i in 2:length(a)-w > splice!(subset,1) > insert!(subset,w+1,a[i+w]) > end > elapsed time: 0.067341484 seconds (33556344 bytes allocated) > > > However I wonder if this is the end.... > > And obligatory version info: > > Julia Version 0.3.4 > Commit 3392026* (2014-12-26 10:42 UTC) > Platform Info: > System: Darwin (x86_64-apple-darwin13.4.0) > CPU: Intel(R) Core(TM) i5-4690 CPU @ 3.50GHz > WORD_SIZE: 64 > BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Haswell) > LAPACK: libopenblas > LIBM: libopenlibm > LLVM: libLLVM-3.3
