Skip to content

Store graph in result to allow generic matrices#133

Merged
amontoison merged 4 commits intomainfrom
gd/better_result
Oct 2, 2024
Merged

Store graph in result to allow generic matrices#133
amontoison merged 4 commits intomainfrom
gd/better_result

Conversation

@gdalle
Copy link
Copy Markdown
Member

@gdalle gdalle commented Oct 2, 2024

Fix #126, fix #131

Before this PR, the result type would always store a SparseMatrixCSC and forget the initial matrix A. Now it stores both the initial matrix A and the AdjacencyGraph or BipartiteGraph used for coloring, which contains the sparse conversion. This has two main advantages:

  • To prepare for row decompression we do not need to recompute a transpose, it is already done in the BipartiteGraph
  • When decompressing out-of-place, we can instantiate similar(A) instead of similar(S), which makes more sense and paves the way for structured matrices

I also remove some eltype constraints on A and B which were not necessary. For instance, if eltype(B) == Float32 and eltype(A) == Float64, we can decompress from B to A without issue.

@codecov
Copy link
Copy Markdown

codecov bot commented Oct 2, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 100.00%. Comparing base (a03a455) to head (8c073ee).
Report is 4 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #133   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           11        11           
  Lines          851       870   +19     
=========================================
+ Hits           851       870   +19     

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

@gdalle gdalle requested a review from amontoison October 2, 2024 08:49
@gdalle gdalle added the benchmark Run benchmarks on PR label Oct 2, 2024
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Oct 2, 2024

Benchmark Results

