| // Copyright ©2014 The Gonum Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package testblas |
| |
| import ( |
| "testing" |
| |
| "golang.org/x/exp/rand" |
| |
| "gonum.org/v1/gonum/blas" |
| ) |
| |
| func DgemvBenchmark(b *testing.B, impl Dgemver, tA blas.Transpose, m, n, incX, incY int) { |
| var lenX, lenY int |
| if tA == blas.NoTrans { |
| lenX = n |
| lenY = m |
| } else { |
| lenX = m |
| lenY = n |
| } |
| xr := make([]float64, lenX) |
| for i := range xr { |
| xr[i] = rand.Float64() |
| } |
| x := makeIncremented(xr, incX, 0) |
| yr := make([]float64, lenY) |
| for i := range yr { |
| yr[i] = rand.Float64() |
| } |
| y := makeIncremented(yr, incY, 0) |
| a := make([]float64, m*n) |
| for i := range a { |
| a[i] = rand.Float64() |
| } |
| |
| b.ResetTimer() |
| for i := 0; i < b.N; i++ { |
| impl.Dgemv(tA, m, n, 2, a, n, x, incX, 3, y, incY) |
| } |
| } |
| |
| func DgerBenchmark(b *testing.B, impl Dgerer, m, n, incX, incY int) { |
| xr := make([]float64, m) |
| for i := range xr { |
| xr[i] = rand.Float64() |
| } |
| x := makeIncremented(xr, incX, 0) |
| yr := make([]float64, n) |
| for i := range yr { |
| yr[i] = rand.Float64() |
| } |
| y := makeIncremented(yr, incY, 0) |
| a := make([]float64, m*n) |
| for i := range a { |
| a[i] = rand.Float64() |
| } |
| |
| b.ResetTimer() |
| for i := 0; i < b.N; i++ { |
| impl.Dger(m, n, 2, x, incX, y, incY, a, n) |
| } |
| } |
| |
| type Sgerer interface { |
| Sger(m, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32, lda int) |
| } |
| |
| func SgerBenchmark(b *testing.B, blasser Sgerer, m, n, incX, incY int) { |
| xr := make([]float32, m) |
| for i := range xr { |
| xr[i] = rand.Float32() |
| } |
| x := makeIncremented32(xr, incX, 0) |
| yr := make([]float32, n) |
| for i := range yr { |
| yr[i] = rand.Float32() |
| } |
| y := makeIncremented32(yr, incY, 0) |
| a := make([]float32, m*n) |
| for i := range a { |
| a[i] = rand.Float32() |
| } |
| |
| b.ResetTimer() |
| for i := 0; i < b.N; i++ { |
| blasser.Sger(m, n, 2, x, incX, y, incY, a, n) |
| } |
| } |