Skip to content

Add an option decompression_uplo for symmetric results - #294

Open
amontoison wants to merge 1 commit into
mainfrom
am/decompression_uplo
Open

amontoison wants to merge 1 commit into
mainfrom
am/decompression_uplo

Conversation

@amontoison

@amontoison amontoison commented Jan 4, 2026

Copy link
Copy Markdown
Collaborator

Add an argument decompression_uplo for StarSetColoringResult and TreeSetColoringResult such that we can specialize the decompression for bicoloring.
We can always use decompression_uplo = :L for the bicoloring.
For the bicoloring, decompress! only use the specialized version for SparseMatrixCSC since #288.

Everything is internal so it is not breaking.
Replace #289.

I will wait a review of Guillaume before that I merge this PR and future modifications.

@amontoison amontoison added performance Speeding things up benchmark Run benchmarks on PR labels Jan 4, 2026
@amontoison
amontoison requested a review from gdalle January 4, 2026 22:39
@codecov

codecov Bot commented Jan 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (31999f1) to head (a55cce6).

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #294   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           20        20           
  Lines         2027      2045   +18     
=========================================
+ Hits          2027      2045   +18     

☔ 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.

@github-actions

github-actions Bot commented Jan 4, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

main 026b715... main / 026b715...
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.002 1.7 ± 0.18 ms 1.59 ± 0.16 ms 1.07 ± 0.15
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.005 3.47 ± 0.42 ms 3.37 ± 0.32 ms 1.03 ± 0.16
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.01 7.83 ± 0.039 ms 7.63 ± 0.04 ms 1.03 ± 0.0075
coloring/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 1.55 ± 0.017 s 1.48 ± 0.017 s 1.05 ± 0.017
coloring/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 0.276 ± 0.0053 s 0.26 ± 0.01 s 1.06 ± 0.046
coloring/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.672 ± 0.011 s 0.63 ± 0.013 s 1.07 ± 0.028
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 2.36 ± 0.018 ms 2.27 ± 0.017 ms 1.04 ± 0.011
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 6.09 ± 0.026 ms 5.8 ± 0.034 ms 1.05 ± 0.0076
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 14.4 ± 0.043 ms 13.8 ± 0.062 ms 1.05 ± 0.0056
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 2.83 ± 0.07 s 2.53 ± 0.0099 s 1.12 ± 0.028
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.417 ± 0.011 s 0.4 ± 0.013 s 1.04 ± 0.045
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 1.14 ± 0.011 s 1.16 ± 0.096 s 0.984 ± 0.082
coloring/nonsymmetric/column/direct/n=1000/p=0.002 0.379 ± 0.009 ms 0.386 ± 0.0078 ms 0.98 ± 0.031
coloring/nonsymmetric/column/direct/n=1000/p=0.005 0.948 ± 0.0085 ms 0.969 ± 0.0081 ms 0.978 ± 0.012
coloring/nonsymmetric/column/direct/n=1000/p=0.01 2.4 ± 0.031 ms 2.45 ± 0.019 ms 0.982 ± 0.015
coloring/nonsymmetric/column/direct/n=100000/p=0.0001 0.466 ± 0.0061 s 0.478 ± 0.014 s 0.976 ± 0.032
coloring/nonsymmetric/column/direct/n=100000/p=2.0e-5 0.076 ± 0.0058 s 0.0717 ± 0.00044 s 1.06 ± 0.081
coloring/nonsymmetric/column/direct/n=100000/p=5.0e-5 0.191 ± 0.016 s 0.197 ± 0.0014 s 0.973 ± 0.082
coloring/nonsymmetric/row/direct/n=1000/p=0.002 0.368 ± 0.0091 ms 0.408 ± 0.02 ms 0.902 ± 0.049
coloring/nonsymmetric/row/direct/n=1000/p=0.005 0.958 ± 0.12 ms 0.953 ± 0.032 ms 1 ± 0.13
coloring/nonsymmetric/row/direct/n=1000/p=0.01 2.69 ± 0.33 ms 2.41 ± 0.014 ms 1.12 ± 0.14
coloring/nonsymmetric/row/direct/n=100000/p=0.0001 0.454 ± 0.0023 s 0.445 ± 0.0051 s 1.02 ± 0.013
coloring/nonsymmetric/row/direct/n=100000/p=2.0e-5 0.0756 ± 0.0014 s 0.0703 ± 0.00037 s 1.08 ± 0.021
coloring/nonsymmetric/row/direct/n=100000/p=5.0e-5 0.192 ± 0.0013 s 0.189 ± 0.0011 s 1.01 ± 0.0094
coloring/symmetric/column/direct/n=1000/p=0.002 0.78 ± 0.0076 ms 0.782 ± 0.0079 ms 0.997 ± 0.014
coloring/symmetric/column/direct/n=1000/p=0.005 1.76 ± 0.017 ms 1.77 ± 0.014 ms 0.997 ± 0.012
coloring/symmetric/column/direct/n=1000/p=0.01 4.04 ± 0.024 ms 4.03 ± 0.023 ms 1 ± 0.0083
coloring/symmetric/column/direct/n=100000/p=0.0001 0.742 ± 0.071 s 0.723 ± 0.0034 s 1.03 ± 0.099
coloring/symmetric/column/direct/n=100000/p=2.0e-5 0.128 ± 0.0016 s 0.128 ± 0.011 s 0.997 ± 0.087
coloring/symmetric/column/direct/n=100000/p=5.0e-5 0.317 ± 0.029 s 0.326 ± 0.029 s 0.972 ± 0.12
coloring/symmetric/column/substitution/n=1000/p=0.002 1.22 ± 0.011 ms 1.22 ± 0.0099 ms 1 ± 0.012
coloring/symmetric/column/substitution/n=1000/p=0.005 3.14 ± 0.014 ms 3.12 ± 0.014 ms 1.01 ± 0.0064
coloring/symmetric/column/substitution/n=1000/p=0.01 7.31 ± 0.031 ms 7.26 ± 0.027 ms 1.01 ± 0.0057
coloring/symmetric/column/substitution/n=100000/p=0.0001 1.24 ± 0.015 s 1.27 ± 0.015 s 0.977 ± 0.017
coloring/symmetric/column/substitution/n=100000/p=2.0e-5 0.189 ± 0.0019 s 0.189 ± 0.0023 s 1 ± 0.016
coloring/symmetric/column/substitution/n=100000/p=5.0e-5 0.538 ± 0.0033 s 0.541 ± 0.0045 s 0.994 ± 0.01
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.002 0.119 ± 0.0054 ms 0.057 ± 0.0012 ms 2.09 ± 0.1
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.005 0.23 ± 0.0083 ms 0.146 ± 0.0023 ms 1.57 ± 0.062
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.01 0.387 ± 0.012 ms 0.284 ± 0.0099 ms 1.36 ± 0.063
decompress/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 0.145 ± 0.0021 s 0.118 ± 0.0019 s 1.23 ± 0.026
decompress/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 0.0344 ± 0.0011 s 24.3 ± 1.6 ms 1.41 ± 0.1
decompress/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.0797 ± 0.0014 s 0.0634 ± 0.0015 s 1.26 ± 0.036
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 0.106 ± 0.004 ms 0.106 ± 0.0029 ms 1 ± 0.047
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 0.223 ± 0.0079 ms 0.221 ± 0.009 ms 1.01 ± 0.054
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 0.446 ± 0.013 ms 0.445 ± 0.013 ms 1 ± 0.041
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 0.153 ± 0.0025 s 0.148 ± 0.0038 s 1.03 ± 0.032
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.0339 ± 0.0011 s 30.7 ± 2.4 ms 1.1 ± 0.092
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 0.077 ± 0.0014 s 0.0734 ± 0.0023 s 1.05 ± 0.039
decompress/nonsymmetric/column/direct/n=1000/p=0.002 27.5 ± 1.5 μs 26.7 ± 1.3 μs 1.03 ± 0.074
decompress/nonsymmetric/column/direct/n=1000/p=0.005 0.0539 ± 0.0021 ms 0.053 ± 0.0017 ms 1.02 ± 0.051
decompress/nonsymmetric/column/direct/n=1000/p=0.01 0.129 ± 0.0084 ms 0.126 ± 0.0035 ms 1.03 ± 0.072
decompress/nonsymmetric/column/direct/n=100000/p=0.0001 0.0369 ± 0.00094 s 30.9 ± 2.4 ms 1.19 ± 0.098
decompress/nonsymmetric/column/direct/n=100000/p=2.0e-5 4.01 ± 0.087 ms 3.96 ± 0.1 ms 1.01 ± 0.034
decompress/nonsymmetric/column/direct/n=100000/p=5.0e-5 12.2 ± 0.84 ms 11.1 ± 0.61 ms 1.1 ± 0.096
decompress/nonsymmetric/row/direct/n=1000/p=0.002 27 ± 1.3 μs 26.9 ± 1.2 μs 1 ± 0.067
decompress/nonsymmetric/row/direct/n=1000/p=0.005 0.0524 ± 0.0019 ms 0.0526 ± 0.0019 ms 0.997 ± 0.051
decompress/nonsymmetric/row/direct/n=1000/p=0.01 0.124 ± 0.0027 ms 0.124 ± 0.0031 ms 1.01 ± 0.034
decompress/nonsymmetric/row/direct/n=100000/p=0.0001 20.4 ± 0.82 ms 19.6 ± 0.95 ms 1.04 ± 0.066
decompress/nonsymmetric/row/direct/n=100000/p=2.0e-5 3.64 ± 0.064 ms 3.59 ± 0.055 ms 1.01 ± 0.024
decompress/nonsymmetric/row/direct/n=100000/p=5.0e-5 8.33 ± 0.64 ms 7.52 ± 0.38 ms 1.11 ± 0.1
decompress/symmetric/column/direct/n=1000/p=0.002 27.9 ± 1.5 μs 26.8 ± 1.4 μs 1.04 ± 0.077
decompress/symmetric/column/direct/n=1000/p=0.005 0.0547 ± 0.0016 ms 0.0532 ± 0.0015 ms 1.03 ± 0.041
decompress/symmetric/column/direct/n=1000/p=0.01 0.108 ± 0.0031 ms 0.106 ± 0.003 ms 1.02 ± 0.041
decompress/symmetric/column/direct/n=100000/p=0.0001 27.7 ± 1.7 ms 25.5 ± 2 ms 1.08 ± 0.11
decompress/symmetric/column/direct/n=100000/p=2.0e-5 3.67 ± 0.082 ms 3.6 ± 0.079 ms 1.02 ± 0.032
decompress/symmetric/column/direct/n=100000/p=5.0e-5 10 ± 0.54 ms 9.36 ± 0.54 ms 1.07 ± 0.085
decompress/symmetric/column/substitution/n=1000/p=0.002 0.0624 ± 0.003 ms 0.0624 ± 0.0024 ms 1 ± 0.062
decompress/symmetric/column/substitution/n=1000/p=0.005 0.134 ± 0.006 ms 0.132 ± 0.0081 ms 1.01 ± 0.076
decompress/symmetric/column/substitution/n=1000/p=0.01 0.278 ± 0.012 ms 0.277 ± 0.011 ms 1.01 ± 0.06
decompress/symmetric/column/substitution/n=100000/p=0.0001 0.0849 ± 0.002 s 0.0791 ± 0.0035 s 1.07 ± 0.054
decompress/symmetric/column/substitution/n=100000/p=2.0e-5 13.8 ± 0.69 ms 12.6 ± 0.52 ms 1.09 ± 0.071
decompress/symmetric/column/substitution/n=100000/p=5.0e-5 0.0401 ± 0.003 s 0.033 ± 0.0015 s 1.21 ± 0.11
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.587 ± 0.075 ms 0.568 ± 0.0077 ms 1.03 ± 0.13
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 1.88 ± 0.031 ms 1.89 ± 0.017 ms 0.996 ± 0.019
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 5.77 ± 0.054 ms 5.74 ± 0.052 ms 1.01 ± 0.013
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 1.33 ± 0.015 s 1.27 ± 0.013 s 1.05 ± 0.016
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.138 ± 0.0093 s 0.127 ± 0.00088 s 1.09 ± 0.074
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.461 ± 0.0044 s 0.445 ± 0.016 s 1.04 ± 0.038
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.582 ± 0.0069 ms 0.573 ± 0.0067 ms 1.02 ± 0.017
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 2.16 ± 0.027 ms 1.9 ± 0.011 ms 1.14 ± 0.016
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 5.75 ± 0.025 ms 5.75 ± 0.065 ms 1 ± 0.012
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 1.32 ± 0.027 s 1.39 ± 0.037 s 0.947 ± 0.032
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.14 ± 0.009 s 0.134 ± 0.0032 s 1.04 ± 0.072
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.461 ± 0.0058 s 0.453 ± 0.0075 s 1.02 ± 0.021
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.546 ± 0.0082 ms 0.55 ± 0.0075 ms 0.993 ± 0.02
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 1.84 ± 0.014 ms 1.85 ± 0.013 ms 0.992 ± 0.01
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 5.71 ± 0.057 ms 5.7 ± 0.038 ms 1 ± 0.012
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 1.34 ± 0.017 s 1.31 ± 0.045 s 1.02 ± 0.037
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.141 ± 0.0042 s 0.124 ± 0.0049 s 1.14 ± 0.056
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.477 ± 0.0049 s 0.453 ± 0.01 s 1.05 ± 0.026
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.225 ± 0.0062 ms 0.227 ± 0.0057 ms 0.991 ± 0.037
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.582 ± 0.0074 ms 0.583 ± 0.0072 ms 0.999 ± 0.018
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 1.51 ± 0.0092 ms 1.51 ± 0.0097 ms 0.999 ± 0.0088
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.325 ± 0.003 s 0.322 ± 0.019 s 1.01 ± 0.062
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.041 ± 0.00029 s 0.0409 ± 0.00029 s 1 ± 0.01
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.132 ± 0.0092 s 0.121 ± 0.01 s 1.09 ± 0.12
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.568 ± 0.0077 ms 0.567 ± 0.0082 ms 1 ± 0.02
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 1.87 ± 0.014 ms 1.88 ± 0.015 ms 0.996 ± 0.011
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 5.76 ± 0.059 ms 5.72 ± 0.029 ms 1.01 ± 0.012
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 1.3 ± 0.0072 s 1.26 ± 0.028 s 1.03 ± 0.024
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.135 ± 0.0018 s 0.136 ± 0.0012 s 0.99 ± 0.016
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.456 ± 0.0075 s 0.447 ± 0.0066 s 1.02 ± 0.023
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.577 ± 0.0074 ms 0.576 ± 0.059 ms 1 ± 0.1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 1.9 ± 0.01 ms 1.9 ± 0.21 ms 1 ± 0.11
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 5.75 ± 0.039 ms 5.74 ± 0.039 ms 1 ± 0.0096
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 1.33 ± 0.021 s 1.28 ± 0.026 s 1.03 ± 0.026
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.148 ± 0.0026 s 0.13 ± 0.00065 s 1.14 ± 0.02
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.461 ± 0.0095 s 0.442 ± 0.0093 s 1.04 ± 0.031
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.546 ± 0.0075 ms 0.551 ± 0.0069 ms 0.992 ± 0.019
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 1.84 ± 0.014 ms 1.86 ± 0.017 ms 0.991 ± 0.012
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 5.71 ± 0.055 ms 5.7 ± 0.042 ms 1 ± 0.012
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 1.33 ± 0.015 s 1.29 ± 0.027 s 1.03 ± 0.025
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.137 ± 0.0039 s 0.126 ± 0.00097 s 1.08 ± 0.032
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.5 ± 0.024 s 0.443 ± 0.0059 s 1.13 ± 0.055
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.226 ± 0.0062 ms 0.253 ± 0.026 ms 0.896 ± 0.097
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.588 ± 0.0082 ms 0.584 ± 0.0076 ms 1.01 ± 0.019
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 1.77 ± 0.23 ms 1.52 ± 0.0095 ms 1.17 ± 0.15
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.326 ± 0.0023 s 0.32 ± 0.0042 s 1.02 ± 0.015
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.0422 ± 0.00035 s 0.0415 ± 0.00088 s 1.02 ± 0.023
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.125 ± 0.0014 s 0.119 ± 0.0018 s 1.05 ± 0.02
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.17 ± 0.0067 ms 0.168 ± 0.0076 ms 1.01 ± 0.06
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 0.311 ± 0.0081 ms 0.311 ± 0.0077 ms 1 ± 0.036
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 0.516 ± 0.0083 ms 0.515 ± 0.0085 ms 1 ± 0.023
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 0.11 ± 0.011 s 0.104 ± 0.0056 s 1.07 ± 0.12
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.0461 ± 0.00084 s 0.0462 ± 0.00072 s 0.998 ± 0.024
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.0747 ± 0.0069 s 0.0718 ± 0.0013 s 1.04 ± 0.098
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.173 ± 0.0053 ms 0.173 ± 0.0054 ms 1 ± 0.044
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 0.318 ± 0.0067 ms 0.315 ± 0.0066 ms 1.01 ± 0.03
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 0.514 ± 0.0075 ms 0.513 ± 0.0069 ms 1 ± 0.02
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 0.116 ± 0.002 s 0.0972 ± 0.0024 s 1.19 ± 0.036
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.0439 ± 0.00091 s 0.0428 ± 0.00037 s 1.02 ± 0.023
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.0721 ± 0.0031 s 0.0687 ± 0.0021 s 1.05 ± 0.056
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.132 ± 0.0086 ms 0.132 ± 0.0088 ms 1 ± 0.093
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 0.26 ± 0.0061 ms 0.256 ± 0.0078 ms 1.01 ± 0.039
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 0.426 ± 0.0079 ms 0.42 ± 0.011 ms 1.01 ± 0.032
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 0.0944 ± 0.013 s 0.0832 ± 0.002 s 1.13 ± 0.15
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 31 ± 0.61 ms 0.0321 ± 0.0015 s 0.967 ± 0.049
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.0539 ± 0.002 s 0.0537 ± 0.0024 s 1.01 ± 0.057
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.11 ± 0.0048 ms 0.1 ± 0.0039 ms 1.1 ± 0.064
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.126 ± 0.0071 ms 0.114 ± 0.0048 ms 1.1 ± 0.077
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 0.143 ± 0.0074 ms 0.13 ± 0.0051 ms 1.1 ± 0.071
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 19.5 ± 0.17 ms 19.3 ± 0.18 ms 1.01 ± 0.013
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 16.5 ± 0.15 ms 16.5 ± 0.12 ms 0.998 ± 0.011
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 17.7 ± 0.13 ms 17.8 ± 0.14 ms 0.999 ± 0.011
time_to_load 0.215 ± 0.00083 s 0.211 ± 0.0013 s 1.02 ± 0.0073
main 026b715... main / 026b715...
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.002 0.515 k allocs: 2.33 MB 0.515 k allocs: 2.25 MB 1.03
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.005 0.525 k allocs: 3.91 MB 0.525 k allocs: 3.72 MB 1.05
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.01 0.535 k allocs: 6.85 MB 0.535 k allocs: 6.47 MB 1.06
coloring/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 0.62 k allocs: 0.71 GB 0.62 k allocs: 0.672 GB 1.06
coloring/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 0.59 k allocs: 0.247 GB 0.59 k allocs: 0.239 GB 1.03
coloring/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.6 k allocs: 0.412 GB 0.6 k allocs: 0.393 GB 1.05
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 0.668 k allocs: 2.84 MB 0.658 k allocs: 2.76 MB 1.03
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 0.67 k allocs: 4.83 MB 0.66 k allocs: 4.64 MB 1.04
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 0.67 k allocs: 8.34 MB 0.66 k allocs: 7.96 MB 1.05
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 0.68 k allocs: 0.813 GB 0.67 k allocs: 0.776 GB 1.05
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.68 k allocs: 0.273 GB 0.67 k allocs: 0.266 GB 1.03
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 0.68 k allocs: 0.473 GB 0.67 k allocs: 0.454 GB 1.04
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 Jan 14, 2026

