mat: don't use global rand state

This commit is contained in:
Dan Kortschak
2020-03-17 21:02:32 +10:30
parent 3efb0d11ee
commit 7b6a63e4e7
15 changed files with 170 additions and 118 deletions

View File

@@ -498,8 +498,9 @@ func BenchmarkAddScaledVec1000Inc20(b *testing.B) { addScaledVecBench(b, 1000,
func BenchmarkAddScaledVec10000Inc20(b *testing.B) { addScaledVecBench(b, 10000, 20) }
func BenchmarkAddScaledVec100000Inc20(b *testing.B) { addScaledVecBench(b, 100000, 20) }
func addScaledVecBench(b *testing.B, size, inc int) {
x := randVecDense(size, inc, 1, rand.NormFloat64)
y := randVecDense(size, inc, 1, rand.NormFloat64)
src := rand.NewSource(1)
x := randVecDense(size, inc, 1, src)
y := randVecDense(size, inc, 1, src)
b.ResetTimer()
var v VecDense
for i := 0; i < b.N; i++ {
@@ -523,7 +524,8 @@ func BenchmarkScaleVec1000Inc20(b *testing.B) { scaleVecBench(b, 1000, 20) }
func BenchmarkScaleVec10000Inc20(b *testing.B) { scaleVecBench(b, 10000, 20) }
func BenchmarkScaleVec100000Inc20(b *testing.B) { scaleVecBench(b, 100000, 20) }
func scaleVecBench(b *testing.B, size, inc int) {
x := randVecDense(size, inc, 1, rand.NormFloat64)
src := rand.NewSource(1)
x := randVecDense(size, inc, 1, src)
b.ResetTimer()
var v VecDense
for i := 0; i < b.N; i++ {
@@ -547,8 +549,9 @@ func BenchmarkAddVec1000Inc20(b *testing.B) { addVecBench(b, 1000, 20) }
func BenchmarkAddVec10000Inc20(b *testing.B) { addVecBench(b, 10000, 20) }
func BenchmarkAddVec100000Inc20(b *testing.B) { addVecBench(b, 100000, 20) }
func addVecBench(b *testing.B, size, inc int) {
x := randVecDense(size, inc, 1, rand.NormFloat64)
y := randVecDense(size, inc, 1, rand.NormFloat64)
src := rand.NewSource(1)
x := randVecDense(size, inc, 1, src)
y := randVecDense(size, inc, 1, src)
b.ResetTimer()
var v VecDense
for i := 0; i < b.N; i++ {
@@ -572,8 +575,9 @@ func BenchmarkSubVec1000Inc20(b *testing.B) { subVecBench(b, 1000, 20) }
func BenchmarkSubVec10000Inc20(b *testing.B) { subVecBench(b, 10000, 20) }
func BenchmarkSubVec100000Inc20(b *testing.B) { subVecBench(b, 100000, 20) }
func subVecBench(b *testing.B, size, inc int) {
x := randVecDense(size, inc, 1, rand.NormFloat64)
y := randVecDense(size, inc, 1, rand.NormFloat64)
src := rand.NewSource(1)
x := randVecDense(size, inc, 1, src)
y := randVecDense(size, inc, 1, src)
b.ResetTimer()
var v VecDense
for i := 0; i < b.N; i++ {
@@ -581,14 +585,15 @@ func subVecBench(b *testing.B, size, inc int) {
}
}
func randVecDense(size, inc int, rho float64, rnd func() float64) *VecDense {
func randVecDense(size, inc int, rho float64, src rand.Source) *VecDense {
if size <= 0 {
panic("bad vector size")
}
rnd := rand.New(src)
data := make([]float64, size*inc)
for i := range data {
if rand.Float64() < rho {
data[i] = rnd()
if rnd.Float64() < rho {
data[i] = rnd.NormFloat64()
}
}
return &VecDense{
@@ -605,7 +610,8 @@ func BenchmarkVectorSum100000(b *testing.B) { vectorSumBench(b, 100000) }
var vectorSumForBench float64
func vectorSumBench(b *testing.B, size int) {
a := randVecDense(size, 1, 1.0, rand.NormFloat64)
src := rand.NewSource(1)
a := randVecDense(size, 1, 1.0, src)
b.ResetTimer()
for i := 0; i < b.N; i++ {
vectorSumForBench = Sum(a)