Skip to content

[bicoloring] Use Br and Bc directly for the decompression - #194

Open
amontoison wants to merge 3 commits into
mainfrom
decompression_bicoloring
Open

amontoison wants to merge 3 commits into
mainfrom
decompression_bicoloring

Conversation

@amontoison

@amontoison amontoison commented Feb 20, 2025

Copy link
Copy Markdown
Collaborator

Use a lazy representation of Br_and_Br.
The PR can be merged later but I wanted to check if it works to do the decompression like this.
I would like to describe the decompression of bicoloring with this approach is the paper where we directly use Br and Bc.

@amontoison amontoison added the benchmark Run benchmarks on PR label Feb 20, 2025
@codecov

codecov Bot commented Feb 20, 2025

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 100.00%. Comparing base (763c8a4) to head (2a6d30e).

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #194   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           14        14           
  Lines         1635      1733   +98     
=========================================
+ Hits          1635      1733   +98     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@amontoison

amontoison commented Feb 20, 2025

Copy link
Copy Markdown
Collaborator Author

It seems that compress can return Br and Bc with a different type (it's fine) and eltype (not fine)

  • Br -> Matrix{Int64}
  • Bc -> SparseArrays.SparseMatrixCSC{Bool, Int64}
ERROR: LoadError: MethodError: no method matching SparseMatrixColorings.JoinCompressed(::Int64, ::Int64, ::Int64, ::Matrix{Int64}, ::SparseArrays.SparseMatrixCSC{Bool, Int64}, ::Dict{Int64, Int64}, ::Dict{Int64, Int64})
The type `SparseMatrixColorings.JoinCompressed` exists, but no method is defined for this combination of argument types when trying to construct it.

I only got this error during the benchmarks.
All unit tests passed.

Comment thread src/decompression.jl Outdated
Comment thread src/decompression.jl
@amontoison

amontoison commented Feb 21, 2025

Copy link
Copy Markdown
Collaborator Author

@gdalle
For row_color_ind and col_color_ind, I propose to use two Vector{Int} instead of two Dict{Int,Int}.
get_index will be faster and we will use less memory:

julia> a = Dict{Int,Int}(i => i+1 for i = 1:100)
julia> Base.summarysize(a)
4464

julia> b = Vector{Int}(undef, 100)
julia> Base.summarysize(b)
840

We have a factor 5 in terms of storage.

@gdalle

gdalle commented Feb 22, 2025

Copy link
Copy Markdown
Member

The reason why they are dictionaries is that not every color is used for a row, or for a column. But we could probably put zeros as indices for unused colors

@amontoison
amontoison force-pushed the decompression_bicoloring branch from 3774330 to 451cb51 Compare March 4, 2025 04:23
@amontoison
amontoison requested a review from gdalle March 4, 2025 04:26
@amontoison

amontoison commented Mar 4, 2025

Copy link
Copy Markdown
Collaborator Author

@gdalle I rebased the branch but I will need your help to fix issue with compress for bicoloring.
It could return matrices Br and Bc of different types if one of them is empty.
The benchmarks are failing because of that.

Update: I fixed it. If the type of the matrice that we want to compress is Bool, we need to ensure to the type of the compressed matrix is Int. In the context of bicoloring, Br and Bc can have a different eltype because of that if the group of row colors / column colors is empty.

Comment thread src/decompression.jl Outdated
Comment thread src/decompression.jl Outdated
@github-actions

github-actions Bot commented Mar 4, 2025

Copy link
Copy Markdown
Contributor

Benchmark Results

main c07b879... main / c07b879...
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.002 1.83 ± 0.015 ms 1.7 ± 0.015 ms 1.08 ± 0.013
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.005 4.2 ± 0.032 ms 3.97 ± 0.028 ms 1.06 ± 0.011
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.01 9.53 ± 0.077 ms 9.07 ± 0.086 ms 1.05 ± 0.013
coloring/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 2.29 ± 0.086 s 2.19 ± 0.04 s 1.04 ± 0.043
coloring/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 0.303 ± 0.039 s 0.284 ± 0.019 s 1.07 ± 0.16
coloring/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.911 ± 0.032 s 0.866 ± 0.019 s 1.05 ± 0.043
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 2.74 ± 0.023 ms 2.55 ± 0.021 ms 1.07 ± 0.013
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 7.4 ± 0.069 ms 6.93 ± 0.054 ms 1.07 ± 0.013
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 18 ± 0.14 ms 17.1 ± 0.17 ms 1.05 ± 0.013
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 4.99 ± 0.057 s 4.66 ± 0.12 s 1.07 ± 0.03
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.543 ± 0.031 s 0.465 ± 0.024 s 1.17 ± 0.089
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 1.88 ± 0.053 s 1.72 ± 0.072 s 1.09 ± 0.055
coloring/nonsymmetric/column/direct/n=1000/p=0.002 0.442 ± 0.012 ms 0.441 ± 0.012 ms 1 ± 0.038
coloring/nonsymmetric/column/direct/n=1000/p=0.005 1.12 ± 0.0075 ms 1.12 ± 0.0085 ms 1 ± 0.01
coloring/nonsymmetric/column/direct/n=1000/p=0.01 2.81 ± 0.015 ms 2.81 ± 0.015 ms 1 ± 0.0075
coloring/nonsymmetric/column/direct/n=100000/p=0.0001 0.589 ± 0.044 s 0.532 ± 0.025 s 1.11 ± 0.097
coloring/nonsymmetric/column/direct/n=100000/p=2.0e-5 0.0744 ± 0.0017 s 0.0748 ± 0.0022 s 0.994 ± 0.037
coloring/nonsymmetric/column/direct/n=100000/p=5.0e-5 0.214 ± 0.018 s 0.216 ± 0.014 s 0.988 ± 0.1
coloring/nonsymmetric/row/direct/n=1000/p=0.002 0.445 ± 0.012 ms 0.446 ± 0.011 ms 0.997 ± 0.036
coloring/nonsymmetric/row/direct/n=1000/p=0.005 1.15 ± 0.011 ms 1.15 ± 0.0094 ms 0.999 ± 0.013
coloring/nonsymmetric/row/direct/n=1000/p=0.01 2.92 ± 0.019 ms 2.92 ± 0.016 ms 1 ± 0.0084
coloring/nonsymmetric/row/direct/n=100000/p=0.0001 0.566 ± 0.025 s 0.518 ± 0.021 s 1.09 ± 0.065
coloring/nonsymmetric/row/direct/n=100000/p=2.0e-5 0.0723 ± 0.0015 s 0.0716 ± 0.00081 s 1.01 ± 0.024
coloring/nonsymmetric/row/direct/n=100000/p=5.0e-5 0.212 ± 0.0053 s 0.192 ± 0.0044 s 1.11 ± 0.037
coloring/symmetric/column/direct/n=1000/p=0.002 0.936 ± 0.0062 ms 0.942 ± 0.0077 ms 0.994 ± 0.01
coloring/symmetric/column/direct/n=1000/p=0.005 2.16 ± 0.014 ms 2.17 ± 0.013 ms 0.997 ± 0.0088
coloring/symmetric/column/direct/n=1000/p=0.01 4.77 ± 0.024 ms 4.79 ± 0.027 ms 0.996 ± 0.0075
coloring/symmetric/column/direct/n=100000/p=0.0001 0.938 ± 0.048 s 0.859 ± 0.044 s 1.09 ± 0.079
coloring/symmetric/column/direct/n=100000/p=2.0e-5 0.137 ± 0.0026 s 0.137 ± 0.0028 s 1 ± 0.028
coloring/symmetric/column/direct/n=100000/p=5.0e-5 0.355 ± 0.0038 s 0.374 ± 0.023 s 0.949 ± 0.06
coloring/symmetric/column/substitution/n=1000/p=0.002 1.44 ± 0.013 ms 1.44 ± 0.014 ms 0.999 ± 0.014
coloring/symmetric/column/substitution/n=1000/p=0.005 3.78 ± 0.022 ms 3.77 ± 0.022 ms 1 ± 0.0083
coloring/symmetric/column/substitution/n=1000/p=0.01 8.89 ± 0.071 ms 8.77 ± 0.068 ms 1.01 ± 0.011
coloring/symmetric/column/substitution/n=100000/p=0.0001 1.94 ± 0.17 s 1.75 ± 0.05 s 1.11 ± 0.1
coloring/symmetric/column/substitution/n=100000/p=2.0e-5 0.23 ± 0.0064 s 0.218 ± 0.0053 s 1.06 ± 0.039
coloring/symmetric/column/substitution/n=100000/p=5.0e-5 0.778 ± 0.021 s 0.634 ± 0.024 s 1.23 ± 0.056
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.002 0.131 ± 0.0045 ms 0.0341 ± 0.0012 ms 3.84 ± 0.19
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.005 0.219 ± 0.009 ms 0.0692 ± 0.0017 ms 3.17 ± 0.15
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.01 0.376 ± 0.019 ms 0.129 ± 0.0039 ms 2.92 ± 0.17
decompress/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 0.112 ± 0.004 s 25.9 ± 0.57 ms 4.31 ± 0.18
decompress/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 30.7 ± 1.2 ms 6.21 ± 0.23 ms 4.94 ± 0.26
decompress/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.0651 ± 0.00084 s 13.9 ± 0.48 ms 4.68 ± 0.17
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 0.167 ± 0.0086 ms 0.139 ± 0.0034 ms 1.2 ± 0.068
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 0.338 ± 0.011 ms 0.283 ± 0.01 ms 1.2 ± 0.059
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 0.674 ± 0.013 ms 0.565 ± 0.015 ms 1.19 ± 0.04
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 0.23 ± 0.013 s 0.2 ± 0.0076 s 1.15 ± 0.076
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.0439 ± 0.0055 s 0.043 ± 0.00058 s 1.02 ± 0.13
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 0.0919 ± 0.0085 s 0.0856 ± 0.0056 s 1.07 ± 0.12
decompress/nonsymmetric/column/direct/n=1000/p=0.002 25.4 ± 1.2 μs 23.9 ± 1 μs 1.06 ± 0.069
decompress/nonsymmetric/column/direct/n=1000/p=0.005 0.0478 ± 0.0018 ms 0.0465 ± 0.0017 ms 1.03 ± 0.053
decompress/nonsymmetric/column/direct/n=1000/p=0.01 0.0866 ± 0.0036 ms 0.0853 ± 0.0033 ms 1.01 ± 0.057
decompress/nonsymmetric/column/direct/n=100000/p=0.0001 27.1 ± 0.77 ms 26.4 ± 0.82 ms 1.02 ± 0.043
decompress/nonsymmetric/column/direct/n=100000/p=2.0e-5 5.52 ± 0.34 ms 4.73 ± 0.4 ms 1.17 ± 0.12
decompress/nonsymmetric/column/direct/n=100000/p=5.0e-5 13 ± 0.46 ms 12.6 ± 0.34 ms 1.03 ± 0.045
decompress/nonsymmetric/row/direct/n=1000/p=0.002 24.2 ± 1.5 μs 22.5 ± 1.3 μs 1.08 ± 0.089
decompress/nonsymmetric/row/direct/n=1000/p=0.005 0.0427 ± 0.002 ms 0.0398 ± 0.0013 ms 1.07 ± 0.061
decompress/nonsymmetric/row/direct/n=1000/p=0.01 0.0768 ± 0.0053 ms 0.0715 ± 0.0024 ms 1.07 ± 0.083
decompress/nonsymmetric/row/direct/n=100000/p=0.0001 11.7 ± 0.5 ms 11.5 ± 0.25 ms 1.02 ± 0.049
decompress/nonsymmetric/row/direct/n=100000/p=2.0e-5 3.17 ± 0.12 ms 2.9 ± 0.088 ms 1.09 ± 0.054
decompress/nonsymmetric/row/direct/n=100000/p=5.0e-5 6.03 ± 0.29 ms 5.75 ± 0.24 ms 1.05 ± 0.066
decompress/symmetric/column/direct/n=1000/p=0.002 24.4 ± 1.3 μs 23 ± 1 μs 1.06 ± 0.074
decompress/symmetric/column/direct/n=1000/p=0.005 0.0456 ± 0.0017 ms 0.0438 ± 0.0015 ms 1.04 ± 0.053
decompress/symmetric/column/direct/n=1000/p=0.01 0.0826 ± 0.0032 ms 0.0817 ± 0.003 ms 1.01 ± 0.055
decompress/symmetric/column/direct/n=100000/p=0.0001 25.1 ± 0.76 ms 24 ± 0.64 ms 1.05 ± 0.042
decompress/symmetric/column/direct/n=100000/p=2.0e-5 5 ± 0.52 ms 4.28 ± 0.57 ms 1.17 ± 0.2
decompress/symmetric/column/direct/n=100000/p=5.0e-5 12.2 ± 0.42 ms 11.9 ± 0.46 ms 1.03 ± 0.053
decompress/symmetric/column/substitution/n=1000/p=0.002 0.0992 ± 0.0029 ms 0.0994 ± 0.0021 ms 0.997 ± 0.036
decompress/symmetric/column/substitution/n=1000/p=0.005 0.208 ± 0.0071 ms 0.208 ± 0.0072 ms 1 ± 0.049
decompress/symmetric/column/substitution/n=1000/p=0.01 0.403 ± 0.012 ms 0.402 ± 0.012 ms 1 ± 0.042
decompress/symmetric/column/substitution/n=100000/p=0.0001 0.121 ± 0.0096 s 0.106 ± 0.0089 s 1.14 ± 0.13
decompress/symmetric/column/substitution/n=100000/p=2.0e-5 25 ± 0.68 ms 24.1 ± 0.28 ms 1.04 ± 0.031
decompress/symmetric/column/substitution/n=100000/p=5.0e-5 0.0516 ± 0.0032 s 0.0492 ± 0.0014 s 1.05 ± 0.071
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.73 ± 0.0081 ms 0.73 ± 0.0076 ms 1 ± 0.015
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 2.55 ± 0.021 ms 2.55 ± 0.02 ms 1 ± 0.011
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 7.95 ± 0.068 ms 7.96 ± 0.069 ms 0.999 ± 0.012
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 1.77 ± 0.075 s 1.68 ± 0.043 s 1.05 ± 0.052
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.131 ± 0.0021 s 0.131 ± 0.0014 s 1 ± 0.019
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.584 ± 0.049 s 0.52 ± 0.024 s 1.12 ± 0.11
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.723 ± 0.0088 ms 0.723 ± 0.0079 ms 0.999 ± 0.016
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 2.55 ± 0.023 ms 2.56 ± 0.021 ms 0.995 ± 0.012
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 7.98 ± 0.066 ms 7.98 ± 0.097 ms 1 ± 0.015
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 1.97 ± 0.035 s 1.7 ± 0.046 s 1.16 ± 0.038
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.147 ± 0.0044 s 0.135 ± 0.0018 s 1.09 ± 0.035
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.635 ± 0.03 s 0.559 ± 0.03 s 1.14 ± 0.08
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.73 ± 0.0093 ms 0.729 ± 0.0085 ms 1 ± 0.017
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 2.52 ± 0.021 ms 2.53 ± 0.022 ms 0.995 ± 0.012
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 7.84 ± 0.062 ms 7.85 ± 0.069 ms 0.998 ± 0.012
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 2.02 ± 0.053 s 1.7 ± 0.038 s 1.19 ± 0.041
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.156 ± 0.0028 s 0.147 ± 0.0024 s 1.06 ± 0.026
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.587 ± 0.021 s 0.556 ± 0.017 s 1.06 ± 0.049
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.303 ± 0.011 ms 0.298 ± 0.01 ms 1.01 ± 0.05
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.719 ± 0.038 ms 0.731 ± 0.0098 ms 0.983 ± 0.054
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 1.76 ± 0.14 ms 1.81 ± 0.011 ms 0.97 ± 0.077
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.299 ± 0.0063 s 0.286 ± 0.0065 s 1.05 ± 0.032
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.057 ± 0.00057 s 0.0557 ± 0.00028 s 1.02 ± 0.011
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.136 ± 0.0044 s 0.132 ± 0.0032 s 1.03 ± 0.041
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.729 ± 0.0083 ms 0.737 ± 0.0084 ms 0.989 ± 0.016
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 2.55 ± 0.02 ms 2.55 ± 0.02 ms 1 ± 0.011
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 7.96 ± 0.06 ms 7.88 ± 0.069 ms 1.01 ± 0.012
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 1.86 ± 0.057 s 1.63 ± 0.1 s 1.14 ± 0.078
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.138 ± 0.0032 s 0.132 ± 0.0016 s 1.04 ± 0.027
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.605 ± 0.037 s 0.517 ± 0.025 s 1.17 ± 0.091
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.724 ± 0.0085 ms 0.726 ± 0.0087 ms 0.997 ± 0.017
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 2.55 ± 0.022 ms 2.56 ± 0.021 ms 0.996 ± 0.012
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 7.97 ± 0.065 ms 7.99 ± 0.084 ms 0.998 ± 0.013
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 1.85 ± 0.04 s 1.71 ± 0.049 s 1.08 ± 0.039
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.144 ± 0.0059 s 0.14 ± 0.0025 s 1.03 ± 0.046
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.607 ± 0.023 s 0.536 ± 0.017 s 1.13 ± 0.055
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.727 ± 0.0084 ms 0.725 ± 0.0087 ms 1 ± 0.017
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 2.52 ± 0.022 ms 2.51 ± 0.026 ms 1 ± 0.014
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 7.86 ± 0.063 ms 7.79 ± 0.066 ms 1.01 ± 0.012
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 1.98 ± 0.036 s 1.78 ± 0.056 s 1.11 ± 0.04
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.153 ± 0.0032 s 0.153 ± 0.007 s 1 ± 0.051
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.624 ± 0.071 s 0.556 ± 0.018 s 1.12 ± 0.13
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.304 ± 0.01 ms 0.302 ± 0.011 ms 1.01 ± 0.05
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.761 ± 0.01 ms 0.747 ± 0.044 ms 1.02 ± 0.061
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 1.76 ± 0.14 ms 1.75 ± 0.012 ms 1.01 ± 0.081
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.297 ± 0.0042 s 0.279 ± 0.0042 s 1.06 ± 0.022
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.0564 ± 0.00048 s 0.0563 ± 0.00048 s 1 ± 0.012
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.134 ± 0.0038 s 0.13 ± 0.00097 s 1.03 ± 0.03
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.227 ± 0.0079 ms 0.229 ± 0.0086 ms 0.994 ± 0.051
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 0.414 ± 0.012 ms 0.417 ± 0.011 ms 0.994 ± 0.039
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 0.682 ± 0.011 ms 0.684 ± 0.01 ms 0.998 ± 0.022
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 0.161 ± 0.0067 s 0.151 ± 0.0089 s 1.07 ± 0.077
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.0457 ± 0.00048 s 0.0447 ± 0.00049 s 1.02 ± 0.016
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.093 ± 0.0041 s 0.0853 ± 0.0051 s 1.09 ± 0.081
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.213 ± 0.0054 ms 0.213 ± 0.0057 ms 1 ± 0.037
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 0.393 ± 0.011 ms 0.396 ± 0.011 ms 0.993 ± 0.04
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 0.666 ± 0.012 ms 0.664 ± 0.011 ms 1 ± 0.025
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 0.158 ± 0.011 s 0.147 ± 0.015 s 1.08 ± 0.13
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.0434 ± 0.00093 s 0.0426 ± 0.00054 s 1.02 ± 0.025
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.0888 ± 0.0066 s 0.0795 ± 0.0026 s 1.12 ± 0.091
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.19 ± 0.0059 ms 0.191 ± 0.0052 ms 0.996 ± 0.041
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 0.368 ± 0.011 ms 0.365 ± 0.011 ms 1.01 ± 0.043
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 0.612 ± 0.012 ms 0.605 ± 0.011 ms 1.01 ± 0.027
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 0.155 ± 0.0035 s 0.141 ± 0.0048 s 1.1 ± 0.045
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.0428 ± 0.0016 s 0.0411 ± 0.00053 s 1.04 ± 0.041
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.0878 ± 0.0023 s 0.0772 ± 0.003 s 1.14 ± 0.053
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.106 ± 0.0022 ms 0.106 ± 0.0021 ms 1.01 ± 0.029
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.141 ± 0.0036 ms 0.133 ± 0.015 ms 1.06 ± 0.12
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 0.149 ± 0.0037 ms 0.142 ± 0.0042 ms 1.04 ± 0.04
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 26.1 ± 0.16 ms 25.7 ± 0.18 ms 1.02 ± 0.0095
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 22.2 ± 0.12 ms 21.8 ± 0.16 ms 1.02 ± 0.0091
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 24.1 ± 0.13 ms 23.7 ± 0.14 ms 1.02 ± 0.0079
time_to_load 0.294 ± 0.0045 s 0.293 ± 0.0039 s 1 ± 0.02
main c07b879... main / c07b879...
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.002 0.515 k allocs: 2.33 MB 0.47 k allocs: 1.55 MB 1.51
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.005 0.525 k allocs: 3.91 MB 0.48 k allocs: 2.57 MB 1.52
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.01 0.535 k allocs: 6.85 MB 0.49 k allocs: 4.39 MB 1.56
coloring/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 0.62 k allocs: 0.71 GB 0.575 k allocs: 0.464 GB 1.53
coloring/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 0.59 k allocs: 0.247 GB 0.545 k allocs: 0.154 GB 1.6
coloring/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.6 k allocs: 0.412 GB 0.555 k allocs: 0.256 GB 1.61
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 0.668 k allocs: 2.84 MB 0.553 k allocs: 2.17 MB 1.31
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 0.67 k allocs: 4.83 MB 0.555 k allocs: 3.79 MB 1.27
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 0.67 k allocs: 8.34 MB 0.555 k allocs: 6.63 MB 1.26
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 0.68 k allocs: 0.813 GB 0.565 k allocs: 0.642 GB 1.27
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.68 k allocs: 0.273 GB 0.565 k allocs: 0.206 GB 1.32
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 0.68 k allocs: 0.473 GB 0.565 k allocs: 0.369 GB 1.28
coloring/nonsymmetric/column/direct/n=1000/p=0.002 0.135 k allocs: 0.354 MB 0.135 k allocs: 0.354 MB 1
coloring/nonsymmetric/column/direct/n=1000/p=0.005 0.135 k allocs: 0.578 MB 0.135 k allocs: 0.578 MB 1
coloring/nonsymmetric/column/direct/n=1000/p=0.01 0.135 k allocs: 0.967 MB 0.135 k allocs: 0.967 MB 1
coloring/nonsymmetric/column/direct/n=100000/p=0.0001 0.135 k allocs: 0.0931 GB 0.135 k allocs: 0.0931 GB 1
coloring/nonsymmetric/column/direct/n=100000/p=2.0e-5 0.135 k allocs: 0.0335 GB 0.135 k allocs: 0.0335 GB 1
coloring/nonsymmetric/column/direct/n=100000/p=5.0e-5 0.135 k allocs: 0.0558 GB 0.135 k allocs: 0.0558 GB 1
coloring/nonsymmetric/row/direct/n=1000/p=0.002 0.135 k allocs: 0.354 MB 0.135 k allocs: 0.354 MB 1
coloring/nonsymmetric/row/direct/n=1000/p=0.005 0.135 k allocs: 0.578 MB 0.135 k allocs: 0.578 MB 1
coloring/nonsymmetric/row/direct/n=1000/p=0.01 0.135 k allocs: 0.967 MB 0.135 k allocs: 0.967 MB 1
coloring/nonsymmetric/row/direct/n=100000/p=0.0001 0.135 k allocs: 0.0931 GB 0.135 k allocs: 0.0931 GB 1
coloring/nonsymmetric/row/direct/n=100000/p=2.0e-5 0.135 k allocs: 0.0335 GB 0.135 k allocs: 0.0335 GB 1
coloring/nonsymmetric/row/direct/n=100000/p=5.0e-5 0.135 k allocs: 0.0558 GB 0.135 k allocs: 0.0558 GB 1
coloring/symmetric/column/direct/n=1000/p=0.002 0.25 k allocs: 0.633 MB 0.25 k allocs: 0.633 MB 1
coloring/symmetric/column/direct/n=1000/p=0.005 0.26 k allocs: 1.03 MB 0.26 k allocs: 1.03 MB 1
coloring/symmetric/column/direct/n=1000/p=0.01 0.262 k allocs: 1.56 MB 0.262 k allocs: 1.56 MB 1
coloring/symmetric/column/direct/n=100000/p=0.0001 0.345 k allocs: 0.172 GB 0.345 k allocs: 0.172 GB 1
coloring/symmetric/column/direct/n=100000/p=2.0e-5 0.315 k allocs: 0.0608 GB 0.315 k allocs: 0.0608 GB 1
coloring/symmetric/column/direct/n=100000/p=5.0e-5 0.325 k allocs: 0.0952 GB 0.325 k allocs: 0.0952 GB 1
coloring/symmetric/column/substitution/n=1000/p=0.002 0.41 k allocs: 0.95 MB 0.41 k allocs: 0.95 MB 1
coloring/symmetric/column/substitution/n=1000/p=0.005 0.415 k allocs: 1.65 MB 0.415 k allocs: 1.65 MB 1
coloring/symmetric/column/substitution/n=1000/p=0.01 0.415 k allocs: 2.86 MB 0.415 k allocs: 2.86 MB 1
coloring/symmetric/column/substitution/n=100000/p=0.0001 0.425 k allocs: 0.276 GB 0.425 k allocs: 0.276 GB 1
coloring/symmetric/column/substitution/n=100000/p=2.0e-5 0.425 k allocs: 0.0901 GB 0.425 k allocs: 0.0901 GB 1
coloring/symmetric/column/substitution/n=100000/p=5.0e-5 0.425 k allocs: 0.16 GB 0.425 k allocs: 0.16 GB 1
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.002 0.045 k allocs: 0.197 MB 0.045 k allocs: 0.197 MB 1
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.005 0.045 k allocs: 0.419 MB 0.045 k allocs: 0.419 MB 1
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.01 0.045 k allocs: 0.803 MB 0.045 k allocs: 0.803 MB 1
decompress/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 0.045 k allocs: 0.0782 GB 0.045 k allocs: 0.0782 GB 1
decompress/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 0.045 k allocs: 19.1 MB 0.045 k allocs: 19.1 MB 1
decompress/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.045 k allocs: 0.0409 GB 0.045 k allocs: 0.0409 GB 1
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 0.045 k allocs: 0.197 MB 0.045 k allocs: 0.197 MB 1
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 0.045 k allocs: 0.419 MB 0.045 k allocs: 0.419 MB 1
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 0.045 k allocs: 0.803 MB 0.045 k allocs: 0.803 MB 1
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 0.045 k allocs: 0.0782 GB 0.045 k allocs: 0.0782 GB 1
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.045 k allocs: 19.1 MB 0.045 k allocs: 19.1 MB 1
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 0.045 k allocs: 0.0409 GB 0.045 k allocs: 0.0409 GB 1
decompress/nonsymmetric/column/direct/n=1000/p=0.002 0.045 k allocs: 0.197 MB 0.045 k allocs: 0.197 MB 1
decompress/nonsymmetric/column/direct/n=1000/p=0.005 0.045 k allocs: 0.419 MB 0.045 k allocs: 0.419 MB 1
decompress/nonsymmetric/column/direct/n=1000/p=0.01 0.045 k allocs: 0.803 MB 0.045 k allocs: 0.803 MB 1
decompress/nonsymmetric/column/direct/n=100000/p=0.0001 0.045 k allocs: 0.0782 GB 0.045 k allocs: 0.0782 GB 1
decompress/nonsymmetric/column/direct/n=100000/p=2.0e-5 0.045 k allocs: 19.1 MB 0.045 k allocs: 19.1 MB 1
decompress/nonsymmetric/column/direct/n=100000/p=5.0e-5 0.045 k allocs: 0.0409 GB 0.045 k allocs: 0.0409 GB 1
decompress/nonsymmetric/row/direct/n=1000/p=0.002 0.045 k allocs: 0.197 MB 0.045 k allocs: 0.197 MB 1
decompress/nonsymmetric/row/direct/n=1000/p=0.005 0.045 k allocs: 0.419 MB 0.045 k allocs: 0.419 MB 1
decompress/nonsymmetric/row/direct/n=1000/p=0.01 0.045 k allocs: 0.803 MB 0.045 k allocs: 0.803 MB 1
decompress/nonsymmetric/row/direct/n=100000/p=0.0001 0.045 k allocs: 0.0782 GB 0.045 k allocs: 0.0782 GB 1
decompress/nonsymmetric/row/direct/n=100000/p=2.0e-5 0.045 k allocs: 19.1 MB 0.045 k allocs: 19.1 MB 1
decompress/nonsymmetric/row/direct/n=100000/p=5.0e-5 0.045 k allocs: 0.0409 GB 0.045 k allocs: 0.0409 GB 1
decompress/symmetric/column/direct/n=1000/p=0.002 0.045 k allocs: 0.197 MB 0.045 k allocs: 0.197 MB 1
decompress/symmetric/column/direct/n=1000/p=0.005 0.045 k allocs: 0.419 MB 0.045 k allocs: 0.419 MB 1
decompress/symmetric/column/direct/n=1000/p=0.01 0.045 k allocs: 0.803 MB 0.045 k allocs: 0.803 MB 1
decompress/symmetric/column/direct/n=100000/p=0.0001 0.045 k allocs: 0.0782 GB 0.045 k allocs: 0.0782 GB 1
decompress/symmetric/column/direct/n=100000/p=2.0e-5 0.045 k allocs: 19.1 MB 0.045 k allocs: 19.1 MB 1
decompress/symmetric/column/direct/n=100000/p=5.0e-5 0.045 k allocs: 0.0409 GB 0.045 k allocs: 0.0409 GB 1
decompress/symmetric/column/substitution/n=1000/p=0.002 0.045 k allocs: 0.197 MB 0.045 k allocs: 0.197 MB 1
decompress/symmetric/column/substitution/n=1000/p=0.005 0.045 k allocs: 0.419 MB 0.045 k allocs: 0.419 MB 1
decompress/symmetric/column/substitution/n=1000/p=0.01 0.045 k allocs: 0.803 MB 0.045 k allocs: 0.803 MB 1
decompress/symmetric/column/substitution/n=100000/p=0.0001 0.045 k allocs: 0.0782 GB 0.045 k allocs: 0.0782 GB 1
decompress/symmetric/column/substitution/n=100000/p=2.0e-5 0.045 k allocs: 19.1 MB 0.045 k allocs: 19.1 MB 1
decompress/symmetric/column/substitution/n=100000/p=5.0e-5 0.045 k allocs: 0.0409 GB 0.045 k allocs: 0.0409 GB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.105 k allocs: 0.196 MB 0.105 k allocs: 0.196 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 0.105 k allocs: 0.202 MB 0.105 k allocs: 0.202 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 0.105 k allocs: 0.216 MB 0.105 k allocs: 0.216 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 0.12 k allocs: 19.1 MB 0.12 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.105 k allocs: 0.196 MB 0.105 k allocs: 0.196 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 0.105 k allocs: 0.202 MB 0.105 k allocs: 0.202 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 0.105 k allocs: 0.216 MB 0.105 k allocs: 0.216 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 0.12 k allocs: 19.1 MB 0.12 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.105 k allocs: 0.196 MB 0.105 k allocs: 0.196 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 0.105 k allocs: 0.202 MB 0.105 k allocs: 0.202 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 0.105 k allocs: 0.216 MB 0.105 k allocs: 0.216 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 0.12 k allocs: 19.1 MB 0.12 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.045 k allocs: 0.115 MB 0.045 k allocs: 0.115 MB 1
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.045 k allocs: 0.115 MB 0.045 k allocs: 0.115 MB 1
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 0.045 k allocs: 0.115 MB 0.045 k allocs: 0.115 MB 1
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.045 k allocs: 11.4 MB 0.045 k allocs: 11.4 MB 1
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.045 k allocs: 11.4 MB 0.045 k allocs: 11.4 MB 1
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.045 k allocs: 11.4 MB 0.045 k allocs: 11.4 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.105 k allocs: 0.196 MB 0.105 k allocs: 0.196 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 0.105 k allocs: 0.202 MB 0.105 k allocs: 0.202 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 0.105 k allocs: 0.216 MB 0.105 k allocs: 0.216 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 0.12 k allocs: 19.1 MB 0.12 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.105 k allocs: 0.196 MB 0.105 k allocs: 0.196 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 0.105 k allocs: 0.202 MB 0.105 k allocs: 0.202 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 0.105 k allocs: 0.216 MB 0.105 k allocs: 0.216 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 0.12 k allocs: 19.1 MB 0.12 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.105 k allocs: 0.196 MB 0.105 k allocs: 0.196 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 0.105 k allocs: 0.202 MB 0.105 k allocs: 0.202 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 0.105 k allocs: 0.216 MB 0.105 k allocs: 0.216 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 0.12 k allocs: 19.1 MB 0.12 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.045 k allocs: 0.115 MB 0.045 k allocs: 0.115 MB 1
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.045 k allocs: 0.115 MB 0.045 k allocs: 0.115 MB 1
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 0.045 k allocs: 0.115 MB 0.045 k allocs: 0.115 MB 1
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.045 k allocs: 11.4 MB 0.045 k allocs: 11.4 MB 1
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.045 k allocs: 11.4 MB 0.045 k allocs: 11.4 MB 1
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.045 k allocs: 11.4 MB 0.045 k allocs: 11.4 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.09 k allocs: 0.156 MB 0.09 k allocs: 0.156 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 0.09 k allocs: 0.156 MB 0.09 k allocs: 0.156 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 0.09 k allocs: 0.157 MB 0.09 k allocs: 0.157 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.09 k allocs: 0.156 MB 0.09 k allocs: 0.156 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 0.09 k allocs: 0.156 MB 0.09 k allocs: 0.156 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 0.09 k allocs: 0.157 MB 0.09 k allocs: 0.157 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.09 k allocs: 0.156 MB 0.09 k allocs: 0.156 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 0.09 k allocs: 0.156 MB 0.09 k allocs: 0.156 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 0.09 k allocs: 0.157 MB 0.09 k allocs: 0.157 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.05 k allocs: 0.116 MB 0.05 k allocs: 0.116 MB 1
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.05 k allocs: 0.116 MB 0.05 k allocs: 0.116 MB 1
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 0.05 k allocs: 0.116 MB 0.05 k allocs: 0.116 MB 1
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.05 k allocs: 11.4 MB 0.05 k allocs: 11.4 MB 1
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.05 k allocs: 11.4 MB 0.05 k allocs: 11.4 MB 1
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.05 k allocs: 11.4 MB 0.05 k allocs: 11.4 MB 1
time_to_load 0.201 k allocs: 11.8 kB 0.201 k allocs: 11.8 kB 1

@gdalle

gdalle commented Mar 4, 2025

Copy link
Copy Markdown
Member

Hot damn!

@amontoison amontoison added the performance Speeding things up label Mar 4, 2025
@amontoison

amontoison commented Mar 4, 2025

Copy link
Copy Markdown
Collaborator Author

Capture d’écran du 2025-03-04 17-02-34

I don't understand these results. I am wondering if Br and Bc are dense matrices or not in the benchmarks.
All other results are excellent.

@gdalle

gdalle commented Mar 5, 2025

Copy link
Copy Markdown
Member

I just profiled the problematic case and we're spending most of the time in the new getindex, as I feared. Even though both Br and Bc are dense.

Screenshot 2025-03-05 at 08 53 50

@gdalle

gdalle commented Mar 5, 2025

Copy link
Copy Markdown
Member

On the other hand, in the previous version of the code (the one on main), I see that Br or Bc can be sparse (!!!). This means the benchmarking will be biased because they should be dense in the first place. I'll try to fix that first.

@gdalle

gdalle commented Mar 5, 2025

Copy link
Copy Markdown
Member

We also should use random ordering in the benchmarks, otherwise the results will be trivial.

@gdalle

gdalle commented Mar 5, 2025

Copy link
Copy Markdown
Member

I just merged the modifications from #198, the upcoming benchmarks will be more realistic

@gdalle

gdalle commented Mar 5, 2025

Copy link
Copy Markdown
Member

@amontoison the benchmarks are updated and now we don't see any significant speedups, but we still have the huge slowdowns on some instances. I'm not sure it's worth the memory savings, what do you think?

@gdalle

gdalle commented Mar 5, 2025

Copy link
Copy Markdown
Member

Another issue with the benchmarks is that, in the current state, we're unable to pre-allocate Br_and_Bc due to mismatched decompression_eltype. #199 fixes that

@amontoison
amontoison force-pushed the decompression_bicoloring branch 2 times, most recently from 0d5e732 to fcf052b Compare March 6, 2025 05:58
Comment thread src/decompression.jl Outdated
Comment thread src/decompression.jl Outdated
@amontoison
amontoison force-pushed the decompression_bicoloring branch from 07205ae to ca44a88 Compare March 17, 2025 01:07
@amontoison

amontoison commented Mar 17, 2025

Copy link
Copy Markdown
Collaborator Author

@gdalle
Capture d’écran du 2025-03-17 02-42-13
Capture d’écran du 2025-03-17 02-42-35

Note that I still need to do an efficient decompression for acyclic bicoloring.

@amontoison

Copy link
Copy Markdown
Collaborator Author

@gdalle The PR is finally ready for review!

@amontoison
amontoison force-pushed the decompression_bicoloring branch 2 times, most recently from 186b22b to 6843a14 Compare April 11, 2025 01:55
@amontoison
amontoison force-pushed the decompression_bicoloring branch 2 times, most recently from 8a0668a to 54b5bb2 Compare April 11, 2025 17:37
@amontoison
amontoison force-pushed the decompression_bicoloring branch from 5afa464 to 81e5fc3 Compare September 18, 2026 17:42
@amontoison
amontoison force-pushed the decompression_bicoloring branch from 81e5fc3 to 93459cb Compare September 18, 2026 17:43
@codecov

codecov Bot commented Sep 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.24%. Comparing base (e951ff2) to head (c07b879).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #194      +/-   ##
==========================================
+ Coverage   99.17%   99.24%   +0.06%     
==========================================
  Files          22       22              
  Lines        2304     2507     +203     
==========================================
+ Hits         2285     2488     +203     
  Misses         19       19              

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

benchmark Run benchmarks on PR performance Speeding things up

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants