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.

Reply via email to