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?
>