No, the problem is not optimizing the inner loop---I understand that the 
@inbounds works a bit faster (which is probably why sumsq() works faster 
outside the loop). 

The problem is that `sumsq()` is about 10 times as slow as `mydot()` when 
it is used in the inner loop.  I don't understand why.  They should be 
similar in performance, but maybe there is some overhead in calling a 
function from a module that completely kille the inner loop, which is not 
there when I use (my own) function living in the same global name space.   

---david

On Saturday, November 8, 2014 11:45:07 AM UTC+1, Simon Danisch wrote:
>
> I used the advice from: 
> http://julia.readthedocs.org/en/latest/manual/performance-tips/
> Which means mydot looks like this now:
> function mydot{T}(x::Array{T})
>     s = zero(T)
>     @simd for i =1:length(x)
>        @inbounds s += x[i]*x[i]
>     end
>     s
> end
>
> This leads to the same timing on my machine.
> Is that what you're looking for?
>
> Am Samstag, 8. November 2014 10:20:39 UTC+1 schrieb David van Leeuwen:
>>
>> Hello, 
>>
>> I had a lot of fun optimizing some inner loops in the couple of few days. 
>>  Generally, I was able to churn out a last little bit of performance by 
>> writing out broadcast!()s that appeared in the inner loop.  
>>
>> However, when I tried to replace a final inner-loop vector operation by a 
>> BLAS equivalent, or one from NumericExtensions, execution time shot up 
>> enormously.  I don't understand why this is, I have the feeling it might be 
>> related to cache-behaviour in the CPU and/or difference in inlining.  
>>
>> I've tried to isolate the behaviour in this gist 
>> <https://gist.github.com/davidavdav/a2332f6620c3bb259d51>, where I have 
>> kept the structure and dimensioning of the original task in place but 
>> replaced some operations by rand!().  In the gist, the main focus is the 
>> difference between mydot()---which is just an implementation of 
>> sumsq()---and the NumericExtensions version sumsq(). 
>>
>> Plain usage of sumsq() is a bit faster than mydot(), but inside the inner 
>> loop it is about 10x as slow on my machine (a mac laptop).  Does anyone 
>> know what might be going on here?
>>
>> Thanks, 
>>
>> ---david
>>
>

Reply via email to