In the vectorized version the data is written back to memory while the 
unvectorized version can hold everything in the CPU registers. This can 
explain slightly different results.

Am Donnerstag, 24. April 2014 10:28:20 UTC+2 schrieb Hans W Borchers:
>
> Just being curious, I compared these two version on accuracy and execution 
> time, having grown up in Matlab as well. Let's call the first, vectorized 
> version by Tomas as 'trapz1', the second version by Cameron as 'trapz2', 
> see below. Then I get the following results:
>
>     julia> x = linspace(0, pi, 1000000);
>
>     julia> y = sin(x);
>
>     julia> trapz1(x, y)
>     1.999999999998355
>
>     julia> trapz2(x, y)
>     1.9999999999984162
>
>     julia> @time for i in 1:100; trapz1(x, y); end
>     elapsed time: 4.858258575 seconds (5600105600 bytes allocated)
>
>     julia> @time for i in 1:100; trapz2(x, y); end
>     elapsed time: 0.41866061 seconds (1600 bytes allocated)
>
>
> and in general the unvectorized version is more than 10 times faster. But 
> why are the two results different (though only by 6.1e-14)? It looks like 
> they are performing exactly the same computations. Does the sequence of 
> elementary operations play a role?
> Is it to be expected that a version with a localized length is faster? I 
> didn't see significantly different running times.
>
>
> PS: The function definitions I used here are:
>
>     function trapz1{T<:Number}(x::Vector{T}, y::Vector{T})
>         local n = length(x)
>         if length(y) != n
>             error("Vectors 'x', 'y' must be of same length.")
>         end
>         if n == 1; return 0.0; end
>         sum((x[2:end]-x[1:end-1]) .* (y[2:end]+y[1:end-1])) / 2.0
>     end
>
>
>     function trapz2{T<:Number}(x::Vector{T}, y::Vector{T})
>         local n = length(x)
>         if (length(y) != n)
>             error("Vectors 'x', 'y' must be of same length")
>         end
>         if n == 1; return 0.0; end
>         r = 0.0
>         for i in 2:n
>             r += (x[i] - x[i-1]) * (y[i] + y[i-1])
>         end
>         r / 2.0
>     end
>
>
>
> On Wednesday, April 23, 2014 11:20:50 PM UTC+2, Tomas Lycken wrote:
>>
>>
>> On Wednesday, April 23, 2014 11:10:15 PM UTC+2, Cameron McBride wrote:
>>>
>>> Or you can use the non-vectorized version and save the overhead of the 
>>> temporary arrays being created by the addition and multiplication steps.
>>>
>>
>> There's really no way I can hide that I learnt scientific computing in 
>> Matlab, is there? :P
>>
>>>
>>>

Reply via email to