The test code is below:
package main
import (
"testing"
)
const rowSize = 1000000
const colSize = 100
var array [rowSize][colSize]int
func BenchmarkRow(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
sum := 0
for r := 0; r < rowSize; r++ {
for c := 0; c < colSize; c++ {
sum += array[r][c]
}
}
}
}
func BenchmarkColumn(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
sum := 0
for c := 0; c < colSize; c++ {
for r := 0; r < rowSize; r++ {
sum += array[r][c]
}
}
}
}
As we known, there is a cpu cache in computer, so the row-wise should
perform better than the column-wise. But the test result is :
go test -bench=. -count=5
goos: darwin
goarch: amd64
BenchmarkRow-4 30 42926367 ns/op
BenchmarkRow-4 30 50048505 ns/op
BenchmarkRow-4 32 38466153 ns/op
BenchmarkRow-4 28 40887279 ns/op
BenchmarkRow-4 30 36325967 ns/op
BenchmarkColumn-4 34 30991838 ns/op
BenchmarkColumn-4 36 30965998 ns/op
BenchmarkColumn-4 39 31575142 ns/op
BenchmarkColumn-4 33 35048352 ns/op
BenchmarkColumn-4 38 32584167 ns/op
PASS
It show that the column-wise traverse is quicker than the row-wise. I test
it in my macbook and ubuntu server, the result is the same
--
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].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/c3ec301f-931c-49d8-9858-59496417ce8f%40googlegroups.com.