How did you get Julia?

As far as I understand it, some package managers insist that we package 
Julia with a slow BLAS implementation (because they already have one, and 
don't want Julia to cause duplication). 

kl. 09:06:27 UTC+1 søndag 9. november 2014 skrev Dahua Lin følgende:
>
> sumsq internally invokes BLAS.dot.
>
> When the length of x is small, there can be large overhead. Also, 
> NumericExtension is not recommended for now. Important functions have been 
> moved to Julia Base. You should use sumabs2 in the Julia Base instead, 
> which has a more sophisticated strategy, i.e. when x is short, it uses 
> naive for-loop; when x is long it calls BLAS.
>
> Best,
> Dahua
>
>
> On Sunday, November 9, 2014 12:34:46 PM UTC+8, Erik Schnetter wrote:
>>
>> How large is length(x)? 
>> What BLAS implementation is providing sum_sq? 
>>
>> -erik 
>>
>> On Sat, Nov 8, 2014 at 6:22 PM, David van Leeuwen 
>> <[email protected]> wrote: 
>> > 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, 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 
>>
>>
>>
>> -- 
>> Erik Schnetter <[email protected]> 
>> http://www.perimeterinstitute.ca/personal/eschnetter/ 
>>
>

Reply via email to