Copy link
Copy Markdown
Member

I'm not sure I understand what this PR does. If we pre-specify the type of decompression when we do the coloring, doesn't it make the uplo argument useless? And if not, which uplo setting takes precedence, the one in the result or the one in the argument?

@amontoison

amontoison commented Jan 14, 2026

Copy link
Copy Markdown
Collaborator Author

Yes, it should make the uplo argument useless (if we specialize it in the result for :L or :U).
But for bicoloring, we don't specify the decompression uplo, it is always :L by design, we don't have issue here.

The one in the result always takes precedence.
Note that it is not exposed to the users for star and acyclic coloring with main function coloring.

@gdalle

gdalle commented Jan 29, 2026

Copy link
Copy Markdown
Member

I took a second look and the semantics of this are a bit confusing to me. From what I understand:

  • If you create the result with decompression_uplo = :L, you allow yourself to optimise the construction because you know that it will be used only inside bicoloring, and only with uplo = decompression_uplo = :L
  • But if you create the result with decompression_uplo = :F, then you must still account for the possibility that uplo != decompression_uplo?

@amontoison

amontoison commented Jan 29, 2026

Copy link
Copy Markdown
Collaborator Author

I took a second look and the semantics of this are a bit confusing to me. From what I understand:

* If you create the result with `decompression_uplo = :L`, you allow yourself to optimise the construction because you _know_ that it will be used only inside bicoloring, and only with `uplo = decompression_uplo = :L`

