Hi Ivar,
I tried your version on my system (which I called test2.jl) and
julia> test2()
1.9558914085412562
elapsed time: 0.31957987 seconds (23456 bytes allocated)
1.9558914085412367
elapsed time: 1.488734269 seconds (136 bytes allocated)
1.9558914085412367
elapsed time: 1.549758093 seconds (136 bytes allocated)
Some misconfiguration on my system?
Also it does not seems to be something related to BigInt as
function test3()
const N=10000000;
@time begin
s = 0.0
for i=1.0:1.0:float64(N)
s+= ccall((:sin,"libc"),Float64,(Float64,),i)
end
println(s)
end
@time begin
s = 0.0
for i=1.0:1.0:float64(N)
s += sin(i)
end
println(s)
end
end
Now everything is Float64, yet
julia> test3()
1.9558914085412562
elapsed time: 0.321183789 seconds (320 bytes allocated)
1.9558914085412367
elapsed time: 1.521137678 seconds (320 bytes allocated)
On Saturday, March 1, 2014 8:19:05 PM UTC+1, Ivar Nesje wrote:
>
> Andreas: You compare libopenlibm to the system libm
>
> function test1()
> const N=10000000;
> @time begin
> s = 0.0
> for i=1:float(N)
> s+= ccall((:sin,"libc"),Float64,(Float64,),i)
> end
> println(s)
> end
> @time begin
> s = 0.0
> for i=1:float(N)
> s+=
> Base.nan_dom_err(ccall((:sin,"libopenlibm"),Float64,(Float64,),i),i)
> end
> println(s)
> end
> @time begin
> s::Float64 = 0.0
> for i=1:float(N)
> s += sin(i)
> end
> println(s)
> end
> end
> test1 (generic function with 1 method)
>
> does not give a significant difference between the built in `sin` function
> and ccall.
>
> Ivar
>
>
> kl. 19:57:03 UTC+1 lørdag 1. mars 2014 skrev Andreas Noack Jensen følgende:
>>
>> But it is weird that if the definition from math.jl is added such that
>>
>> function test1()
>> const N=10000000;
>> @time begin
>> s = 0.0
>> for i=1:float(N)
>> s+= ccall((:sin,"libc"),Float64,(Float64,),i)
>> end
>> println(s)
>> end
>> @time begin
>> s = 0.0
>> for i=1:float(N)
>> s+= nan_dom_err(ccall((:sin,"libm"),Float64,(Float64,),i),i)
>> end
>> println(s)
>> end
>> @time begin
>> s::Float64 = 0.0
>> for i=1:float(N)
>> s += sin(i)
>> end
>> println(s)
>> end
>> end
>>
>> I get
>>
>> julia> Newton.test1()
>>
>> 1.9558914085412562
>> elapsed time: 0.437409166 seconds (136 bytes allocated)
>> 1.9558914085412562
>> elapsed time: 0.429992684 seconds (136 bytes allocated)
>> 1.9558914085412367
>> elapsed time: 2.495838008 seconds (136 bytes allocated)
>>
>>
>>
>> 2014-03-01 19:50 GMT+01:00 Ivar Nesje <[email protected]>:
>> >
>> > Why do you care for the performance of sin of big integers? I got about
>> 2 time difference with your test function, but when I did the test with 1.2
>> as the constant value to take sin of and got.
>> >
>> > julia> function test1()
>> > const N=10000000;
>> > @time begin
>> > s = 0.0
>> > for i=1:N
>> > s+= ccall((:sin,"libc"),Float64,(Float64,),1.2)
>> > end
>> > println(s)
>> > end
>> > @time begin
>> > s = 0.0
>> > for i=1:N
>> > s += sin(1.2)
>> > end
>> > println(s)
>> > end
>> > end
>> > test1 (generic function with 1 method)
>> >
>> > julia> test1()
>> > 9.320390858253522e6
>> > elapsed time: 1.071002334 seconds (168 bytes allocated)
>> > 9.320390858253522e6
>> > elapsed time: 0.930658493 seconds (168 bytes allocated)
>> >
>> >
>> > It would be expected that the native sin function in Julia would be
>> slower than ccall to libc, because we check the return value to raise an
>> exception (instead of a NaN value).
>> >
>> > We also use openlibm for our math functions, and the performance of
>> that might be different from the libm on your system.
>> >
>> > Ivar
>> >
>> > kl. 18:53:39 UTC+1 lørdag 1. mars 2014 skrev Andrea Pagnani følgende:
>> >>
>> >> Dear all,
>> >>
>> >> julia's trigonometric functions seem to be almost 5 time slower than
>> their libc counterpart (at least on my MacBook Pro OS X 10.9.2):
>> >>
>> >> function test1()
>> >>
>> >> const N=10000000;
>> >> @time begin
>> >> s = 0.0
>> >> for i=1:N
>> >> s+= ccall((:sin,"libc"),Float64,(Float64,),i)
>> >> end
>> >> println(s)
>> >> end
>> >> @time begin
>> >> s = 0.0
>> >> for i=1:N
>> >> s += sin(i)
>> >> end
>> >> println(s)
>> >> end
>> >> end
>> >>
>> >>
>> >> If you run this simple code you obtain
>> >>
>> >> julia> test1()
>> >> 1.9558914085412562
>> >> elapsed time: 0.275374895 seconds (88 bytes allocated)
>> >> 1.9558914085412367
>> >> elapsed time: 1.567108143 seconds (88 bytes allocated)
>> >> 1.9558914085412367
>> >>
>> >> The same behaviour is obtained with other trigonometric functions
>> >> Is this something to be expected?
>>
>>
>>
>>
>> --
>> Med venlig hilsen
>>
>> Andreas Noack Jensen
>>
>