Skip to content

Add support for aggregation in the creation of sparse matrices - #5527

Merged
benharsh merged 17 commits into
Bears-R-Us:mainfrom
benharsh:agg_sparse_matrix_creation
Sep 2, 2026
Merged

Add support for aggregation in the creation of sparse matrices#5527
benharsh merged 17 commits into
Bears-R-Us:mainfrom
benharsh:agg_sparse_matrix_creation

Conversation

@benharsh

@benharsh benharsh commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator

This PR adds the ability to use an aggregator when creating a sparse matrix. This CustomCopyAggregation works similarly to other aggregators, and accepts a 3-tuple of the indices and corresponding value. These 3-tuples are then flushed by utilizing the pre-existing SparseIndexBuffer, which adds indices in bulk. This work is almost entirely from the initial effort of @alvaradoo , with only a few minor performance tweaks and a bug fix by myself.

A new config param, aggregatedSparseMatrixCreation, has been added to toggle this functionality.

This PR also adds a to_scipy_sparse method to sparse matrices, to help support correctness tests.

A new benchmark for sparse matrix performance is also added to measure both multiplication time and matrix-creation time.

Other notes:

  • fixes a minor bug in the message creation for to_pdarrays

[reviewed-by @jabraham17]

alvaradoo and others added 9 commits August 19, 2026 17:03
Signed-off-by: Oliver Alvarado Rodriguez <oliver.alvarado-rodriguez@hpe.com>
Signed-off-by: Oliver Alvarado Rodriguez <oliver.alvarado-rodriguez@hpe.com>
Signed-off-by: Oliver Alvarado Rodriguez <oliver.alvarado-rodriguez@hpe.com>
Also, no need to use += when the summation already occurred.

Fixes a bug with the custom copy aggregation code where we need to be
locking the domain while we're inserting values. Otherwise, 'find' will
return bogus indices to insert the data.

Finally, perform some cleanup of the original effort.
My initial attempt at using '_value' ran into an issue in
PrivateDist's implementation, where it would assume that when dsiAccess
was called that 'this.locale == here'. When 'flush' was initiated from a
locale other than Locale0, it would grab the wrong lock, and a data race
would ensue.

Some kind of locale-private variable that could be declared over an
array of locales would be useful here.
@benharsh
benharsh requested a review from jabraham17 August 31, 2026 19:22
Comment thread benchmarks/graph_infra/arkouda.graph Outdated
Comment thread src/SparseMatrix.chpl Outdated
Comment thread src/SparseMatrix.chpl
@benharsh
benharsh added this pull request to the merge queue Sep 2, 2026
Merged via the queue into Bears-R-Us:main with commit a03bd75 Sep 2, 2026
23 checks passed
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.

3 participants