Ah, of course. Thanks!
On Tuesday, October 4, 2016 at 12:20:08 PM UTC-7, Yichao Yu wrote: > > On Tue, Oct 4, 2016 at 3:11 PM, Jeff <[email protected] <javascript:>> > wrote: > > Adding floats to an element of a vector takes about twice as long as > adding > > float to a variable. For example, > > > > ``` > > val = zeros(1) > > for i in 1:10000000 > > val[1] += 9. > > end > > ``` > > finishes in 0.034 seconds whereas > > ``` > > a = 0. > > for i in 1:10000000 > > a += 9. > > end > > ``` > > take just 0.015 seconds. > > > > Is the former block of code looking up the address in memory of `val[1]` > at > > every iteration? Or does have something to do with `a` being stack > allocated > > whereas `val` is heap allocated? > > It's because of bounds check. > > > > > Is there a way to add floats to a particular index of a vector without > > incurring runtime overhead, if I know at compile time what the index is? > > The optimizations the compiler can do is actually a little limited in > this case. But if you know that no one else will be using the same > array at the same time you can do the unsafe optimization manually by > hoisting the load and the store out of the loop. > > val1 = val[1] > for ... > val1 += 9. > end > val[1] = val1 > > > > > Thanks! > > >
