|
package soa |
|
|
|
import "testing" |
|
|
|
var vs10 []Vector3 |
|
var avs10 AVector3 |
|
var vs100 []Vector3 |
|
var avs100 AVector3 |
|
var vs1000 []Vector3 |
|
var avs1000 AVector3 |
|
var vs10000 []Vector3 |
|
var avs10000 AVector3 |
|
var vs32000 []Vector3 |
|
var avs32000 AVector3 |
|
var vs64000 []Vector3 |
|
var avs64000 AVector3 |
|
var vs128000 []Vector3 |
|
var avs128000 AVector3 |
|
|
|
func init() { |
|
vs10 = randomVector3s(10) |
|
avs10 = ToSOA(vs10) |
|
|
|
vs100 = randomVector3s(100) |
|
avs100 = ToSOA(vs100) |
|
|
|
vs1000 = randomVector3s(1000) |
|
avs1000 = ToSOA(vs1000) |
|
|
|
vs10000 = randomVector3s(10000) |
|
avs10000 = ToSOA(vs10000) |
|
|
|
vs32000 = randomVector3s(32000) |
|
avs32000 = ToSOA(vs32000) |
|
|
|
vs64000 = randomVector3s(64000) |
|
avs64000 = ToSOA(vs64000) |
|
|
|
vs128000 = randomVector3s(128000) |
|
avs128000 = ToSOA(vs128000) |
|
} |
|
|
|
func bAOS(vs []Vector3, b *testing.B) { |
|
for i := 0; i < b.N; i++ { |
|
sumX := 0 |
|
sumY := 0 |
|
sumZ := 0 |
|
|
|
for j := 0; j < len(vs); j++ { |
|
sumX += vs[j].x |
|
} |
|
for j := 0; j < len(vs); j++ { |
|
sumY += vs[j].y |
|
} |
|
for j := 0; j < len(vs); j++ { |
|
sumZ += vs[j].z |
|
} |
|
} |
|
} |
|
|
|
func b1AOS(vs []Vector3, b *testing.B) { |
|
for i := 0; i < b.N; i++ { |
|
sumX := 0 |
|
sumY := 0 |
|
sumZ := 0 |
|
|
|
for j := 0; j < len(vs); j++ { |
|
sumX += vs[j].x |
|
sumY += vs[j].y |
|
sumZ += vs[j].z |
|
} |
|
} |
|
} |
|
|
|
func bSOA(avs AVector3, b *testing.B) { |
|
for i := 0; i < b.N; i++ { |
|
sumX := 0 |
|
sumY := 0 |
|
sumZ := 0 |
|
|
|
for j := 0; j < len(avs.x); j++ { |
|
sumX += avs.x[j] |
|
} |
|
for j := 0; j < len(avs.y); j++ { |
|
sumY += avs.y[j] |
|
} |
|
for j := 0; j < len(avs.z); j++ { |
|
sumZ += avs.z[j] |
|
} |
|
} |
|
} |
|
|
|
func BenchmarkAOS10(b *testing.B) { bAOS(vs10, b) } |
|
func Benchmark1AOS10(b *testing.B) { bAOS(vs10, b) } |
|
func BenchmarkSOA10(b *testing.B) { bSOA(avs10, b) } |
|
func BenchmarkAOS100(b *testing.B) { bAOS(vs100, b) } |
|
func Benchmark1AOS100(b *testing.B) { bAOS(vs100, b) } |
|
func BenchmarkSOA100(b *testing.B) { bSOA(avs100, b) } |
|
func BenchmarkAOS1000(b *testing.B) { bAOS(vs1000, b) } |
|
func Benchmark1AOS1000(b *testing.B) { bAOS(vs1000, b) } |
|
func BenchmarkSOA1000(b *testing.B) { bSOA(avs1000, b) } |
|
func BenchmarkAOS10000(b *testing.B) { bAOS(vs10000, b) } |
|
func Benchmark1AOS10000(b *testing.B) { bAOS(vs10000, b) } |
|
func BenchmarkSOA10000(b *testing.B) { bSOA(avs10000, b) } |
|
func BenchmarkAOS32000(b *testing.B) { bAOS(vs32000, b) } |
|
func Benchmark1AOS32000(b *testing.B) { bAOS(vs32000, b) } |
|
func BenchmarkSOA32000(b *testing.B) { bSOA(avs32000, b) } |
|
func BenchmarkAOS64000(b *testing.B) { bAOS(vs64000, b) } |
|
func Benchmark1AOS64000(b *testing.B) { bAOS(vs64000, b) } |
|
func BenchmarkSOA64000(b *testing.B) { bSOA(avs64000, b) } |
|
func BenchmarkAOS128000(b *testing.B) { bAOS(vs128000, b) } |
|
func Benchmark1AOS128000(b *testing.B) { bAOS(vs128000, b) } |
|
func BenchmarkSOA128000(b *testing.B) { bSOA(avs128000, b) } |