1
+ using System ;
2
+ using System . Collections . Generic ;
3
+ using BenchmarkDotNet . Attributes ;
4
+ using BenchmarkDotNet . Engines ;
5
+
6
+ namespace Silk . NET . Maths . Benchmark
7
+ {
8
+ [ MemoryDiagnoser ]
9
+ [ SimpleJob ( RunStrategy . Throughput ) ]
10
+ public class PowSmallBenchmark
11
+ {
12
+ [ ParamsSource ( "GenerateNumber" ) ] public float X ;
13
+ [ ParamsSource ( "GenerateNumber" ) ] public float Y ;
14
+
15
+ [ Benchmark ( Baseline = true ) ]
16
+ public float Sys ( )
17
+ {
18
+ #if MATHF
19
+ return MathF . Pow ( X , Y ) ;
20
+ #else
21
+ return ( float ) Math . Pow ( X , Y ) ;
22
+ #endif
23
+ }
24
+
25
+ [ Benchmark ]
26
+ public float Silk ( )
27
+ {
28
+ return Scalar . Pow ( X , Y ) ;
29
+ }
30
+
31
+ private const int NumbersTested = 1 ;
32
+ private static Random _random = new Random ( ) ;
33
+
34
+ public IEnumerable < float > GenerateNumber ( )
35
+ {
36
+ for ( int i = 0 ; i < NumbersTested ; i ++ )
37
+ yield return ( float ) _random . NextDouble ( ) ;
38
+ }
39
+ }
40
+
41
+ [ MemoryDiagnoser ]
42
+ [ SimpleJob ( RunStrategy . Throughput ) ]
43
+ public class PowBigBenchmark
44
+ {
45
+ [ ParamsSource ( "GenerateNumber" ) ] public float X ;
46
+ [ ParamsSource ( "GenerateNumber" ) ] public float Y ;
47
+
48
+ [ Benchmark ( Baseline = true ) ]
49
+ public float Sys ( )
50
+ {
51
+ #if MATHF
52
+ return MathF . Pow ( X , Y ) ;
53
+ #else
54
+ return ( float ) Math . Pow ( X , Y ) ;
55
+ #endif
56
+ }
57
+
58
+ [ Benchmark ]
59
+ public float Silk ( )
60
+ {
61
+ return Scalar . Pow ( X , Y ) ;
62
+ }
63
+
64
+ private const int NumbersTested = 1 ;
65
+ private static Random _random = new Random ( ) ;
66
+
67
+ public IEnumerable < float > GenerateNumber ( )
68
+ {
69
+ for ( int i = 0 ; i < NumbersTested ; i ++ )
70
+ yield return ( float ) ( _random . NextDouble ( ) * 10 ) + 10f ;
71
+ }
72
+ }
73
+
74
+ [ MemoryDiagnoser ]
75
+ [ SimpleJob ( RunStrategy . Throughput ) ]
76
+ public class PowIntBenchmark
77
+ {
78
+ [ ParamsSource ( "GenerateNumber" ) ] public int X ;
79
+ [ ParamsSource ( "GenerateNumber" ) ] public int Y ;
80
+
81
+ [ Benchmark ( Baseline = true ) ]
82
+ public float Sys ( )
83
+ {
84
+ #if MATHF
85
+ return MathF . Pow ( X , Y ) ;
86
+ #else
87
+ return ( float ) Math . Pow ( X , Y ) ;
88
+ #endif
89
+ }
90
+
91
+ [ Benchmark ]
92
+ public float SilkFloat ( )
93
+ {
94
+ return Scalar . Pow < float > ( X , Y ) ;
95
+ }
96
+
97
+ [ Benchmark ]
98
+ public float SilkInt ( )
99
+ {
100
+ return Scalar . Pow ( X , Y ) ;
101
+ }
102
+
103
+ private const int NumbersTested = 1 ;
104
+ private static Random _random = new Random ( ) ;
105
+
106
+ public IEnumerable < int > GenerateNumber ( )
107
+ {
108
+ for ( int i = 0 ; i < NumbersTested ; i ++ )
109
+ yield return _random . Next ( - 1000 , 1000 ) ;
110
+ }
111
+ }
112
+ }
0 commit comments