(
The code change is compile time constant —
array_length int = 100000000
— changed to run time value —
array_length int = 1000000 * iterations
)
package main
import "os"
import "fmt"
import "strconv"
func main() {
var (
element, iteration, iterations, innerloop int
sum float64
)
if len(os.Args) > 1 {
iterations,_ = strconv.Atoi(os.Args[1])
}
fmt.Printf("iterations %d\n", iterations)
var (
array_length int = 100000000
array []float64 = make([]float64, array_length)
)
for element = 0; element < array_length; element++ {
array[element] = float64(element)
}
for iteration = 0; iteration < iterations; iteration++ {
for innerloop = 0; innerloop < 1000000000; innerloop++ {
sum += array[(iteration + innerloop) % array_length]
}
}
fmt.Printf("sum %E\n", sum)
array = nil
}
$ /opt/src/go1.16/go/bin/go build -o out test.go
$ time ./out 100
iterations 100
sum 5.000000E+18
real 3m3.225s
====
package main
import "os"
import "fmt"
import "strconv"
func main() {
var (
element, iteration, iterations, innerloop int
sum float64
)
if len(os.Args) > 1 {
iterations,_ = strconv.Atoi(os.Args[1])
}
fmt.Printf("iterations %d\n", iterations)
var (
array_length int = 1000000 * iterations
array []float64 = make([]float64, array_length)
)
for element = 0; element < array_length; element++ {
array[element] = float64(element)
}
for iteration = 0; iteration < iterations; iteration++ {
for innerloop = 0; innerloop < 1000000000; innerloop++ {
sum += array[(iteration + innerloop) % array_length]
}
}
fmt.Printf("sum %E\n", sum)
array = nil
}
$ /opt/src/go1.16/go/bin/go build -o out test.go
$ time ./out 100
iterations 100
sum 5.000000E+18
real 18m20.737s