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 }