Skip to content

Implement RowMaximum Pivoting Strategy for Distributed LU Factorization #628

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 12 commits into from

Conversation

AkhilAkkapelli
Copy link
Contributor

  • Implemented RowMaximum Pivoting: Added a new LU factorization strategy using the RowMaximum pivoting method for distributed matrices
  • Custom Pivot Search and Swapping: Introduced helper functions for searching row maxima, updating pivot indices, and swapping rows in both panel and trailing submatrices
  • Blockwise Distributed Algorithm: Ensured compatibility with block-partitioned distributed matrices, supporting only equal block sizes for now
  • Non-breaking Addition: Existing NoPivot LU functionality remains unchanged; RowMaximum is an additional strategy selectable via the LinearAlgebra interface.

…er.jl's @Spawn macro

- Enhanced the Thunk struct to include compute_scope and result_scope for better task execution control.
- Updated the Thunk constructor to accept new scope parameters.
- Modified the spawn function to handle the new scope parameters appropriately.
- Introduced a new test suite for task affinity, covering various scenarios with scope interactions.
- Added comprehensive documentation for task affinity, detailing the usage of scope, compute_scope, and result_scope.
- Implemented tests to validate behavior when using chunks as inputs in tasks, ensuring correct scope handling.
- Updated Distribute struct to include a processor grid for better control over data distribution.
- Modified constructors for Distribute to accept processor grid as an optional parameter.
- Enhanced distribute functions to support various assignment strategies: :arbitrary, :blockrow, :blockcol, :cyclicrow, and :cycliccol.
- Added tests for new assignment strategies, ensuring correct processor allocation and chunking for DArray, DVector, and DMatrix.
- Improved test coverage for both auto and explicit block distributions with processor assignments.
- Updated documentation for the `@spawn` macro to clarify the usage of `scope`, `compute_scope`, and `result_scope`, including examples with the new syntax.
- Improved error messages in the scheduling logic to provide clearer feedback when scopes are incompatible.
- Refactored test cases for task affinity to ensure they align with the new scope handling and provide better coverage for edge cases.
- Removed deprecated comments and cleaned up the code for better readability.
…ay functions -- rand, randn, sprand, ones, zeros

- Updated AllocateArray struct to include a processor grid for better control over data distribution.
- Added Documentation for new feature
- Modified functions for AllocateArray to accept assignment as an optional argument.
- Added tests for new assignment functions, ensuring correct processor allocation and chunking for functions.
- Improved test coverage for both auto and explicit block distributions with processor assignments.
…andn, sprand, ones, and zeros functions to improve clarity and consistency
@AkhilAkkapelli
Copy link
Contributor Author

AkhilAkkapelli commented Jul 7, 2025

TODO: Tests and Benchmarking

  • Tests and Comparison with LA RowMaximum
  • Benchmarking Results

@AkhilAkkapelli AkhilAkkapelli deleted the lu-rowpiv branch July 8, 2025 15:32
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.

1 participant