From 7c93c40b08a7334ed4466edb1709f82ba7bb047f Mon Sep 17 00:00:00 2001 From: Rohan Yadav Date: Fri, 26 Mar 2021 17:07:02 -0700 Subject: [PATCH] numpy,taco: sweep over sparsities in slicing benchmarks --- numpy/windowing.py | 84 ++++++++++++++++++++++++++-------------------- taco/windowing.cpp | 15 +++++---- 2 files changed, 56 insertions(+), 43 deletions(-) diff --git a/numpy/windowing.py b/numpy/windowing.py index 98c08ec..b1cd5f1 100644 --- a/numpy/windowing.py +++ b/numpy/windowing.py @@ -32,11 +32,12 @@ def sliceTensor(tensor, dim, config): # Benchmark to measure the time it takes to perform the slice. @pytest.mark.parametrize("dim", [5000, 10000, 20000]) @pytest.mark.parametrize("format", ['csr']) +@pytest.mark.parametrize("sparsity", [0.01, 0.005, 0.05]) @pytest.mark.parametrize("config", sizeConfigs[:len(sizeConfigs)-1]) -def bench_slice_sparse_window(tacoBench, dim, format, config): +def bench_slice_sparse_window(tacoBench, dim, format, sparsity, config): loader = RandomScipySparseTensorLoader(format) - matrix = loader.random((dim, dim), 0.01).astype('float64') - matrix2 = loader.random((dim, dim), 0.01, variant=1).astype('float64') + matrix = loader.random((dim, dim), sparsity).astype('float64') + matrix2 = loader.random((dim, dim), sparsity, variant=1).astype('float64') def bench(): x = sliceTensor(matrix, dim, config) x2 = sliceTensor(matrix2, dim, config) @@ -46,11 +47,12 @@ def bench(): # Benchmark to measure the time it takes to perform the addition. @pytest.mark.parametrize("dim", [5000, 10000, 20000]) @pytest.mark.parametrize("format", ['csr']) +@pytest.mark.parametrize("sparsity", [0.01, 0.005, 0.05]) @pytest.mark.parametrize("config", sizeConfigs[:len(sizeConfigs)-1]) -def bench_add_sliced_sparse_window(tacoBench, dim, format, config): +def bench_add_sliced_sparse_window(tacoBench, dim, format, sparsity, config): loader = RandomScipySparseTensorLoader(format) - matrix = loader.random((dim, dim), 0.01).astype('float64') - matrix2 = loader.random((dim, dim), 0.01, variant=1).astype('float64') + matrix = loader.random((dim, dim), sparsity).astype('float64') + matrix2 = loader.random((dim, dim), sparsity, variant=1).astype('float64') x = sliceTensor(matrix, dim, config) x2 = sliceTensor(matrix2, dim, config) def bench(): @@ -60,11 +62,12 @@ def bench(): # Benchmark that performs the slice and addition. @pytest.mark.parametrize("dim", [5000, 10000, 20000]) @pytest.mark.parametrize("format", ['csr']) +@pytest.mark.parametrize("sparsity", [0.01, 0.005, 0.05]) @pytest.mark.parametrize("config", sizeConfigs) -def bench_add_sparse_window(tacoBench, dim, format, config): +def bench_add_sparse_window(tacoBench, dim, format, sparsity, config): loader = RandomScipySparseTensorLoader(format) - matrix = loader.random((dim, dim), 0.01).astype('float64') - matrix2 = loader.random((dim, dim), 0.01, variant=1).astype('float64') + matrix = loader.random((dim, dim), sparsity).astype('float64') + matrix2 = loader.random((dim, dim), sparsity, variant=1).astype('float64') def bench(): x = sliceTensor(matrix, dim, config) x2 = sliceTensor(matrix2, dim, config) @@ -74,11 +77,12 @@ def bench(): tacoBench(bench) @pytest.mark.parametrize("dim", [5000, 10000, 20000]) +@pytest.mark.parametrize("sparsity", [0.01, 0.005, 0.05]) @pytest.mark.parametrize("config", sizeConfigs[:len(sizeConfigs)-1]) -def bench_slice_pydata_sparse_window(tacoBench, dim, config): +def bench_slice_pydata_sparse_window(tacoBench, dim, sparsity, config): loader = RandomPydataSparseTensorLoader() - matrix = loader.random((dim, dim), 0.01).astype('float64') - matrix2 = loader.random((dim, dim), 0.01, variant=1).astype('float64') + matrix = loader.random((dim, dim), sparsity).astype('float64') + matrix2 = loader.random((dim, dim), sparsity, variant=1).astype('float64') def bench(): x = sliceTensor(matrix, dim, config) x2 = sliceTensor(matrix2, dim, config) @@ -86,11 +90,12 @@ def bench(): tacoBench(bench) @pytest.mark.parametrize("dim", [5000, 10000, 20000]) +@pytest.mark.parametrize("sparsity", [0.01, 0.005, 0.05]) @pytest.mark.parametrize("config", sizeConfigs[:len(sizeConfigs)-1]) -def bench_add_sliced_pydata_sparse_window(tacoBench, dim, config): +def bench_add_sliced_pydata_sparse_window(tacoBench, dim, sparsity, config): loader = RandomPydataSparseTensorLoader() - matrix = loader.random((dim, dim), 0.01).astype('float64') - matrix2 = loader.random((dim, dim), 0.01, variant=1).astype('float64') + matrix = loader.random((dim, dim), sparsity).astype('float64') + matrix2 = loader.random((dim, dim), sparsity, variant=1).astype('float64') x = sliceTensor(matrix, dim, config) x2 = sliceTensor(matrix2, dim, config) def bench(): @@ -98,11 +103,12 @@ def bench(): tacoBench(bench) @pytest.mark.parametrize("dim", [5000, 10000, 20000]) +@pytest.mark.parametrize("sparsity", [0.01, 0.005, 0.05]) @pytest.mark.parametrize("config", sizeConfigs) -def bench_add_pydata_sparse_window(tacoBench, dim, config): +def bench_add_pydata_sparse_window(tacoBench, dim, sparsity, config): loader = RandomPydataSparseTensorLoader() - matrix = loader.random((dim, dim), 0.01).astype('float64') - matrix2 = loader.random((dim, dim), 0.01, variant=1).astype('float64') + matrix = loader.random((dim, dim), sparsity).astype('float64') + matrix2 = loader.random((dim, dim), sparsity, variant=1).astype('float64') def bench(): x = sliceTensor(matrix, dim, config) x2 = sliceTensor(matrix2, dim, config) @@ -111,11 +117,12 @@ def bench(): @pytest.mark.parametrize("dim", [5000, 10000, 20000]) @pytest.mark.parametrize("format", ['csr']) +@pytest.mark.parametrize("sparsity", [0.01, 0.005, 0.05]) @pytest.mark.parametrize("strideWidth", [2, 4, 8]) -def bench_slice_strided_window(tacoBench, dim, format, strideWidth): +def bench_slice_strided_window(tacoBench, dim, format, sparsity, strideWidth): loader = RandomScipySparseTensorLoader(format) - matrix = loader.random((dim, dim), 0.01).astype('float64') - matrix2 = loader.random((dim, dim), 0.01, variant=1).astype('float64') + matrix = loader.random((dim, dim), sparsity).astype('float64') + matrix2 = loader.random((dim, dim), sparsity, variant=1).astype('float64') def bench(): x = matrix[0:dim:strideWidth, 0:dim:strideWidth] x2 = matrix2[0:dim:strideWidth, 0:dim:strideWidth] @@ -124,11 +131,12 @@ def bench(): @pytest.mark.parametrize("dim", [5000, 10000, 20000]) @pytest.mark.parametrize("format", ['csr']) +@pytest.mark.parametrize("sparsity", [0.01, 0.005, 0.05]) @pytest.mark.parametrize("strideWidth", [2, 4, 8]) -def bench_add_sliced_sparse_strided_window(tacoBench, dim, format, strideWidth): +def bench_add_sliced_sparse_strided_window(tacoBench, dim, format, sparsity, strideWidth): loader = RandomScipySparseTensorLoader(format) - matrix = loader.random((dim, dim), 0.01).astype('float64') - matrix2 = loader.random((dim, dim), 0.01, variant=1).astype('float64') + matrix = loader.random((dim, dim), sparsity).astype('float64') + matrix2 = loader.random((dim, dim), sparsity, variant=1).astype('float64') x = matrix[0:dim:strideWidth, 0:dim:strideWidth] x2 = matrix2[0:dim:strideWidth, 0:dim:strideWidth] def bench(): @@ -137,11 +145,12 @@ def bench(): @pytest.mark.parametrize("dim", [5000, 10000, 20000]) @pytest.mark.parametrize("format", ['csr']) +@pytest.mark.parametrize("sparsity", [0.01, 0.005, 0.05]) @pytest.mark.parametrize("strideWidth", [2, 4, 8]) -def bench_add_sparse_strided_window(tacoBench, dim, format, strideWidth): +def bench_add_sparse_strided_window(tacoBench, dim, format, sparsity, strideWidth): loader = RandomScipySparseTensorLoader(format) - matrix = loader.random((dim, dim), 0.01).astype('float64') - matrix2 = loader.random((dim, dim), 0.01, variant=1).astype('float64') + matrix = loader.random((dim, dim), sparsity).astype('float64') + matrix2 = loader.random((dim, dim), sparsity, variant=1).astype('float64') def bench(): x = matrix[0:dim:strideWidth, 0:dim:strideWidth] x2 = matrix2[0:dim:strideWidth, 0:dim:strideWidth] @@ -149,11 +158,12 @@ def bench(): tacoBench(bench) @pytest.mark.parametrize("dim", [5000, 10000, 20000]) +@pytest.mark.parametrize("sparsity", [0.01, 0.005, 0.05]) @pytest.mark.parametrize("strideWidth", [2, 4, 8]) -def bench_slice_pydata_sparse_strided_window(tacoBench, dim, strideWidth): +def bench_slice_pydata_sparse_strided_window(tacoBench, dim, sparsity, strideWidth): loader = RandomPydataSparseTensorLoader() - matrix = loader.random((dim, dim), 0.01).astype('float64') - matrix2 = loader.random((dim, dim), 0.01, variant=1).astype('float64') + matrix = loader.random((dim, dim), sparsity).astype('float64') + matrix2 = loader.random((dim, dim), sparsity, variant=1).astype('float64') def bench(): x = matrix[0:dim:strideWidth, 0:dim:strideWidth] x2 = matrix2[0:dim:strideWidth, 0:dim:strideWidth] @@ -161,11 +171,12 @@ def bench(): tacoBench(bench) @pytest.mark.parametrize("dim", [5000, 10000, 20000]) +@pytest.mark.parametrize("sparsity", [0.01, 0.005, 0.05]) @pytest.mark.parametrize("strideWidth", [2, 4, 8]) -def bench_add_sliced_pydata_sparse_strided_window(tacoBench, dim, strideWidth): +def bench_add_sliced_pydata_sparse_strided_window(tacoBench, dim, sparsity, strideWidth): loader = RandomPydataSparseTensorLoader() - matrix = loader.random((dim, dim), 0.01).astype('float64') - matrix2 = loader.random((dim, dim), 0.01, variant=1).astype('float64') + matrix = loader.random((dim, dim), sparsity).astype('float64') + matrix2 = loader.random((dim, dim), sparsity, variant=1).astype('float64') x = matrix[0:dim:strideWidth, 0:dim:strideWidth] x2 = matrix2[0:dim:strideWidth, 0:dim:strideWidth] def bench(): @@ -173,11 +184,12 @@ def bench(): tacoBench(bench) @pytest.mark.parametrize("dim", [5000, 10000, 20000]) +@pytest.mark.parametrize("sparsity", [0.01, 0.005, 0.05]) @pytest.mark.parametrize("strideWidth", [2, 4, 8]) -def bench_add_pydata_sparse_strided_window(tacoBench, dim, strideWidth): +def bench_add_pydata_sparse_strided_window(tacoBench, dim, sparsity, strideWidth): loader = RandomPydataSparseTensorLoader() - matrix = loader.random((dim, dim), 0.01).astype('float64') - matrix2 = loader.random((dim, dim), 0.01, variant=1).astype('float64') + matrix = loader.random((dim, dim), sparsity).astype('float64') + matrix2 = loader.random((dim, dim), sparsity, variant=1).astype('float64') def bench(): x = matrix[0:dim:strideWidth, 0:dim:strideWidth] x2 = matrix2[0:dim:strideWidth, 0:dim:strideWidth] diff --git a/taco/windowing.cpp b/taco/windowing.cpp index 5ad80e5..bd7f7da 100644 --- a/taco/windowing.cpp +++ b/taco/windowing.cpp @@ -66,9 +66,8 @@ Tensor windowedTensorOp(Tensor input1, Tensor input2, in } } -static void bench_add_sparse_window(benchmark::State& state, const Format& f, WindowConfig config) { +static void bench_add_sparse_window(benchmark::State& state, const Format& f, WindowConfig config, float sparsity) { int dim = state.range(0); - auto sparsity = 0.01; Tensor matrix = loadRandomTensor("A", {dim, dim}, sparsity, f); Tensor matrix2 = loadRandomTensor("A2", {dim, dim}, sparsity, f, 1 /* variant */); matrix.pack(); @@ -87,14 +86,15 @@ static void bench_add_sparse_window(benchmark::State& state, const Format& f, Wi } #define DECLARE_ADD_SPARSE_WINDOW_BENCH(configName, config) \ - TACO_BENCH_ARGS(bench_add_sparse_window, csr/configName, CSR, config)->ArgsProduct({tensorSizes}); + TACO_BENCH_ARGS(bench_add_sparse_window, csr/configName/0.01, CSR, config, 0.01)->ArgsProduct({tensorSizes}); \ + TACO_BENCH_ARGS(bench_add_sparse_window, csr/configName/0.005, CSR, config, 0.005)->ArgsProduct({tensorSizes}); \ + TACO_BENCH_ARGS(bench_add_sparse_window, csr/configName/0.05, CSR, config, 0.05)->ArgsProduct({tensorSizes}); \ FOREACH_WINDOW_CONFIG(DECLARE_ADD_SPARSE_WINDOW_BENCH) -static void bench_add_sparse_strided_window(benchmark::State& state, const Format& f) { +static void bench_add_sparse_strided_window(benchmark::State& state, const Format& f, float sparsity) { int dim = state.range(0); int strideWidth = state.range(1); - auto sparsity = 0.01; Tensor matrix = loadRandomTensor("A", {dim, dim}, sparsity, f); Tensor matrix2 = loadRandomTensor("A2", {dim, dim}, sparsity, f, 1 /* variant */); matrix.pack(); @@ -113,8 +113,9 @@ static void bench_add_sparse_strided_window(benchmark::State& state, const Forma } } std::vector strides({2, 4, 8}); -TACO_BENCH_ARG(bench_add_sparse_strided_window, csr, CSR) - ->ArgsProduct({tensorSizes, strides}); +TACO_BENCH_ARGS(bench_add_sparse_strided_window, csr/0.01, CSR, 0.01)->ArgsProduct({tensorSizes, strides}); +TACO_BENCH_ARGS(bench_add_sparse_strided_window, csr/0.005, CSR, 0.005)->ArgsProduct({tensorSizes, strides}); +TACO_BENCH_ARGS(bench_add_sparse_strided_window, csr/0.05, CSR, 0.05)->ArgsProduct({tensorSizes, strides}); static void bench_add_sparse_index_set(benchmark::State& state, const Format& f) { int dim = state.range(0);