Skip to content

Avoid allocation when creating adjacency graph#104

Merged
gdalle merged 2 commits intomainfrom
gd/diagonal
Sep 20, 2024
Merged

Avoid allocation when creating adjacency graph#104
gdalle merged 2 commits intomainfrom
gd/diagonal

Conversation

@gdalle
Copy link
Copy Markdown
Member

@gdalle gdalle commented Sep 20, 2024

Warning

Benchmark before merging.

  • Add a type parameter loops::Bool to the private struct Graph that decides whether coefficients (i, i) present in the matrix should be included as edges in the graph.
  • Adjust neighbors, degree, nnz accordingly. In particular, neighbors uses Iterators.filter, which slows it down by an unknown amount.
  • Make bipartite_graph create two Graph{true} and adjacency_graph create a Graph{false}.
  • Force star_coloring and acyclic_coloring to only work on Graph{false} (no loops).
  • Add some tests.

@codecov
Copy link
Copy Markdown

codecov Bot commented Sep 20, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 100.00%. Comparing base (123889f) to head (b0a59e4).
Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #104   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           10        10           
  Lines          732       755   +23     
=========================================
+ Hits           732       755   +23     

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

@gdalle gdalle linked an issue Sep 20, 2024 that may be closed by this pull request
@gdalle gdalle requested a review from amontoison September 20, 2024 11:15
@gdalle gdalle added the benchmark Run benchmarks on PR label Sep 20, 2024
@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

