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

     1  package tensor
     2  
     3  import (
     4  	"testing"
     5  
     6  	"gorgonia.org/vecf64"
     7  )
     8  
     9  func BenchmarkDense_Mul_Unsafe(b *testing.B) {
    10  	A := New(WithShape(100, 100, 2), WithBacking(Range(Float64, 0, 100*100*2)))
    11  	B := New(WithShape(100, 100, 2), WithBacking(Range(Float64, 1, (100*100*2)+1)))
    12  
    13  	for i := 0; i < b.N; i++ {
    14  		A.Mul(B, UseUnsafe())
    15  	}
    16  }
    17  
    18  func BenchmarkNative_Mul_Unsafe(b *testing.B) {
    19  	A := Range(Float64, 0, 100*100*2).([]float64)
    20  	B := Range(Float64, 1, (100*100*2)+1).([]float64)
    21  
    22  	f := func(a, b []float64) {
    23  		for i, v := range a {
    24  			a[i] = v * b[i]
    25  		}
    26  	}
    27  
    28  	for i := 0; i < b.N; i++ {
    29  		f(A, B)
    30  	}
    31  }
    32  
    33  func BenchmarkNative_Mul_Unsafe_vec(b *testing.B) {
    34  	A := Range(Float64, 0, 100*100*2).([]float64)
    35  	B := Range(Float64, 1, (100*100*2)+1).([]float64)
    36  
    37  	for i := 0; i < b.N; i++ {
    38  		vecf64.Mul(A, B)
    39  	}
    40  }
    41  
    42  func BenchmarkAPI_Mul_Unsafe(b *testing.B) {
    43  	A := New(WithShape(100, 100, 2), WithBacking(Range(Float64, 0, 100*100*2)))
    44  	B := New(WithShape(100, 100, 2), WithBacking(Range(Float64, 1, (100*100*2)+1)))
    45  
    46  	for i := 0; i < b.N; i++ {
    47  		Mul(A, B, UseUnsafe())
    48  	}
    49  }
    50  
    51  func BenchmarkDense_ContiguousSliced_Mul_Unsafe(b *testing.B) {
    52  	A := New(WithShape(4, 100, 100), WithBacking(Range(Float64, 0, 100*100*4)))
    53  	B := New(WithShape(2, 100, 100), WithBacking(Range(Float64, 1, (100*100*2)+1)))
    54  	Sliced, _ := A.Slice(makeRS(1, 3)) // result should be contiguous
    55  
    56  	for i := 0; i < b.N; i++ {
    57  		Mul(Sliced, B, UseUnsafe())
    58  	}
    59  }
    60  
    61  func BenchmarkDense_NonContiguousSliced_Mul_Unsafe(b *testing.B) {
    62  	A := New(WithShape(100, 4, 100), WithBacking(Range(Float64, 0, 100*100*4)))
    63  	B := New(WithShape(100, 2, 100), WithBacking(Range(Float64, 1, (100*100*2)+1)))
    64  	Sliced, _ := A.Slice(nil, makeRS(1, 3)) // result should be non-contiguous
    65  
    66  	for i := 0; i < b.N; i++ {
    67  		Mul(Sliced, B, UseUnsafe())
    68  	}
    69  }
    70  
    71  func BenchmarkAPI_MulScalar_Unsafe(b *testing.B) {
    72  	A := New(WithShape(100, 100, 2), WithBacking(Range(Float64, 0, 100*100*2)))
    73  	B := 3.141
    74  	for i := 0; i < b.N; i++ {
    75  		Mul(A, B, UseUnsafe())
    76  	}
    77  }
    78  
    79  func BenchmarkNative_MulScalar_Unsafe(b *testing.B) {
    80  	A := Range(Float64, 0, 100*100*2).([]float64)
    81  	B := 3.141
    82  	f := func(a []float64, b float64) {
    83  		for i := range a {
    84  			a[i] *= b
    85  		}
    86  	}
    87  
    88  	for i := 0; i < b.N; i++ {
    89  		f(A, B)
    90  	}
    91  }