main 12dcf60... main/12dcf60e027c12...
coloring/nonsymmetric/column/direct/n=1000/p=0.002 0.0861 ± 0.004 ms 0.0858 ± 0.0041 ms 1
coloring/nonsymmetric/column/direct/n=1000/p=0.005 0.187 ± 0.0075 ms 0.189 ± 0.008 ms 0.991
coloring/nonsymmetric/column/direct/n=1000/p=0.01 0.391 ± 0.013 ms 0.396 ± 0.013 ms 0.987
coloring/nonsymmetric/column/direct/n=100000/p=0.0001 0.068 ± 0.0053 s 0.0751 ± 0.0023 s 0.905
coloring/nonsymmetric/column/direct/n=100000/p=2.0e-5 12.4 ± 0.3 ms 13.5 ± 0.47 ms 0.916
coloring/nonsymmetric/column/direct/n=100000/p=5.0e-5 29.7 ± 1.1 ms 0.0328 ± 0.00089 s 0.905
coloring/nonsymmetric/row/direct/n=1000/p=0.002 0.102 ± 0.0047 ms 0.0883 ± 0.0042 ms 1.15
coloring/nonsymmetric/row/direct/n=1000/p=0.005 0.213 ± 0.0085 ms 0.192 ± 0.0078 ms 1.11
coloring/nonsymmetric/row/direct/n=1000/p=0.01 0.44 ± 0.015 ms 0.401 ± 0.014 ms 1.1
coloring/nonsymmetric/row/direct/n=100000/p=0.0001 0.075 ± 0.004 s 0.076 ± 0.002 s 0.986
coloring/nonsymmetric/row/direct/n=100000/p=2.0e-5 14.9 ± 0.39 ms 13.7 ± 0.45 ms 1.09
coloring/nonsymmetric/row/direct/n=100000/p=5.0e-5 0.0346 ± 0.00096 s 0.033 ± 0.00055 s 1.05
coloring/symmetric/column/direct/n=1000/p=0.002 0.271 ± 0.015 ms 0.272 ± 0.015 ms 0.996
coloring/symmetric/column/direct/n=1000/p=0.005 0.734 ± 0.028 ms 0.733 ± 0.028 ms 1
coloring/symmetric/column/direct/n=1000/p=0.01 1.77 ± 0.053 ms 1.79 ± 0.056 ms 0.988
coloring/symmetric/column/direct/n=100000/p=0.0001 0.471 ± 0.019 s 0.397 ± 0.012 s 1.19
coloring/symmetric/column/direct/n=100000/p=2.0e-5 0.0365 ± 0.0023 s 0.0369 ± 0.0008 s 0.991
coloring/symmetric/column/direct/n=100000/p=5.0e-5 0.127 ± 0.0069 s 0.123 ± 0.0042 s 1.03
coloring/symmetric/column/substitution/n=1000/p=0.002 0.609 ± 0.031 ms 0.613 ± 0.03 ms 0.994
coloring/symmetric/column/substitution/n=1000/p=0.005 1.61 ± 0.062 ms 1.61 ± 0.059 ms 1
coloring/symmetric/column/substitution/n=1000/p=0.01 3.41 ± 0.096 ms 3.46 ± 0.1 ms 0.985
coloring/symmetric/column/substitution/n=100000/p=0.0001 0.758 ± 0.017 s 0.817 ± 0.047 s 0.927
coloring/symmetric/column/substitution/n=100000/p=2.0e-5 0.0957 ± 0.01 s 0.102 ± 0.017 s 0.94
coloring/symmetric/column/substitution/n=100000/p=5.0e-5 0.292 ± 0.019 s 0.338 ± 0.037 s 0.865
decompress/nonsymmetric/column/direct/n=1000/p=0.002 3.94 ± 0.25 μs 4.68 ± 0.31 μs 0.842
decompress/nonsymmetric/column/direct/n=1000/p=0.005 8.35 ± 0.67 μs 9.88 ± 0.87 μs 0.845
decompress/nonsymmetric/column/direct/n=1000/p=0.01 26.7 ± 5.9 μs 21.1 ± 6.9 μs 1.26
decompress/nonsymmetric/column/direct/n=100000/p=0.0001 5.4 ± 0.36 ms 5.79 ± 0.51 ms 0.933
decompress/nonsymmetric/column/direct/n=100000/p=2.0e-5 1.09 ± 0.19 ms 1.15 ± 0.15 ms 0.953
decompress/nonsymmetric/column/direct/n=100000/p=5.0e-5 2.72 ± 0.27 ms 2.79 ± 0.29 ms 0.973
decompress/nonsymmetric/row/direct/n=1000/p=0.002 4.08 ± 0.28 μs 4.86 ± 0.4 μs 0.84
decompress/nonsymmetric/row/direct/n=1000/p=0.005 7.68 ± 0.45 μs 9.21 ± 0.55 μs 0.834
decompress/nonsymmetric/row/direct/n=1000/p=0.01 14.8 ± 0.95 μs 17.5 ± 1.5 μs 0.849
decompress/nonsymmetric/row/direct/n=100000/p=0.0001 2.15 ± 1.4 ms 2.09 ± 0.17 ms 1.03
decompress/nonsymmetric/row/direct/n=100000/p=2.0e-5 0.385 ± 0.044 ms 0.434 ± 0.074 ms 0.887
decompress/nonsymmetric/row/direct/n=100000/p=5.0e-5 0.922 ± 0.11 ms 1.03 ± 0.18 ms 0.897
decompress/symmetric/column/direct/n=1000/p=0.002 3.74 ± 0.24 μs 4.75 ± 0.42 μs 0.788
decompress/symmetric/column/direct/n=1000/p=0.005 7.35 ± 0.42 μs 9.19 ± 0.62 μs 0.8
decompress/symmetric/column/direct/n=1000/p=0.01 15.3 ± 0.96 μs 18.5 ± 1.5 μs 0.83
decompress/symmetric/column/direct/n=100000/p=0.0001 4.37 ± 0.17 ms 4.67 ± 0.37 ms 0.937
decompress/symmetric/column/direct/n=100000/p=2.0e-5 0.847 ± 0.1 ms 0.926 ± 0.13 ms 0.915
decompress/symmetric/column/direct/n=100000/p=5.0e-5 2.1 ± 0.22 ms 2.33 ± 0.67 ms 0.905
decompress/symmetric/column/substitution/n=1000/p=0.002 0.0644 ± 0.0043 ms 0.065 ± 0.0041 ms 0.991
decompress/symmetric/column/substitution/n=1000/p=0.005 0.159 ± 0.0077 ms 0.161 ± 0.0074 ms 0.983
decompress/symmetric/column/substitution/n=1000/p=0.01 0.338 ± 0.014 ms 0.346 ± 0.014 ms 0.976
decompress/symmetric/column/substitution/n=100000/p=0.0001 0.0597 ± 0.0029 s 0.0675 ± 0.0044 s 0.885
decompress/symmetric/column/substitution/n=100000/p=2.0e-5 12.3 ± 0.38 ms 12.7 ± 0.39 ms 0.966
decompress/symmetric/column/substitution/n=100000/p=5.0e-5 28.4 ± 0.74 ms 30.6 ± 0.74 ms 0.928
time_to_load 0.218 ± 0.0025 s 0.218 ± 0.0008 s 1

@gdalle gdalle removed the benchmark Run benchmarks on PR label Oct 2, 2024
@amontoison
Copy link
Copy Markdown
Collaborator

Except two small comments, it's LGTM.

@gdalle
Copy link
Copy Markdown
Member Author

gdalle commented Oct 2, 2024

I think both those comments are resolved?

@amontoison
Copy link
Copy Markdown
Collaborator

I think both those comments are resolved?

Tu peux merge si tu veux après

@amontoison amontoison merged commit b5d70bd into main Oct 2, 2024
@amontoison amontoison deleted the gd/better_result branch October 2, 2024 16:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Avoid forcing eltype equality between A and B in decompress! Store graph object in coloring result

2 participants