Actually I get the same as the original program on my mac. time ./ccode sum=606329794183272.375000 ./ccode 0.17s user 0.00s system 98% cpu 0.170 total
The Go version -O2 -Wall time ./pow sum=6.063297941832724e+14./pow 5.47s user 0.01s system 99% cpu 5.490 total fre 4 aug. 2017 kl 09:38 skrev Sebastien Binet <bi...@cern.ch>: > Dorival, > > On Fri, Aug 4, 2017 at 8:20 AM, Dorival Pedroso <dorival.pedr...@gmail.com > > wrote: > >> I've noticed that this C code: >> >> #include "math.h" >> int main() { >> double x = 2.5; >> int Nmax = 10000000; >> for (int N=0; N<Nmax; N++) { >> for (int i=0; i<20; i++) { >> pow(x, i); >> } >> } >> } >> >> can run up to 50x faster than this Go code: >> >> package main >> >> import "math" >> >> func main() { >> x := 2.5 >> Nmax := 10000000 >> for N := 0; N < Nmax; N++ { >> for i := 0; i < 20; i++ { >> math.Pow(x, float64(i)) >> } >> } >> } >> >> The C code was compiled with: gcc -O2 ccode.c -o ccode -lm >> then run with time ./ccode >> >> The Go code was compiled with: go build gcode.go >> then run with time ./gcode >> >> I've used the time command on Linux (Ubuntu) to get some estimate. >> >> So the question is: how can we make the Go code faster? >> > no, the question is whether you are really doing what you think you are > doing in C. > that's the usual question with benchmarking. > > with your initial C code, I get this on my machine: > > $> time ./c-code > real 0m0.261s > user 0m0.260s > sys 0m0.000s > > and this for the Go code: > > $> time ./go-code > real 0m12.781s > user 0m12.784s > sys 0m0.000s > > then, modifying the C code to make sure the compiler won't elide the pow > computation altogether: > > #include <math.h> > #include <stdio.h> > > int main() { > double sum = 0; > double x = 2.5; > int Nmax = 10000000; > for (int N=0; N<Nmax; N++) { > for (int i=0; i<20; i++) { > sum += pow(x, i); > } > } > printf("sum=%f\n", sum); > } > > I now get: > > $> time ./c-code-sum > sum=606329794183272.375000 > > real 0m18.385s > user 0m18.377s > sys 0m0.000s > > applying the same modifications to the Go code: > > $> time ./go-code-sum > > sum=6.063297941832724e+14 > > real 0m12.685s > user 0m12.673s > sys 0m0.010s > > -s > >> -- >> 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. >> For more options, visit https://groups.google.com/d/optout. >> > -- > 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. > For more options, visit https://groups.google.com/d/optout. > -- 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. For more options, visit https://groups.google.com/d/optout.