You are right!

* But if you create the result with `decompression_uplo = :F`, then you must still account for the possibility that `uplo != decompression_uplo`?

Yes, because the option decompression_uplo is not yet exposed for the users and I don't want to do breaking changes.
I want to only support uplo == decompression_uplo in the long run but we need to have a discussion together before such that we know where we are going in terms of API.
We don't need anymore the uplo argument for the decompression if we do that.

Comment thread src/decompression.jl
nzA = nonzeros(A)
check_compatible_pattern(A, ag, uplo)
if uplo == :F
if result.decompression_uplo == uplo

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this case not considered for the TreeSetColoringResult below?

@amontoison amontoison Sep 7, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because we only gain on the storage when the decompression is by substitution.
The code for the decompression itself is not impacted.

However, I forgot to add an assertion.
I fixed it in my last commit such that:

function decompress!(
    A::SparseMatrixCSC{R},
    B::AbstractMatrix{R},
    result::TreeSetColoringResult,
    uplo::Symbol=:F,
) where {R<:Real}
    check_compatible_pattern(A, result.ag, uplo)
    @assert result.decompression_uplo == uplo || result.decompression_uplo == :F
    decompress_csc!(nonzeros(A), A.colptr, B, result, uplo)
    return A
end

@amontoison
amontoison force-pushed the am/decompression_uplo branch from a55cce6 to c72b0c8 Compare September 7, 2026 20:37
@codecov

