# Write the benchmarking functions here. # See "Writing benchmarks" in the asv docs for more information. ''' class TimeSuite: """ An example benchmark that times the performance of various kinds of iterating over dictionaries in Python. """ def setup(self): self.d = {} for x in range(500): self.d[x] = None def time_keys(self): for key in self.d.keys(): pass def time_values(self): for value in self.d.values(): pass def time_range(self): d = self.d for key in range(500): d[key] class MemSuite: def mem_list(self): return [0] * 256 ''' import numpy as np from openblas_wrap import ( # level 1 dnrm2, ddot, daxpy, # level 3 dgemm, dsyrk, # lapack dgesv, # linalg.solve dgesdd, dgesdd_lwork, # linalg.svd dsyev, dsyev_lwork, # linalg.eigh ) # ### BLAS level 1 ### # dnrm2 dnrm2_sizes = [100, 1000] def run_dnrm2(n, x, incx): res = dnrm2(x, n, incx=incx) return res class Nrm2: params = [100, 1000] param_names = ["size"] def setup(self, n): rndm = np.random.RandomState(1234) self.x = rndm.uniform(size=(n,)).astype(float) def time_dnrm2(self, n): run_dnrm2(n, self.x, 1) # ddot ddot_sizes = [100, 1000] def run_ddot(x, y,): res = ddot(x, y) return res class DDot: params = ddot_sizes param_names = ["size"] def setup(self, n): rndm = np.random.RandomState(1234) self.x = np.array(rndm.uniform(size=(n,)), dtype=float) self.y = np.array(rndm.uniform(size=(n,)), dtype=float) def time_ddot(self, n): run_ddot(self.x, self.y) # daxpy daxpy_sizes = [100, 1000] def run_daxpy(x, y,): res = daxpy(x, y, a=2.0) return res class Daxpy: params = daxpy_sizes param_names = ["size"] def setup(self, n): rndm = np.random.RandomState(1234) self.x = np.array(rndm.uniform(size=(n,)), dtype=float) self.y = np.array(rndm.uniform(size=(n,)), dtype=float) def time_daxpy(self, n): run_daxpy(self.x, self.y) # ### BLAS level 3 ### # dgemm gemm_sizes = [100, 1000] def run_dgemm(a, b, c): alpha = 1.0 res = dgemm(alpha, a, b, c=c, overwrite_c=True) return res class Dgemm: params = gemm_sizes param_names = ["size"] def setup(self, n): rndm = np.random.RandomState(1234) self.a = np.array(rndm.uniform(size=(n, n)), dtype=float, order='F') self.b = np.array(rndm.uniform(size=(n, n)), dtype=float, order='F') self.c = np.empty((n, n), dtype=float, order='F') def time_dgemm(self, n): run_dgemm(self.a, self.b, self.c) # dsyrk syrk_sizes = [100, 1000] def run_dsyrk(a, c): res = dsyrk(1.0, a, c=c, overwrite_c=True) return res class DSyrk: params = syrk_sizes param_names = ["size"] def setup(self, n): rndm = np.random.RandomState(1234) self.a = np.array(rndm.uniform(size=(n, n)), dtype=float, order='F') self.c = np.empty((n, n), dtype=float, order='F') def time_dsyrk(self, n): run_dsyrk(self.a, self.c) # ### LAPACK ### # linalg.solve dgesv_sizes = [100, 1000] def run_dgesv(a, b): res = dgesv(a, b, overwrite_a=True, overwrite_b=True) return res class Dgesv: params = dgesv_sizes param_names = ["size"] def setup(self, n): rndm = np.random.RandomState(1234) self.a = (np.array(rndm.uniform(size=(n, n)), dtype=float, order='F') + np.eye(n, order='F')) self.b = np.array(rndm.uniform(size=(n, 1)), order='F') def time_dgesv(self, n): run_dgesv(self.a, self.b) # XXX: how to run asserts? # lu, piv, x, info = benchmark(run_gesv, a, b) # assert lu is a # assert x is b # assert info == 0 # linalg.svd dgesdd_sizes = ["100, 5", "1000, 222"] def run_dgesdd(a, lwork): res = dgesdd(a, lwork=lwork, full_matrices=False, overwrite_a=False) return res class Dgesdd: params = dgesdd_sizes param_names = ["(m, n)"] def setup(self, mn): m, n = (int(x) for x in mn.split(",")) rndm = np.random.RandomState(1234) a = np.array(rndm.uniform(size=(m, n)), dtype=float, order='F') lwork, info = dgesdd_lwork(m, n) lwork = int(lwork) assert info == 0 self.a, self.lwork = a, lwork def time_dgesdd(self, mn): run_dgesdd(self.a, self.lwork) # linalg.eigh dsyev_sizes = [50, 200] def run_dsyev(a, lwork): res = dsyev(a, lwork=lwork, overwrite_a=True) return res class Dsyev: params = dsyev_sizes param_names = ["size"] def setup(self, n): rndm = np.random.RandomState(1234) a = rndm.uniform(size=(n, n)) a = np.asarray(a + a.T, dtype=float, order='F') a_ = a.copy() lwork, info = dsyev_lwork(n) lwork = int(lwork) assert info == 0 self.a = a_ self.lwork = lwork def time_dsyev(self, n): run_dsyev(self.a, self.lwork)