gonum.org/v1/gonum@v0.14.0/lapack/testlapack/dlantb_bench.go (about)

     1  // Copyright ©2020 The Gonum Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package testlapack
     6  
     7  import (
     8  	"fmt"
     9  	"math"
    10  	"testing"
    11  
    12  	"golang.org/x/exp/rand"
    13  
    14  	"gonum.org/v1/gonum/blas"
    15  	"gonum.org/v1/gonum/lapack"
    16  )
    17  
    18  func DlantbBenchmark(b *testing.B, impl Dlantber) {
    19  	var result float64
    20  	rnd := rand.New(rand.NewSource(1))
    21  	for _, bm := range []struct {
    22  		n, k int
    23  	}{
    24  		{n: 10000, k: 1},
    25  		{n: 10000, k: 2},
    26  		{n: 10000, k: 100},
    27  	} {
    28  		n := bm.n
    29  		k := bm.k
    30  		lda := k + 1
    31  		for _, norm := range []lapack.MatrixNorm{lapack.MaxAbs, lapack.MaxRowSum, lapack.MaxColumnSum, lapack.Frobenius} {
    32  			var work []float64
    33  			if norm == lapack.MaxColumnSum {
    34  				work = make([]float64, n)
    35  			}
    36  			for _, uplo := range []blas.Uplo{blas.Lower, blas.Upper} {
    37  				for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} {
    38  					name := fmt.Sprintf("%v%v%vN=%vK=%v", normToString(norm), uploToString(uplo), diagToString(diag), n, k)
    39  					b.Run(name, func(b *testing.B) {
    40  						for i := 0; i < b.N; i++ {
    41  							b.StopTimer()
    42  							a := make([]float64, n*lda)
    43  							for i := range a {
    44  								a[i] = rnd.NormFloat64()
    45  							}
    46  							b.StartTimer()
    47  							result = impl.Dlantb(norm, uplo, diag, bm.n, bm.k, a, lda, work)
    48  						}
    49  					})
    50  				}
    51  			}
    52  		}
    53  	}
    54  	if math.IsNaN(result) {
    55  		b.Error("unexpected NaN result")
    56  	}
    57  }