jaxmg.potrs¤
potrs is the high-level solver for symmetric or Hermitian positive-definite
matrices. It uses cuSOLVERMp Potrf followed by Potrs, with memory-layout
conversion, redistribution, and solver execution in one fused native call.
Use potrs_jit_ctx when the solve is part of a larger caller-owned
jax.jit computation. Inside an existing jax.shard_map, use
potrs_shardmap_ctx with local matrix and RHS blocks instead. Both use the
same distributed solver.
Context API migration
The previous global-array potrs_shardmap_ctx is now named
potrs_jit_ctx, with the same arguments and outputs.
All three interfaces accept return_logdet=True. Since the factorization
produces \(A=LL^H\), the backend computes
directly from the distributed Cholesky factor.
jaxmg.potrs(a, b, T_A, mesh=None, matrix_specs=None, *, in_specs=None, return_status=False, return_logdet=False, pad=True, donate=True)
¤
Solve the linear system A x = B using the multi-GPU potrs native kernel.
This is the high-level JAXMg Cholesky-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, symmetric positive-definite input matrix sharded over a
one- or two-axis device mesh, for example with
|
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 or AbstractMesh
|
JAX mesh used for |
None
|
matrix_specs
|
PartitionSpec or tuple / list[PartitionSpec]
|
PartitionSpec describing the matrix sharding. If omitted, read
off the sharding of |
None
|
in_specs
|
P | Tuple[P] | List[P] | None
|
Backwards-compatible alias for |
None
|
return_status
|
bool
|
If True return |
False
|
return_logdet
|
bool
|
If True also return |
False
|
pad
|
bool
|
If True (default) apply per-device padding so
each local shard length is compatible with |
True
|
donate
|
bool
|
If True (default) the input buffers may be donated to the native call for zero-copy execution, which means they are deleted and cannot be used again. Pass False to preserve them, at the cost of keeping the original and working buffers in memory simultaneously. |
True
|
Returns:
| Type | Description |
|---|---|
Union[Array, Tuple[Array, Array], Tuple[Array, Array, Array]]
|
One of |
Union[Array, Tuple[Array, Array], Tuple[Array, Array, Array]]
|
|
Union[Array, Tuple[Array, Array], Tuple[Array, Array, Array]]
|
|
Raises:
| Type | Description |
|---|---|
TypeError
|
If dtypes or |
ValueError
|
If shapes, tile sizes, or mesh layouts are incompatible. |
Notes
- Unless
donate=False, theaandbbuffers are donated for zero-copy interaction with the native library, so they are deleted and cannot be used after the call. - Native code converts row-major JAX local storage to cuSOLVERMp's
column-major local layout, redistributes to 2D block-cyclic layout,
calls
cusolverMpPotrf/cusolverMpPotrs, and redistributes the result back. - If the native solver fails, the solution and
logdetare filled with NaN andstatusis non-zero.
jaxmg.potrs_jit_ctx(a, b, T_A, mesh=None, matrix_specs=None, *, in_specs=None, return_logdet=False, pad=True, _prepared=None)
¤
Solve A x = B on global arrays inside a caller-owned jax.jit.
This helper is the lower-level variant of :func:jaxmg.potrs intended for
contexts where the caller wants to control the outer jax.jit boundary.
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, symmetric positive-definite input matrix sharded over a
one- or two-axis device mesh, for example with
|
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 or AbstractMesh
|
JAX mesh used for |
None
|
matrix_specs
|
PartitionSpec or tuple / list[PartitionSpec]
|
PartitionSpec describing the matrix sharding. If omitted, read
off the sharding of |
None
|
in_specs
|
P | Tuple[P] | List[P] | None
|
Backwards-compatible alias for |
None
|
return_logdet
|
bool
|
If True return the replicated Cholesky log determinant between the solution and status outputs. Default is False. |
False
|
pad
|
bool
|
If True (default) apply per-device padding so
each local shard length is compatible with |
True
|
Returns:
| Name | Type | Description |
|---|---|---|
tuple |
Union[Tuple[Array, Array, Array], Tuple[Array, Array, Array, Array]]
|
|
Union[Tuple[Array, Array, Array], Tuple[Array, Array, Array, Array]]
|
|
|
Union[Tuple[Array, Array, Array], Tuple[Array, Array, Array, Array]]
|
buffer required for donation, |
|
Union[Tuple[Array, Array, Array], Tuple[Array, Array, Array, Array]]
|
|
Raises:
| Type | Description |
|---|---|
TypeError
|
If dtypes or |
ValueError
|
If shapes, tile sizes, or mesh layouts are incompatible. |
Notes
- This function intentionally returns
a_work. Public :func:potrsdiscards that buffer for convenience, but an outerjax.jit(..., donate_argnums=(0, 1))can only donateaif anA-sized output is returned. Callers that want donation must keepa_workin the jitted function's returned pytree. - Native code converts row-major JAX local storage to cuSOLVERMp's
column-major local layout, redistributes to 2D block-cyclic layout,
calls
cusolverMpPotrf/cusolverMpPotrs, and redistributes the result back.
jaxmg.potrs_shardmap_ctx(a, b, T_A, matrix_specs=None, *, in_specs=None, return_logdet=False, pad=True, _nrhs=None)
¤
Solve A x = B on local blocks inside a caller's jax.shard_map.
Use this interface when a distributed solve forms part of a larger
shard-local calculation. The enclosing mesh must contain exactly the
matrix axes. A follows matrix_specs; B must share its row sharding,
but may be distributed or replicated over the process-column axis.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
a
|
Array
|
Local block of a 2D, symmetric positive-definite matrix. |
required |
b
|
Array
|
Local block of the solve input, sharded like |
required |
T_A
|
int
|
Square tile width used by cuSOLVERMp. Each local shard
dimension must be a multiple of |
required |
matrix_specs
|
PartitionSpec or tuple / list[PartitionSpec]
|
PartitionSpec of |
None
|
in_specs
|
P | Tuple[P] | List[P] | None
|
Backwards-compatible alias for |
None
|
return_logdet
|
bool
|
If True return the replicated Cholesky log determinant between the solution and status outputs. Default is False. |
False
|
pad
|
bool
|
If True (default) pad each local block so its
dimensions are compatible with |
True
|
Returns:
| Name | Type | Description |
|---|---|---|
tuple |
Union[Tuple[Array, Array, Array], Tuple[Array, Array, Array, Array]]
|
|
Union[Tuple[Array, Array, Array], Tuple[Array, Array, Array, Array]]
|
|
|
Union[Tuple[Array, Array, Array], Tuple[Array, Array, Array, Array]]
|
donation, |
|
Union[Tuple[Array, Array, Array], Tuple[Array, Array, Array, Array]]
|
scalar that is identical on every rank, and |
|
Union[Tuple[Array, Array, Array], Tuple[Array, Array, Array, Array]]
|
native diagnostic vector. |
Raises:
| Type | Description |
|---|---|
TypeError
|
If dtypes or |
ValueError
|
If called outside |
Notes
- When B is replicated over process columns, its copies are solved as duplicate right-hand sides using one distributed factorization.
- Return
a_workfrom the outer jitted function when donating A; it provides the corresponding matrix-sized output buffer.