main b0a59e4... main/b0a59e45e3a876...
coloring/nonsymmetric/column/direct/n=1000/p=0.002 0.0992 ± 0.0048 ms 0.0984 ± 0.0049 ms 1.01
coloring/nonsymmetric/column/direct/n=1000/p=0.005 0.211 ± 0.0084 ms 0.21 ± 0.0084 ms 1.01
coloring/nonsymmetric/column/direct/n=1000/p=0.01 0.438 ± 0.015 ms 0.435 ± 0.015 ms 1.01
coloring/nonsymmetric/column/direct/n=100000/p=0.0001 0.0778 ± 0.0019 s 0.0748 ± 0.0038 s 1.04
coloring/nonsymmetric/column/direct/n=100000/p=2.0e-5 14.8 ± 0.33 ms 14.5 ± 0.66 ms 1.02
coloring/nonsymmetric/column/direct/n=100000/p=5.0e-5 0.0348 ± 0.00068 s 0.0338 ± 0.0013 s 1.03
coloring/nonsymmetric/row/direct/n=1000/p=0.002 0.112 ± 0.0054 ms 0.112 ± 0.0055 ms 1
coloring/nonsymmetric/row/direct/n=1000/p=0.005 0.236 ± 0.0095 ms 0.235 ± 0.0095 ms 1
coloring/nonsymmetric/row/direct/n=1000/p=0.01 0.482 ± 0.016 ms 0.48 ± 0.017 ms 1
coloring/nonsymmetric/row/direct/n=100000/p=0.0001 0.0893 ± 0.003 s 0.0835 ± 0.0043 s 1.07
coloring/nonsymmetric/row/direct/n=100000/p=2.0e-5 17.2 ± 0.39 ms 16.9 ± 0.4 ms 1.02
coloring/nonsymmetric/row/direct/n=100000/p=5.0e-5 0.0398 ± 0.00079 s 0.0385 ± 0.0012 s 1.03
coloring/symmetric/column/direct/n=1000/p=0.002 0.308 ± 0.015 ms 0.278 ± 0.015 ms 1.11
coloring/symmetric/column/direct/n=1000/p=0.005 0.768 ± 0.027 ms 0.746 ± 0.028 ms 1.03
coloring/symmetric/column/direct/n=1000/p=0.01 1.78 ± 0.053 ms 1.81 ± 0.059 ms 0.981
coloring/symmetric/column/direct/n=100000/p=0.0001 0.407 ± 0.073 s 0.378 ± 0.052 s 1.08
coloring/symmetric/column/direct/n=100000/p=2.0e-5 0.0409 ± 0.0017 s 0.038 ± 0.0011 s 1.07
coloring/symmetric/column/direct/n=100000/p=5.0e-5 0.131 ± 0.0056 s 0.125 ± 0.0056 s 1.04
coloring/symmetric/column/substitution/n=1000/p=0.002 0.631 ± 0.031 ms 0.619 ± 0.03 ms 1.02
coloring/symmetric/column/substitution/n=1000/p=0.005 1.61 ± 0.057 ms 1.61 ± 0.06 ms 1
coloring/symmetric/column/substitution/n=1000/p=0.01 3.44 ± 0.095 ms 3.46 ± 0.099 ms 0.995
coloring/symmetric/column/substitution/n=100000/p=0.0001 0.71 ± 0.023 s 0.75 ± 0.045 s 0.947
coloring/symmetric/column/substitution/n=100000/p=2.0e-5 0.0973 ± 0.012 s 0.0948 ± 0.0063 s 1.03
coloring/symmetric/column/substitution/n=100000/p=5.0e-5 0.305 ± 0.029 s 0.295 ± 0.022 s 1.03
decompress/nonsymmetric/column/direct/n=1000/p=0.002 4.42 ± 0.33 μs 4.29 ± 0.31 μs 1.03
decompress/nonsymmetric/column/direct/n=1000/p=0.005 9.23 ± 0.52 μs 8.97 ± 0.71 μs 1.03
decompress/nonsymmetric/column/direct/n=1000/p=0.01 20.9 ± 1.3 μs 19.6 ± 1.6 μs 1.06
decompress/nonsymmetric/column/direct/n=100000/p=0.0001 5.18 ± 0.5 ms 5.29 ± 0.46 ms 0.979
decompress/nonsymmetric/column/direct/n=100000/p=2.0e-5 1.08 ± 0.11 ms 1.08 ± 0.094 ms 1
decompress/nonsymmetric/column/direct/n=100000/p=5.0e-5 2.66 ± 0.23 ms 2.57 ± 0.22 ms 1.04
decompress/nonsymmetric/row/direct/n=1000/p=0.002 4.38 ± 0.34 μs 4.29 ± 0.38 μs 1.02
decompress/nonsymmetric/row/direct/n=1000/p=0.005 8.34 ± 0.57 μs 8.48 ± 0.72 μs 0.983
decompress/nonsymmetric/row/direct/n=1000/p=0.01 17.4 ± 1.5 μs 16.6 ± 1.5 μs 1.05
decompress/nonsymmetric/row/direct/n=100000/p=0.0001 2.14 ± 0.92 ms 2.3 ± 0.99 ms 0.929
decompress/nonsymmetric/row/direct/n=100000/p=2.0e-5 0.467 ± 0.11 ms 0.46 ± 0.054 ms 1.01
decompress/nonsymmetric/row/direct/n=100000/p=5.0e-5 1.08 ± 0.33 ms 1.02 ± 0.053 ms 1.06
decompress/symmetric/column/direct/n=1000/p=0.002 4.52 ± 0.36 μs 4.34 ± 0.34 μs 1.04
decompress/symmetric/column/direct/n=1000/p=0.005 9 ± 0.49 μs 8.86 ± 0.46 μs 1.02
decompress/symmetric/column/direct/n=1000/p=0.01 18.8 ± 1.2 μs 18.6 ± 1.1 μs 1.01
decompress/symmetric/column/direct/n=100000/p=0.0001 4.81 ± 1.3 ms 4.76 ± 0.18 ms 1.01
decompress/symmetric/column/direct/n=100000/p=2.0e-5 1.01 ± 0.2 ms 0.953 ± 0.068 ms 1.06
decompress/symmetric/column/direct/n=100000/p=5.0e-5 2.37 ± 0.13 ms 2.37 ± 0.17 ms 1
decompress/symmetric/column/substitution/n=1000/p=0.002 0.0639 ± 0.0035 ms 0.0635 ± 0.0035 ms 1.01
decompress/symmetric/column/substitution/n=1000/p=0.005 0.16 ± 0.0072 ms 0.159 ± 0.0069 ms 1.01
decompress/symmetric/column/substitution/n=1000/p=0.01 0.345 ± 0.014 ms 0.34 ± 0.014 ms 1.01
decompress/symmetric/column/substitution/n=100000/p=0.0001 0.0651 ± 0.003 s 0.0628 ± 0.0045 s 1.04
decompress/symmetric/column/substitution/n=100000/p=2.0e-5 13 ± 0.38 ms 12.7 ± 0.35 ms 1.03
decompress/symmetric/column/substitution/n=100000/p=5.0e-5 0.0317 ± 0.0014 s 29.9 ± 1.1 ms 1.06
time_to_load 0.216 ± 0.00032 s 0.217 ± 0.0014 s 0.996

@gdalle gdalle merged commit 1bbe0a5 into main Sep 20, 2024
@gdalle gdalle deleted the gd/diagonal branch September 20, 2024 19:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

benchmark Run benchmarks on PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Avoid unnecessary matrix allocations

1 participant