summaryrefslogtreecommitdiff
path: root/benchmarks
diff options
context:
space:
mode:
authorSayed Adel <seiko@imavr.com>2021-12-31 04:15:14 +0200
committerSayed Adel <seiko@imavr.com>2021-12-31 04:50:03 +0200
commit91a4b980b2381c77faede2f936da4bc9831802cd (patch)
tree390e5e3c290d2e360289cd84d182c5f8c5110185 /benchmarks
parent0d171288ecd9ccfee739b15faa58de8243ae4a53 (diff)
downloadnumpy-91a4b980b2381c77faede2f936da4bc9831802cd.tar.gz
BENCH: cover integer max/min and fmax/fmin tests
also covers variant of strides sizes
Diffstat (limited to 'benchmarks')
-rw-r--r--benchmarks/benchmarks/bench_reduce.py18
-rw-r--r--benchmarks/benchmarks/bench_ufunc_strides.py35
2 files changed, 40 insertions, 13 deletions
diff --git a/benchmarks/benchmarks/bench_reduce.py b/benchmarks/benchmarks/bench_reduce.py
index 7b05f4fcc..81316c492 100644
--- a/benchmarks/benchmarks/bench_reduce.py
+++ b/benchmarks/benchmarks/bench_reduce.py
@@ -46,7 +46,8 @@ class AnyAll(Benchmark):
class MinMax(Benchmark):
- params = [np.float32, np.float64, np.intp]
+ params = [np.int8, np.uint8, np.int16, np.uint16, np.int32, np.uint32,
+ np.int64, np.uint64, np.float32, np.float64, np.intp]
param_names = ['dtype']
def setup(self, dtype):
@@ -58,8 +59,21 @@ class MinMax(Benchmark):
def time_max(self, dtype):
np.max(self.d)
+class FMinMax(Benchmark):
+ params = [np.float32, np.float64]
+ param_names = ['dtype']
+
+ def setup(self, dtype):
+ self.d = np.ones(20000, dtype=dtype)
+
+ def time_min(self, dtype):
+ np.fmin.reduce(self.d)
+
+ def time_max(self, dtype):
+ np.fmax.reduce(self.d)
+
class ArgMax(Benchmark):
- params = [np.float32, bool]
+ params = [np.float32, np.float64, bool]
param_names = ['dtype']
def setup(self, dtype):
diff --git a/benchmarks/benchmarks/bench_ufunc_strides.py b/benchmarks/benchmarks/bench_ufunc_strides.py
index 75aa510a6..b751e4804 100644
--- a/benchmarks/benchmarks/bench_ufunc_strides.py
+++ b/benchmarks/benchmarks/bench_ufunc_strides.py
@@ -44,27 +44,40 @@ class AVX_UFunc_log(Benchmark):
def time_log(self, stride, dtype):
np.log(self.arr[::stride])
-avx_bfuncs = ['maximum',
- 'minimum']
-class AVX_BFunc(Benchmark):
+binary_ufuncs = [
+ 'maximum', 'minimum', 'fmax', 'fmin'
+]
+binary_dtype = ['f', 'd']
- params = [avx_bfuncs, dtype, stride]
- param_names = ['avx_based_bfunc', 'dtype', 'stride']
+class Binary(Benchmark):
+ param_names = ['ufunc', 'stride_in0', 'stride_in1', 'stride_out', 'dtype']
+ params = [binary_ufuncs, stride, stride, stride_out, binary_dtype]
timeout = 10
- def setup(self, ufuncname, dtype, stride):
+ def setup(self, ufuncname, stride_in0, stride_in1, stride_out, dtype):
np.seterr(all='ignore')
try:
self.f = getattr(np, ufuncname)
except AttributeError:
raise NotImplementedError(f"No ufunc {ufuncname} found") from None
- N = 10000
- self.arr1 = np.array(np.random.rand(stride*N), dtype=dtype)
- self.arr2 = np.array(np.random.rand(stride*N), dtype=dtype)
+ N = 100000
+ self.arr1 = np.array(np.random.rand(stride_in0*N), dtype=dtype)
+ self.arr2 = np.array(np.random.rand(stride_in1*N), dtype=dtype)
+ self.arr_out = np.empty(stride_out*N, dtype)
- def time_ufunc(self, ufuncname, dtype, stride):
- self.f(self.arr1[::stride], self.arr2[::stride])
+ def time_ufunc(self, ufuncname, stride_in0, stride_in1, stride_out, dtype):
+ self.f(self.arr1[::stride_in0], self.arr2[::stride_in1],
+ self.arr_out[::stride_out])
+
+
+binary_int_ufuncs = ['maximum', 'minimum']
+binary_int_dtype = ['b', 'B', 'h', 'H', 'i', 'I', 'l', 'L', 'q', 'Q']
+
+class BinaryInt(Binary):
+
+ param_names = ['ufunc', 'stride_in0', 'stride_in1', 'stride_out', 'dtype']
+ params = [binary_int_ufuncs, stride, stride, stride_out, binary_int_dtype]
class AVX_ldexp(Benchmark):