codecov Bot commented Sep 7, 2026

Copy link
Copy Markdown

Codecov Report

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

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #294   +/-   ##
=======================================
  Coverage   99.17%   99.18%           
=======================================
  Files          22       22           
  Lines        2304     2325   +21     
=======================================
+ Hits         2285     2306   +21     
  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.

@amontoison
amontoison requested a review from gdalle September 7, 2026 20:46
@amontoison

Copy link
Copy Markdown
Collaborator Author

I propose to merge first the support of AMD GPUs (#274).
A minor modification is needed for the extensions and I would to do it for both backends in the same PR.

@amontoison
amontoison force-pushed the am/decompression_uplo branch from c72b0c8 to dd445bd Compare September 9, 2026 03:58
amontoison added a commit that referenced this pull request Sep 19, 2026
`ColoringProblem` gains a third type parameter `uplo`, so the triangle to
recover is chosen once, up front, and propagates all the way to decompression.
This answers the review question on #294: the trailing `uplo` argument of
`decompress!` / `decompress_single_color!` is gone, so a result and a call site
can no longer disagree about which triangle is meant.

- `ColoringProblem{structure,partition,uplo}`, with `uplo` defaulting to `:F`.
  `ColoringProblem{structure,partition}()` still works, via an outer
  constructor on the partially applied UnionAll.
- `uplo != :F` is rejected for non-symmetric problems: `ColumnColoringResult`
  and `RowColoringResult` have no triangle logic, so the option would be
  silently dropped. The `:L` used internally by bicoloring is unaffected, it is
  passed explicitly to the inner symmetric result.
- `compressed_indices` only holds the requested triangle, so the star-coloring
  decompression kernels now walk it with a running counter instead of indexing
  it by position in the full pattern. In the single-color triangle fallback the
  hub is not necessarily the current column, so the spoke is decoded from the
  stored value rather than assumed.
- Out-of-place `decompress` allocates a target with the right triangular
  pattern for symmetric results.
- GPU extensions reject `uplo != :F` at coloring time (a real error rather than
  an `@assert`, since it is now user-reachable) instead of at decompression.

Breaking, hence 0.4.28 -> 0.5.0. Migration:
`decompress!(A, B, result, :U)` becomes
`result_U = coloring(S, ColoringProblem(; structure=:symmetric, uplo=:U), algo)`
followed by `decompress!(A, B, result_U)`. One result now yields exactly one
triangle, so build one result per triangle if you need several.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@amontoison
amontoison force-pushed the am/decompression_uplo branch from 28cbae0 to 026b715 Compare September 20, 2026 04:08

This branch has not been deployed

No deployments
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