A bit of profiling shows that the modulo operator takes most of the time: 1.77s 1.77s (flat, cum) 100% of Total . . 2: . . 3:import ( . . 4: "testing" . . 5:) . . 6: 10ms 10ms 7:func loop(m, n int) int { . . 8: sum := int(0) 30ms 30ms 9: for i := 0; i < 10000000; i++ { 1.73s 1.73s 10: if i%n != m { . . 11: sum += n . . 12: } . . 13: } . . 14: return sum . . 15:}
On Sunday, February 3, 2019 at 8:22:54 PM UTC+2, Miki Tebeka 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+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.