It will also depend on which math library and compiler options you use on the C 
side. 

I’ll give you a bit of a warning though, if you are making decisions based 
solely on tests like this you you might be missing the bigger picture of the 
value of systems like Go. 

A simple example, even 1.5 sounds like a lot, as soon as you do any IO that 
will fall to about .0000001 percent difference. 

> On Feb 3, 2019, at 12:49 PM, Miki Tebeka <miki.teb...@gmail.com> wrote:
> 
> Yup. Using int32 in Go reduces the difference to 1.5. Thanks
> 
>> On Sunday, February 3, 2019 at 8:35:46 PM UTC+2, Robert Engels wrote:
>> Also the go program is most likely using 64 bit math. Use int32 to compare 
>> it correctly. 
>> 
>>> On Feb 3, 2019, at 12:31 PM, Robert Engels <ren...@ix.netcom.com> wrote:
>>> 
>>> Don’t use rtdsc in the C program use gettimeofday to ensure you are 
>>> comparing the same. 
>>> 
>>>> On Feb 3, 2019, at 12:22 PM, Miki Tebeka <miki....@gmail.com> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> I'm comparing two loops in Go and C. The Go code on my machine is about 3 
>>>> times slower than C. I know C can be faster but didn't think it'll be that 
>>>> faster. Any ideas what's making the Go code slower?
>>>> 
>>>> You can see the code at https://github.com/tebeka/go-c-loop
>>>> 
>>>> Go Code:
>>>> package main
>>>> 
>>>> 
>>>> import (
>>>>  "fmt"
>>>>  "os"
>>>>  "strconv"
>>>>  "time"
>>>> )
>>>> 
>>>> 
>>>> func main() {
>>>>  n, _ := strconv.Atoi(os.Args[1])
>>>>  m, _ := strconv.Atoi(os.Args[2])
>>>> 
>>>> 
>>>>  sum := int(0)
>>>>  start := time.Now()
>>>>  for i := 0; i < 10000000; i++ {
>>>>  if i%n != m {
>>>>  sum += n
>>>>  }
>>>>  }
>>>> 
>>>> 
>>>>  fmt.Println(time.Now().Sub(start).Seconds(), sum)
>>>> }
>>>> 
>>>> 
>>>> 
>>>> C Code
>>>> #include <stdio.h>
>>>> #include <unistd.h>
>>>> #include <x86intrin.h>
>>>> 
>>>> 
>>>> 
>>>> 
>>>> int main(int argc,char** argv) {
>>>>             unsigned long long ull0,ull1;
>>>>             unsigned int sum=0,n,m;
>>>> 
>>>> 
>>>>             sscanf(argv[1],"%d",&n);
>>>>             sscanf(argv[2],"%d",&m);
>>>> 
>>>> 
>>>>             ull0 = __rdtsc();
>>>>             for(int i=0; i<10000000; i++) {
>>>>                         if(i%n != m) {
>>>>                                     sum += n;
>>>>                         }
>>>> 
>>>> 
>>>>             }
>>>> 
>>>> 
>>>>             ull1 = __rdtsc();
>>>>             printf("%f %d\n",(ull1-ull0)/2.1e9,sum);
>>>> }
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> 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...@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...@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.

Reply via email to