github.com/wzzhu/tensor@v0.9.24/benchmark_dense_matop_test.go (about)

     1  package tensor
     2  
     3  import (
     4  	"math/rand"
     5  	"testing"
     6  )
     7  
     8  func BenchmarkDense_Transpose(b *testing.B) {
     9  	T := New(WithShape(100, 100, 2), WithBacking(Range(Byte, 0, 100*100*2)))
    10  	for i := 0; i < b.N; i++ {
    11  		T.T()
    12  		T.Transpose()
    13  	}
    14  }
    15  
    16  func BenchmarkNativeSet(b *testing.B) {
    17  	T := New(WithShape(10000), Of(Float64))
    18  	data := T.Data().([]float64)
    19  	for i := 0; i < b.N; i++ {
    20  		for next := 0; next < 10000; next++ {
    21  			data[next] = float64(next + 1)
    22  		}
    23  	}
    24  }
    25  
    26  func BenchmarkSetMethod(b *testing.B) {
    27  	T := New(WithShape(10000), Of(Float64))
    28  	for i := 0; i < b.N; i++ {
    29  		for next := 0; next < 10000; next++ {
    30  			T.Set(next, float64(next+1))
    31  		}
    32  	}
    33  }
    34  
    35  func BenchmarkNativeGet(b *testing.B) {
    36  	T := New(WithShape(10000), Of(Float64))
    37  	data := T.Data().([]float64)
    38  	var f float64
    39  	for i := 0; i < b.N; i++ {
    40  		for next := 0; next < 10000; next++ {
    41  			f = data[next]
    42  		}
    43  	}
    44  	_ = f
    45  }
    46  
    47  func BenchmarkGetMethod(b *testing.B) {
    48  	T := New(WithShape(10000), Of(Float64))
    49  	var f float64
    50  	for i := 0; i < b.N; i++ {
    51  		for next := 0; next < 10000; next++ {
    52  			f = T.Get(next).(float64)
    53  		}
    54  	}
    55  	_ = f
    56  }
    57  
    58  func BenchmarkGetWithIterator(b *testing.B) {
    59  	T := New(WithShape(100, 100), Of(Float64))
    60  	var f float64
    61  	data := T.Data().([]float64)
    62  	for i := 0; i < b.N; i++ {
    63  		it := IteratorFromDense(T)
    64  		var next int
    65  		var err error
    66  		for next, err = it.Start(); err == nil; next, err = it.Next() {
    67  			f = data[next]
    68  		}
    69  		if _, ok := err.(NoOpError); !ok {
    70  			b.Errorf("Error: %v", err)
    71  		}
    72  	}
    73  	_ = f
    74  }
    75  
    76  func BenchmarkComplicatedGet(b *testing.B) {
    77  	T := New(WithShape(101, 1, 36, 5), Of(Float64))
    78  	T.T(0, 2, 1, 3)
    79  	data := T.Data().([]float64)
    80  	var f float64
    81  	b.ResetTimer()
    82  	for i := 0; i < b.N; i++ {
    83  		it := IteratorFromDense(T)
    84  		var next int
    85  
    86  		var err error
    87  		for next, err = it.Start(); err == nil; next, err = it.Next() {
    88  			f = data[next]
    89  		}
    90  		if _, ok := err.(NoOpError); !ok {
    91  			b.Errorf("Error: %v", err)
    92  		}
    93  	}
    94  	_ = f
    95  }
    96  
    97  var atCoords [10000][2]int
    98  
    99  func init() {
   100  	for i := range atCoords {
   101  		atCoords[i][0] = rand.Intn(100)
   102  		atCoords[i][1] = rand.Intn(100)
   103  	}
   104  }
   105  
   106  var at1, at2 float64
   107  
   108  // func BenchmarkAtWithNativeIterator(b *testing.B) {
   109  // 	T := New(WithShape(100, 100), Of(Float64))
   110  // 	it, err := NativeMatrixF64(T)
   111  // 	if err != nil {
   112  // 		b.Fatalf("Error: %v", err)
   113  // 	}
   114  
   115  // 	var j int
   116  // 	for i := 0; i < b.N; i++ {
   117  
   118  // 		if j >= len(atCoords) {
   119  // 			j = 0
   120  // 		}
   121  
   122  // 		at := atCoords[j]
   123  // 		at1 = it[at[0]][at[1]]
   124  // 		j++
   125  // 	}
   126  // }
   127  
   128  func BenchmarkAt(b *testing.B) {
   129  	T := New(WithShape(100, 100), Of(Float64))
   130  	var j int
   131  	for i := 0; i < b.N; i++ {
   132  		if j >= len(atCoords) {
   133  			j = 0
   134  		}
   135  
   136  		at := atCoords[j]
   137  		_, err := T.At(at[0], at[1])
   138  		if err != nil {
   139  			b.Errorf("Error: %v", err)
   140  		}
   141  
   142  		j++
   143  	}
   144  }