Ivar, thank you. Embarrassing, even though libm and "libm" are not that different visually.
2014-03-01 20:19 GMT+01:00 Ivar Nesje <[email protected]>: > 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 >> > -- Med venlig hilsen Andreas Noack Jensen
