mirror of
https://github.com/gonum/gonum.git
synced 2025-10-05 15:16:59 +08:00
92 lines
1.9 KiB
Go
92 lines
1.9 KiB
Go
// 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)
|
|
}
|
|
}
|