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.