mirror of
https://github.com/gonum/gonum.git
synced 2025-10-06 07:37:03 +08:00
mat: add benchmarks for trimul
This commit is contained in:

committed by
Dan Kortschak

parent
0fa7915c50
commit
480f85c83e
@@ -9,6 +9,8 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"golang.org/x/exp/rand"
|
||||||
|
|
||||||
"gonum.org/v1/gonum/blas/blas64"
|
"gonum.org/v1/gonum/blas/blas64"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -458,3 +460,11 @@ func TestDiagonalAtSet(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func randDiagDense(size int, rnd *rand.Rand) *DiagDense {
|
||||||
|
t := NewDiagDense(size, nil)
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
t.SetDiag(i, rnd.Float64())
|
||||||
|
}
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
package mat
|
package mat
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
@@ -513,23 +514,69 @@ func TestCopySymIntoTriangle(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkTriSum1000(b *testing.B) { triSumBench(b, 1000) }
|
|
||||||
|
|
||||||
var triSumForBench float64
|
var triSumForBench float64
|
||||||
|
|
||||||
func triSumBench(b *testing.B, size int) {
|
func BenchmarkTriSum(b *testing.B) {
|
||||||
a := randTriDense(size)
|
rnd := rand.New(rand.NewSource(1))
|
||||||
b.ResetTimer()
|
for n := 100; n <= 1600; n *= 2 {
|
||||||
|
a := randTriDense(n, rnd)
|
||||||
|
b.Run(fmt.Sprintf("BenchmarkTriSum%d", n), func(b *testing.B) {
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
triSumForBench = Sum(a)
|
triSumForBench = Sum(a)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func randTriDense(size int) *TriDense {
|
var triProductForBench *TriDense
|
||||||
|
|
||||||
|
func BenchmarkTriMul(b *testing.B) {
|
||||||
|
rnd := rand.New(rand.NewSource(1))
|
||||||
|
for n := 100; n <= 1600; n *= 2 {
|
||||||
|
triProductForBench = NewTriDense(n, Upper, nil)
|
||||||
|
a := randTriDense(n, rnd)
|
||||||
|
c := randTriDense(n, rnd)
|
||||||
|
b.Run(fmt.Sprintf("BenchmarkTriMul%d", n), func(b *testing.B) {
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
triProductForBench.MulTri(a, c)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkTriMulDiag(b *testing.B) {
|
||||||
|
rnd := rand.New(rand.NewSource(1))
|
||||||
|
for n := 100; n <= 1600; n *= 2 {
|
||||||
|
triProductForBench = NewTriDense(n, Upper, nil)
|
||||||
|
a := randTriDense(n, rnd)
|
||||||
|
c := randDiagDense(n, rnd)
|
||||||
|
b.Run(fmt.Sprintf("BenchmarkTriMulDiag%d", n), func(b *testing.B) {
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
triProductForBench.MulTri(a, c)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkTriMul2Diag(b *testing.B) {
|
||||||
|
rnd := rand.New(rand.NewSource(1))
|
||||||
|
for n := 100; n <= 1600; n *= 2 {
|
||||||
|
triProductForBench = NewTriDense(n, Upper, nil)
|
||||||
|
a := randDiagDense(n, rnd)
|
||||||
|
c := randDiagDense(n, rnd)
|
||||||
|
b.Run(fmt.Sprintf("BenchmarkTriMul2Diag%d", n), func(b *testing.B) {
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
triProductForBench.MulTri(a, c)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func randTriDense(size int, rnd *rand.Rand) *TriDense {
|
||||||
t := NewTriDense(size, Upper, nil)
|
t := NewTriDense(size, Upper, nil)
|
||||||
for i := 0; i < size; i++ {
|
for i := 0; i < size; i++ {
|
||||||
for j := i; j < size; j++ {
|
for j := i; j < size; j++ {
|
||||||
t.SetTri(i, j, rand.Float64())
|
t.SetTri(i, j, rnd.Float64())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return t
|
return t
|
||||||
|
Reference in New Issue
Block a user