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.

Reply via email to