From 8fe51a2e45e0acb48ce9066b1f7e09ea0e9a9ad7 Mon Sep 17 00:00:00 2001 From: Nicolas Kruse Date: Mon, 1 Dec 2025 00:14:12 +0100 Subject: [PATCH] benchmark script added --- src/copapy/_matrices.py | 2 +- tests/benchmark.py | 61 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 tests/benchmark.py diff --git a/src/copapy/_matrices.py b/src/copapy/_matrices.py index 11ecc7d..92528c4 100644 --- a/src/copapy/_matrices.py +++ b/src/copapy/_matrices.py @@ -199,7 +199,7 @@ class matrix(Generic[TT]): ) @property - def T(self): + def T(self) -> 'matrix[TT]': return self.transpose() def row(self, index: int) -> vector[TT]: diff --git a/tests/benchmark.py b/tests/benchmark.py new file mode 100644 index 0000000..762e4c5 --- /dev/null +++ b/tests/benchmark.py @@ -0,0 +1,61 @@ +import copapy as cp +import numpy as np +import time + +def cp_vs_python(): + + from numpy.core._multiarray_umath import __cpu_features__ + print(__cpu_features__) + + for v_size in range(10, 800, 40): + + sum_size = 10 + #v_size = 400 + iter_size = 30000 + + v1 = cp.vector(cp.variable(float(v)) for v in range(v_size)) + v2 = cp.vector(cp.variable(float(v)) for v in [5]*v_size) + + v3 = sum((v1 + i) @ v2 for i in range(sum_size)) + + tg = cp.Target() + tg.compile(v3) + + time.sleep(0.1) + t0 = time.perf_counter() + for _ in range(iter_size): + tg.run() + elapsed_cp = time.perf_counter() - t0 + + #print(f"Copapy: {elapsed_cp:.4f} s") + + + v1 = cp.vector(float(v) for v in range(v_size)) + v2 = cp.vector(float(v) for v in [5]*v_size) + + time.sleep(0.1) + t0 = time.perf_counter() + for _ in range(iter_size//10): + v3 = sum((v1 + i) @ v2 for i in range(sum_size)) + + elapsed_python = time.perf_counter() - t0 + + #print(f"Python: {elapsed_python:.4f} s") + + + i = np.array(list(range(sum_size)),).reshape([sum_size, 1]) + + time.sleep(0.1) + t0 = time.perf_counter() + for _ in range(iter_size): + v3 = np.sum((v1 + i) @ v2) + + elapsed_np2 = time.perf_counter() - t0 + + #print(f"Numpy 2: {elapsed_np2:.4f} s") + + + print(f"{elapsed_cp}, {elapsed_python}, {elapsed_np2}") + +if __name__ == "__main__": + cp_vs_python() \ No newline at end of file