jaxmg.lu_solve¤
lu_solve is the high-level solver for general nonsingular matrices. It uses
cuSOLVERMp Getrf followed by Getrs, including distributed pivot storage and
the same fused memory-distribution path used by potrs.
Use lu_solve_shardmap_ctx when the solve is part of a larger caller-owned
jax.jit computation.
jaxmg.lu_solve(a, b, T_A, mesh=None, matrix_specs=None, *, in_specs=None, return_status=False, pad=True)
¤
Solve the linear system A x = B using the multi-GPU LU native kernel.
This is the high-level JAXMg general linear-solve entry point. It prepares
a block-sharded JAX array for cuSOLVERMp, calls the fused native backend,
and returns the solution in the same JAX-facing layout as b.
Note
If a local shard dimension is not divisible by T_A, pad=True
allocates additional tile-aligned capacity before the native call.
Choosing a tile size that divides the local dimensions avoids this
allocation. Performance depends on the matrix size, process grid, and
tile size.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
a
|
Array
|
2D, nonsingular input matrix. Expected to be sharded
across a 2D mesh with a matrix |
required |
b
|
Array
|
1D or 2D solve input. A vector is treated as an
|
required |
T_A
|
int
|
Square tile width used by cuSOLVERMp. Each local shard
dimension must be a multiple of |
required |
mesh
|
Mesh
|
JAX mesh used for |
None
|
matrix_specs
|
PartitionSpec or tuple / list[PartitionSpec]
|
PartitionSpec describing the matrix sharding. If omitted, inferred
from |
None
|
in_specs
|
P | Tuple[P] | List[P] | None
|
Backwards-compatible alias for |
None
|
return_status
|
bool
|
If True return |
False
|
pad
|
bool
|
If True (default) apply per-device padding so
each local shard length is compatible with |
True
|
Returns:
| Type | Description |
|---|---|
Union[Array, Tuple[Array, Array]]
|
Array or (Array, Array): The solution |
Raises:
| Type | Description |
|---|---|
TypeError
|
If dtypes or |
ValueError
|
If shapes, tile sizes, or mesh layouts are incompatible. |
Notes
- The FFI call may donate the
aandbbuffers for zero-copy interaction with the native library. - Native code converts row-major JAX local storage to cuSOLVERMp's
column-major local layout, redistributes to 2D block-cyclic layout,
calls
cusolverMpGetrf/cusolverMpGetrs, and redistributes the result back. - If the native solver fails the returned solution may contain NaNs
and
statuswill be non-zero.
jaxmg.lu_solve_shardmap_ctx(a, b, T_A, mesh=None, matrix_specs=None, *, in_specs=None, pad=True)
¤
Solve A x = B while exposing the donated matrix work buffer.
This helper is the lower-level variant of :func:jaxmg.lu_solve intended
for contexts where the caller wants to control the outer jax.jit
boundary. It performs the same validation, local padding, shard-map
construction, and fused cuSOLVERMp FFI call as the public solver, but it
does not wrap the pipeline in an internal jax.jit. Instead, it returns
the native matrix work buffer alongside the solution so an outer JIT can
donate a into an A-sized output.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
a
|
Array
|
2D, nonsingular input matrix. Expected to be sharded
across a 2D mesh with a matrix |
required |
b
|
Array
|
1D or 2D solve input. A vector is treated as an
|
required |
T_A
|
int
|
Square tile width used by cuSOLVERMp. |
required |
mesh
|
Mesh
|
JAX mesh used for |
None
|
matrix_specs
|
PartitionSpec or tuple / list[PartitionSpec]
|
PartitionSpec describing the matrix sharding. If omitted, inferred
from |
None
|
in_specs
|
P | Tuple[P] | List[P] | None
|
Backwards-compatible alias for |
None
|
pad
|
bool
|
If True (default) apply per-device padding so
each local shard length is compatible with |
True
|
Returns:
| Name | Type | Description |
|---|---|---|
tuple |
Array
|
|
Array
|
work buffer returned by the native FFI call, |
|
Array
|
the same JAX-facing layout as |
|
Tuple[Array, Array, Array]
|
per-rank diagnostic vector. |