From 1d9e559ecfd602ef3e638969fea8e4c3cd190cbd Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Mon, 23 Sep 2024 13:07:57 -0400 Subject: [PATCH 1/8] reducing to 32x32 --- benchmarks/LinearSolve/MatrixDepot.jmd | 35 ++++++++++++++++++-------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index f979359cc..69a54d966 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -48,9 +48,34 @@ for z in 1:length(allmatrices_md.content[1].rows) A = convert(SparseMatrixCSC, A) n = size(A, 1) matrix_size[z] = n + + mtx_copy = A + + + + + while size(condensed, 1) > 32 || size(condensed, 2) > 32 + rows, cols = size(mtx_copy) + new_rows = div(rows, 2) + new_cols = div(cols, 2) + condensed = zeros(Int, new_rows, new_cols) + + for r in 1:2:rows-1 + for c in 1:2:cols-1 + block = matrix[r:r+1, c:c+1] + condensed[div(r-1, 2) + 1, div(c-1, 2) + 1] = (length(nonzeros(block)) >= 3) ? 1 : 0 + end + end + + mtx_copy = condensed + end + + percentage_sparsity[z] = length(nonzeros(A)) / n^2 @info "$n × $n" + spaced_out_sparsity = length(nonzeros(mtx_copy)) * percentage_sparsity[z] + n > 500 && error("Skipping too large matrices") b = rand(rng, n) @@ -65,16 +90,6 @@ for z in 1:length(allmatrices_md.content[1].rows) times[z,j] = bt end - #= - p = bar(algnames, times[z, :]; - ylabel = "Time/s", - yscale = :log10, - title = "Time on $(currMTX)", - fmt = :png, - legend = :outertopright) - display(p) - =# - println("successfully factorized $(currMTX)") catch e matrix = allmatrices_md.content[1].rows[z] From e65a86d83cf1e8105d02ed307e6664307e851a7b Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Mon, 23 Sep 2024 13:09:54 -0400 Subject: [PATCH 2/8] plotting spaced out sparsity --- benchmarks/LinearSolve/MatrixDepot.jmd | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index 69a54d966..62b87920a 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -32,6 +32,7 @@ allmatrices_md = listnames("*/*") @info "Total number of matrices: $(allmatrices_md.content[1].rows)" times = fill(NaN, length(allmatrices_md.content[1].rows), length(algs)) percentage_sparsity = fill(NaN, length(allmatrices_md.content[1].rows)) +spaced_out_sparsity = fill(NaN, length(allmatrices_md.content[1].rows)) matrix_size = fill(NaN, length(allmatrices_md.content[1].rows)) ``` @@ -50,10 +51,7 @@ for z in 1:length(allmatrices_md.content[1].rows) matrix_size[z] = n mtx_copy = A - - - - + while size(condensed, 1) > 32 || size(condensed, 2) > 32 rows, cols = size(mtx_copy) new_rows = div(rows, 2) @@ -74,7 +72,7 @@ for z in 1:length(allmatrices_md.content[1].rows) percentage_sparsity[z] = length(nonzeros(A)) / n^2 @info "$n × $n" - spaced_out_sparsity = length(nonzeros(mtx_copy)) * percentage_sparsity[z] + spaced_out_sparsity[z] = length(nonzeros(mtx_copy)) * percentage_sparsity[z] n > 500 && error("Skipping too large matrices") @@ -137,6 +135,18 @@ p = scatter(matrix_size, times; legend = :outertopright) ``` +```julia +p = scatter(spaced_out_sparsity, times; + ylabel = "Time/s", + yscale = :log10, + xlabel = "Spaced Out Sparsity", + xscale = :log10, + label = algnames_transpose, + title = "Factorization Time vs Spaced Out Sparsity", + fmt = :png, + legend = :outertopright) +``` + ## Appendix From d94b888c6ce18d5a771a0e15c07c99bd43ff3d97 Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Wed, 9 Oct 2024 21:29:58 -0400 Subject: [PATCH 3/8] fixing plot bug --- benchmarks/LinearSolve/MatrixDepot.jmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index 62b87920a..cba3a878e 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -50,7 +50,7 @@ for z in 1:length(allmatrices_md.content[1].rows) n = size(A, 1) matrix_size[z] = n - mtx_copy = A + mtx_copy = copy(A) while size(condensed, 1) > 32 || size(condensed, 2) > 32 rows, cols = size(mtx_copy) @@ -60,7 +60,7 @@ for z in 1:length(allmatrices_md.content[1].rows) for r in 1:2:rows-1 for c in 1:2:cols-1 - block = matrix[r:r+1, c:c+1] + block = mtx_copy[r:r+1, c:c+1] condensed[div(r-1, 2) + 1, div(c-1, 2) + 1] = (length(nonzeros(block)) >= 3) ? 1 : 0 end end From f3294de94a337881d5e73805b94b6afa97e9997a Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Fri, 11 Oct 2024 09:10:02 -0400 Subject: [PATCH 4/8] bug fixing --- benchmarks/LinearSolve/MatrixDepot.jmd | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index cba3a878e..1c7483d3f 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -51,16 +51,24 @@ for z in 1:length(allmatrices_md.content[1].rows) matrix_size[z] = n mtx_copy = copy(A) - + + @info "$n × $n" + n > 500 && error("Skipping too large matrices") + + rows, cols = size(mtx_copy) + new_rows = div(rows, 2) + new_cols = div(cols, 2) + condensed = zeros(Int, new_rows, new_cols) + while size(condensed, 1) > 32 || size(condensed, 2) > 32 rows, cols = size(mtx_copy) new_rows = div(rows, 2) new_cols = div(cols, 2) - condensed = zeros(Int, new_rows, new_cols) + condensed = sparse(zeros(Int, new_rows, new_cols)) for r in 1:2:rows-1 for c in 1:2:cols-1 - block = mtx_copy[r:r+1, c:c+1] + block = sparse(mtx_copy[r:r+1, c:c+1]) condensed[div(r-1, 2) + 1, div(c-1, 2) + 1] = (length(nonzeros(block)) >= 3) ? 1 : 0 end end @@ -70,11 +78,10 @@ for z in 1:length(allmatrices_md.content[1].rows) percentage_sparsity[z] = length(nonzeros(A)) / n^2 - @info "$n × $n" - + spaced_out_sparsity[z] = length(nonzeros(mtx_copy)) * percentage_sparsity[z] - n > 500 && error("Skipping too large matrices") + b = rand(rng, n) u0 = rand(rng, n) @@ -99,6 +106,8 @@ for z in 1:length(allmatrices_md.content[1].rows) println(e) end end + +print(percentage_sparsity) ``` ```julia From 7cdd89b98f0a73e844d5cf1d8c3870c5b6117f57 Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Wed, 20 Nov 2024 09:14:38 -0500 Subject: [PATCH 5/8] fixing errors --- benchmarks/LinearSolve/MatrixDepot.jmd | 27 ++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index 1c7483d3f..a6b1045fd 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -53,14 +53,15 @@ for z in 1:length(allmatrices_md.content[1].rows) mtx_copy = copy(A) @info "$n × $n" - n > 500 && error("Skipping too large matrices") + n > 100 && error("Skipping too large matrices") rows, cols = size(mtx_copy) new_rows = div(rows, 2) new_cols = div(cols, 2) condensed = zeros(Int, new_rows, new_cols) - while size(condensed, 1) > 32 || size(condensed, 2) > 32 + while size(mtx_copy, 1) > 32 || size(mtx_copy, 2) > 32 + rows, cols = size(mtx_copy) new_rows = div(rows, 2) new_cols = div(cols, 2) @@ -68,20 +69,20 @@ for z in 1:length(allmatrices_md.content[1].rows) for r in 1:2:rows-1 for c in 1:2:cols-1 - block = sparse(mtx_copy[r:r+1, c:c+1]) - condensed[div(r-1, 2) + 1, div(c-1, 2) + 1] = (length(nonzeros(block)) >= 3) ? 1 : 0 + block = mtx_copy[r:min(r+1, rows), c:min(c+1, cols)] + condensed[div(r-1, 2) + 1, div(c-1, 2) + 1] = (length(nonzeros(block)) >= 2) ? 1 : 0 end end - + mtx_copy = condensed + end - + percentage_sparsity[z] = length(nonzeros(A)) / n^2 spaced_out_sparsity[z] = length(nonzeros(mtx_copy)) * percentage_sparsity[z] - b = rand(rng, n) u0 = rand(rng, n) @@ -107,7 +108,17 @@ for z in 1:length(allmatrices_md.content[1].rows) end end -print(percentage_sparsity) +percentage_sparsity = percentage_sparsity[.!isnan.(percentage_sparsity)] +spaced_out_sparsity = spaced_out_sparsity[.!isnan.(spaced_out_sparsity)] +spaced_out_sparsity = replace(spaced_out_sparsity, 0 => 1e-10) +matrix_size = matrix_size[.!isnan.(matrix_size)] +new_times = [] +for row in eachrow(times) + if !any(isnan, row) # Check if the row does not contain NaN values + push!(new_times, row) # Append the row to the list + end +end +times = new_times ``` ```julia From bf39232011fae03c2c49762d85a238e974428ff8 Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Sat, 23 Nov 2024 16:22:09 -0500 Subject: [PATCH 6/8] fixing graphs --- benchmarks/LinearSolve/MatrixDepot.jmd | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index a6b1045fd..952c6e598 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -48,12 +48,13 @@ for z in 1:length(allmatrices_md.content[1].rows) A = mdopen(currMTX).A A = convert(SparseMatrixCSC, A) n = size(A, 1) - matrix_size[z] = n + mtx_copy = copy(A) @info "$n × $n" n > 100 && error("Skipping too large matrices") + matrix_size[z] = n rows, cols = size(mtx_copy) new_rows = div(rows, 2) @@ -112,13 +113,8 @@ percentage_sparsity = percentage_sparsity[.!isnan.(percentage_sparsity)] spaced_out_sparsity = spaced_out_sparsity[.!isnan.(spaced_out_sparsity)] spaced_out_sparsity = replace(spaced_out_sparsity, 0 => 1e-10) matrix_size = matrix_size[.!isnan.(matrix_size)] -new_times = [] -for row in eachrow(times) - if !any(isnan, row) # Check if the row does not contain NaN values - push!(new_times, row) # Append the row to the list - end -end -times = new_times +nanrows = any(isnan, times; dims=2) +times = times[.!vec(nanrows), :] ``` ```julia From 9d9c2e3137b4b2065c570ef847616a48045ec6f5 Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Mon, 25 Nov 2024 22:06:33 -0500 Subject: [PATCH 7/8] testing with a smaller subset --- benchmarks/LinearSolve/MatrixDepot.jmd | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index 952c6e598..4e589955a 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -37,7 +37,8 @@ matrix_size = fill(NaN, length(allmatrices_md.content[1].rows)) ``` ```julia -for z in 1:length(allmatrices_md.content[1].rows) +# for z in 1:length(allmatrices_md.content[1].rows) +for z in 1:200 try matrix = allmatrices_md.content[1].rows[z] matrix = string(matrix[1]) @@ -54,7 +55,7 @@ for z in 1:length(allmatrices_md.content[1].rows) @info "$n × $n" n > 100 && error("Skipping too large matrices") - matrix_size[z] = n + rows, cols = size(mtx_copy) new_rows = div(rows, 2) @@ -79,12 +80,6 @@ for z in 1:length(allmatrices_md.content[1].rows) end - - percentage_sparsity[z] = length(nonzeros(A)) / n^2 - - spaced_out_sparsity[z] = length(nonzeros(mtx_copy)) * percentage_sparsity[z] - - b = rand(rng, n) u0 = rand(rng, n) @@ -96,7 +91,9 @@ for z in 1:length(allmatrices_md.content[1].rows) alias_b = true)) times[z,j] = bt end - + matrix_size[z] = n + percentage_sparsity[z] = length(nonzeros(A)) / n^2 + spaced_out_sparsity[z] = length(nonzeros(mtx_copy)) * percentage_sparsity[z] println("successfully factorized $(currMTX)") catch e matrix = allmatrices_md.content[1].rows[z] From 1d4cf3c797606059d5179d43a2d5465cc0ffd352 Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Mon, 25 Nov 2024 22:26:26 -0500 Subject: [PATCH 8/8] running for all matrices --- benchmarks/LinearSolve/MatrixDepot.jmd | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index 4e589955a..5de98d14e 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -37,8 +37,7 @@ matrix_size = fill(NaN, length(allmatrices_md.content[1].rows)) ``` ```julia -# for z in 1:length(allmatrices_md.content[1].rows) -for z in 1:200 +for z in 1:length(allmatrices_md.content[1].rows) try matrix = allmatrices_md.content[1].rows[z] matrix = string(matrix[1])