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 [email protected].
For more options, visit https://groups.google.com/d/optout.