Thanks a lot for your answer. Thank you.
On Tuesday, January 28, 2020 at 9:15:58 PM UTC+5:30, Ian Lance Taylor wrote: > > On Tue, Jan 28, 2020 at 7:33 AM nilsocket <nils...@gmail.com <javascript:>> > wrote: > >> Attached two files main.c and main.go, >> both try to compute fib(40), 20 times on `x` no.of threads/goroutines. >> fib(40) is recursive. >> >> *Prerequisites for C:* >> >> 1. libuv (https://github.com/libuv/libuv) >> >> >> >> *Compile*: >> >> - *C :* >> - *Unoptimized:* >> >> * gcc main.c -lpthread -luv * >> >> >> - *Optimized:* >> gcc-O3 main.c -lpthread -luv >> >> >> - *Go :* >> - go build >> >> >> *Run:* >> >> - >> >> *C:time UV_THREADPOOL_SIZE=x ./a.out // substitute `x` with physical core >> count * >> - >> >> *GO:./temp x // substitute `x` with physical core count * >> >> >> Results: >> >> Thread CountC (Optimized)C (Unoptimized)GO >> 1 4.38s 11.36s 11.7s >> 4 1.12s 3.1s 2.9s >> 8 1.1s 2.9s 2.7s >> >> >> Laptop with 4 physical cores(8 logical cores). >> >> Why can't go provide Optimization flag? >> I understand go developers want compiler to be simple, but the difference >> seems too big to leave it out. >> >> But isn't there any possibility to abstract the complexity and provide >> optimization flag? >> > > > Go doesn't provide an optimization flag because it always optimizes. > > Your program amounts to a microbenchmark of the tail recursion > optimization. The Go compiler doesn't optimize tail recursion, because it > confuses stack traces and breaks runtime.Callers. The C compiler has no > such constraints. You might be interested in > https://golang.org/issue/22624. > > There will always be microbenchmarks in which C code executes faster than > Go code. Microbenchmarks can be useful if analyzed with care, but the real > question for performance is always how a real program behaves. > > Ian > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/5d21abd1-1910-4bbb-a24e-6080ceaf0c1c%40googlegroups.com.