PaStiX Handbook  6.3.2

Modules

 Internal functions for numerical factorization kernels
 

PastixComplex32 cblk-BLAS CPU kernels

int cpucblk_cgeaddsp1d (const SolverCblk *cblk1, SolverCblk *cblk2, const pastix_complex32_t *L1, pastix_complex32_t *L2, const pastix_complex32_t *U1, pastix_complex32_t *U2)
 Add two column blocks together. More...
 
pastix_fixdbl_t cpucblk_cgemmsp (pastix_coefside_t sideA, pastix_trans_t trans, const SolverCblk *cblk, const SolverBlok *blok, SolverCblk *fcblk, const void *A, const void *B, void *C, pastix_complex32_t *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpucblk_ctrsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to a column of off-diagonal blocks. More...
 
void cpucblk_cscalo (pastix_trans_t trans, const SolverCblk *cblk, void *dataL, void *dataLD)
 Copy the L term with scaling for the two-terms algorithm. More...
 
pastix_fixdbl_t cpublok_cgemmsp (pastix_trans_t trans, const SolverCblk *cblk, SolverCblk *fcblk, pastix_int_t blok_mk, pastix_int_t blok_nk, pastix_int_t blok_mn, const void *A, const void *B, void *C, const pastix_lr_t *lowrank)
 Compute the CPU gemm associated to a couple of off-diagonal blocks. More...
 
pastix_fixdbl_t cpublok_ctrsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, pastix_int_t blok_m, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpublok_cscalo (pastix_trans_t trans, const SolverCblk *cblk, pastix_int_t blok_m, const void *A, const void *dataD, void *dataB)
 Copy the lower terms of the block with scaling for the two-terms algorithm. More...
 

PastixComplex32 cblk LU kernels

int cpucblk_cgetrfsp1d_getrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of the diagonal block in a panel. More...
 
int cpucblk_cgetrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of one panel. More...
 
int cpucblk_cgetrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *work, pastix_int_t lwork)
 Perform the LU factorization of a given panel and apply all its updates. More...
 

PastixComplex32 cblk Cholesky kernels

int cpucblk_cpotrfsp1d_potrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the Cholesky factorization of the diagonal block in a panel. More...
 
int cpucblk_cpotrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L)
 Compute the Cholesky factorization of one panel. More...
 
int cpucblk_cpotrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *work, pastix_int_t lwork)
 Perform the Cholesky factorization of a given panel and apply all its updates. More...
 

PastixComplex32 cblk LDL^t kernels

int cpucblk_csytrfsp1d_sytrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Computes the LDL^t factorization of the diagonal block in a panel. More...
 
int cpucblk_csytrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *DLt)
 Compute the LDL^t factorization of one panel. More...
 
int cpucblk_csytrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *Dlt, pastix_complex32_t *work, pastix_int_t lwork)
 Perform the LDL^t factorization of a given panel and apply all its updates. More...
 

PastixComplex32 initialization and additionnal routines

void cpucblk_calloc_lrws (const SolverCblk *cblk, pastix_lrblock_t *lrblok, pastix_complex32_t *ws)
 Initialize lrblock structure from a workspace for all blocks of the cblk associated. More...
 
void cpucblk_calloc_lr (pastix_coefside_t side, SolverCblk *cblk, int rkmax)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_calloc_fr (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_calloc (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_cfree (pastix_coefside_t side, SolverCblk *cblk)
 Free the cblk structure that store the coefficient. More...
 
void cpucblk_cfillin (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk)
 Initialize the coeftab structure from the internal bcsc. More...
 
void cpucblk_cinit (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk, const char *directory)
 Fully initialize a single cblk. More...
 
void cpucblk_cgetschur (const SolverCblk *cblk, int upper_part, pastix_complex32_t *S, pastix_int_t lds)
 Extract a cblk panel of the Schur complement to a dense lapack form. More...
 
void cpucblk_cdump (pastix_coefside_t side, const SolverCblk *cblk, FILE *stream)
 Dump a single column block into a FILE in a human readale format. More...
 
int cpucblk_cdiff (pastix_coefside_t side, const SolverCblk *cblkA, SolverCblk *cblkB)
 Compare two column blocks in full-rank format. More...
 
pastix_fixdbl_t cpucblk_cadd (pastix_complex32_t alpha, const SolverCblk *cblkA, SolverCblk *cblkB, const void *A, void *B, pastix_complex32_t *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Add two column bloks in full rank format. More...
 
pastix_fixdbl_t cpublok_cadd (pastix_complex32_t alpha, const SolverCblk *cblkA, SolverCblk *cblkB, pastix_int_t blokA_m, pastix_int_t blokB_m, const void *A, void *B, pastix_complex32_t *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Add two bloks. More...
 

PastixComplex32 MPI routines

int cpucblk_cincoming_deps (int mt_flag, pastix_coefside_t side, SolverMatrix *solvmtx, SolverCblk *cblk)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_crelease_deps (pastix_coefside_t side, SolverMatrix *solvmtx, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
void cpucblk_crequest_cleanup (pastix_coefside_t side, pastix_int_t sched, SolverMatrix *solvmtx)
 Waitall routine for current cblk request. More...
 
void cpucblk_cupdate_reqtab (SolverMatrix *solvmtx)
 
void cpucblk_cmpi_rhs_fwd_progress (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, int threadid)
 
void cpucblk_crelease_rhs_fwd_deps (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
int cpucblk_cincoming_rhs_fwd_deps (int rank, const args_solve_t *enums, SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t rhsb)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_crequest_rhs_fwd_cleanup (const args_solve_t *enums, pastix_int_t sched, SolverMatrix *solvmtx, pastix_rhs_t rhsb)
 Waitall routine for current cblk request. More...
 
void cpucblk_cmpi_rhs_bwd_progress (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, int threadid)
 
void cpucblk_crelease_rhs_bwd_deps (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
int cpucblk_cincoming_rhs_bwd_deps (int rank, const args_solve_t *enums, SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t rhsb)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_crequest_rhs_bwd_cleanup (const args_solve_t *enums, pastix_int_t sched, SolverMatrix *solvmtx, pastix_rhs_t rhsb)
 Waitall routine for current cblk request. More...
 
void cpucblk_csend_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_crecv_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *work, pastix_rhs_t b)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_csend_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_crecv_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t b)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 

PastixComplex32 compression/uncompression routines

pastix_fixdbl_t cpublok_ccompress (const pastix_lr_t *lowrank, pastix_int_t M, pastix_int_t N, pastix_lrblock_t *blok)
 Compress a single block from full-rank to low-rank format. More...
 
pastix_int_t cpucblk_ccompress (const SolverMatrix *solvmtx, pastix_coefside_t side, int max_ilulvl, SolverCblk *cblk)
 Compress a single column block from full-rank to low-rank format. More...
 
void cpucblk_cuncompress (pastix_coefside_t side, SolverCblk *cblk)
 Uncompress a single column block from low-rank format to full-rank format. More...
 
void cpucblk_cmemory (pastix_coefside_t side, const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_int_t *orig, pastix_int_t *gain)
 Return the memory gain of the low-rank form over the full-rank form for a single column-block. More...
 

PastixFloat cblk-BLAS CPU kernels

int cpucblk_sgeaddsp1d (const SolverCblk *cblk1, SolverCblk *cblk2, const float *L1, float *L2, const float *U1, float *U2)
 Add two column blocks together. More...
 
pastix_fixdbl_t cpucblk_sgemmsp (pastix_coefside_t sideA, pastix_trans_t trans, const SolverCblk *cblk, const SolverBlok *blok, SolverCblk *fcblk, const void *A, const void *B, void *C, float *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpucblk_strsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to a column of off-diagonal blocks. More...
 
void cpucblk_sscalo (pastix_trans_t trans, const SolverCblk *cblk, void *dataL, void *dataLD)
 Copy the L term with scaling for the two-terms algorithm. More...
 
pastix_fixdbl_t cpublok_sgemmsp (pastix_trans_t trans, const SolverCblk *cblk, SolverCblk *fcblk, pastix_int_t blok_mk, pastix_int_t blok_nk, pastix_int_t blok_mn, const void *A, const void *B, void *C, const pastix_lr_t *lowrank)
 Compute the CPU gemm associated to a couple of off-diagonal blocks. More...
 
pastix_fixdbl_t cpublok_strsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, pastix_int_t blok_m, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpublok_sscalo (pastix_trans_t trans, const SolverCblk *cblk, pastix_int_t blok_m, const void *A, const void *dataD, void *dataB)
 Copy the lower terms of the block with scaling for the two-terms algorithm. More...
 

PastixFloat cblk LU kernels

int cpucblk_sgetrfsp1d_getrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of the diagonal block in a panel. More...
 
int cpucblk_sgetrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of one panel. More...
 
int cpucblk_sgetrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, float *work, pastix_int_t lwork)
 Perform the LU factorization of a given panel and apply all its updates. More...
 

PastixFloat cblk Cholesky kernels

int cpucblk_spotrfsp1d_potrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the Cholesky factorization of the diagonal block in a panel. More...
 
int cpucblk_spotrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L)
 Compute the Cholesky factorization of one panel. More...
 
int cpucblk_spotrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, float *work, pastix_int_t lwork)
 Perform the Cholesky factorization of a given panel and apply all its updates. More...
 

PastixFloat cblk LDL^t kernels

int cpucblk_ssytrfsp1d_sytrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Computes the LDL^t factorization of the diagonal block in a panel. More...
 
int cpucblk_ssytrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *DLt)
 Compute the LDL^t factorization of one panel. More...
 
int cpucblk_ssytrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, float *Dlt, float *work, pastix_int_t lwork)
 Perform the LDL^t factorization of a given panel and apply all its updates. More...
 

PastixFloat initialization and additionnal routines

void cpucblk_salloc_lrws (const SolverCblk *cblk, pastix_lrblock_t *lrblok, float *ws)
 Initialize lrblock structure from a workspace for all blocks of the cblk associated. More...
 
void cpucblk_salloc_lr (pastix_coefside_t side, SolverCblk *cblk, int rkmax)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_salloc_fr (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_salloc (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_sfree (pastix_coefside_t side, SolverCblk *cblk)
 Free the cblk structure that store the coefficient. More...
 
void cpucblk_sfillin (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk)
 Initialize the coeftab structure from the internal bcsc. More...
 
void cpucblk_sinit (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk, const char *directory)
 Fully initialize a single cblk. More...
 
void cpucblk_sgetschur (const SolverCblk *cblk, int upper_part, float *S, pastix_int_t lds)
 Extract a cblk panel of the Schur complement to a dense lapack form. More...
 
void cpucblk_sdump (pastix_coefside_t side, const SolverCblk *cblk, FILE *stream)
 Dump a single column block into a FILE in a human readale format. More...
 
int cpucblk_sdiff (pastix_coefside_t side, const SolverCblk *cblkA, SolverCblk *cblkB)
 Compare two column blocks in full-rank format. More...
 
pastix_fixdbl_t cpucblk_sadd (float alpha, const SolverCblk *cblkA, SolverCblk *cblkB, const void *A, void *B, float *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Add two column bloks in full rank format. More...
 
pastix_fixdbl_t cpublok_sadd (float alpha, const SolverCblk *cblkA, SolverCblk *cblkB, pastix_int_t blokA_m, pastix_int_t blokB_m, const void *A, void *B, float *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Add two bloks. More...
 

PastixFloat MPI routines

int cpucblk_sincoming_deps (int mt_flag, pastix_coefside_t side, SolverMatrix *solvmtx, SolverCblk *cblk)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_srelease_deps (pastix_coefside_t side, SolverMatrix *solvmtx, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
void cpucblk_srequest_cleanup (pastix_coefside_t side, pastix_int_t sched, SolverMatrix *solvmtx)
 Waitall routine for current cblk request. More...
 
void cpucblk_supdate_reqtab (SolverMatrix *solvmtx)
 
void cpucblk_smpi_rhs_fwd_progress (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, int threadid)
 
void cpucblk_srelease_rhs_fwd_deps (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
int cpucblk_sincoming_rhs_fwd_deps (int rank, const args_solve_t *enums, SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t rhsb)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_srequest_rhs_fwd_cleanup (const args_solve_t *enums, pastix_int_t sched, SolverMatrix *solvmtx, pastix_rhs_t rhsb)
 Waitall routine for current cblk request. More...
 
void cpucblk_smpi_rhs_bwd_progress (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, int threadid)
 
void cpucblk_srelease_rhs_bwd_deps (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
int cpucblk_sincoming_rhs_bwd_deps (int rank, const args_solve_t *enums, SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t rhsb)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_srequest_rhs_bwd_cleanup (const args_solve_t *enums, pastix_int_t sched, SolverMatrix *solvmtx, pastix_rhs_t rhsb)
 Waitall routine for current cblk request. More...
 
void cpucblk_ssend_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_srecv_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, float *work, pastix_rhs_t b)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_ssend_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_srecv_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t b)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 

PastixFloat compression/uncompression routines

pastix_fixdbl_t cpublok_scompress (const pastix_lr_t *lowrank, pastix_int_t M, pastix_int_t N, pastix_lrblock_t *blok)
 Compress a single block from full-rank to low-rank format. More...
 
pastix_int_t cpucblk_scompress (const SolverMatrix *solvmtx, pastix_coefside_t side, int max_ilulvl, SolverCblk *cblk)
 Compress a single column block from full-rank to low-rank format. More...
 
void cpucblk_suncompress (pastix_coefside_t side, SolverCblk *cblk)
 Uncompress a single column block from low-rank format to full-rank format. More...
 
void cpucblk_smemory (pastix_coefside_t side, const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_int_t *orig, pastix_int_t *gain)
 Return the memory gain of the low-rank form over the full-rank form for a single column-block. More...
 

PastixDouble cblk-BLAS CPU kernels

int cpucblk_dgeaddsp1d (const SolverCblk *cblk1, SolverCblk *cblk2, const double *L1, double *L2, const double *U1, double *U2)
 Add two column blocks together. More...
 
pastix_fixdbl_t cpucblk_dgemmsp (pastix_coefside_t sideA, pastix_trans_t trans, const SolverCblk *cblk, const SolverBlok *blok, SolverCblk *fcblk, const void *A, const void *B, void *C, double *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpucblk_dtrsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to a column of off-diagonal blocks. More...
 
void cpucblk_dscalo (pastix_trans_t trans, const SolverCblk *cblk, void *dataL, void *dataLD)
 Copy the L term with scaling for the two-terms algorithm. More...
 
pastix_fixdbl_t cpublok_dgemmsp (pastix_trans_t trans, const SolverCblk *cblk, SolverCblk *fcblk, pastix_int_t blok_mk, pastix_int_t blok_nk, pastix_int_t blok_mn, const void *A, const void *B, void *C, const pastix_lr_t *lowrank)
 Compute the CPU gemm associated to a couple of off-diagonal blocks. More...
 
pastix_fixdbl_t cpublok_dtrsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, pastix_int_t blok_m, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpublok_dscalo (pastix_trans_t trans, const SolverCblk *cblk, pastix_int_t blok_m, const void *A, const void *dataD, void *dataB)
 Copy the lower terms of the block with scaling for the two-terms algorithm. More...
 

PastixDouble cblk LU kernels

int cpucblk_dgetrfsp1d_getrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of the diagonal block in a panel. More...
 
int cpucblk_dgetrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of one panel. More...
 
int cpucblk_dgetrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, double *work, pastix_int_t lwork)
 Perform the LU factorization of a given panel and apply all its updates. More...
 

PastixDouble cblk Cholesky kernels

int cpucblk_dpotrfsp1d_potrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the Cholesky factorization of the diagonal block in a panel. More...
 
int cpucblk_dpotrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L)
 Compute the Cholesky factorization of one panel. More...
 
int cpucblk_dpotrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, double *work, pastix_int_t lwork)
 Perform the Cholesky factorization of a given panel and apply all its updates. More...
 

PastixDouble cblk LDL^t kernels

int cpucblk_dsytrfsp1d_sytrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Computes the LDL^t factorization of the diagonal block in a panel. More...
 
int cpucblk_dsytrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *DLt)
 Compute the LDL^t factorization of one panel. More...
 
int cpucblk_dsytrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, double *Dlt, double *work, pastix_int_t lwork)
 Perform the LDL^t factorization of a given panel and apply all its updates. More...
 

PastixDouble initialization and additionnal routines

void cpucblk_dalloc_lrws (const SolverCblk *cblk, pastix_lrblock_t *lrblok, double *ws)
 Initialize lrblock structure from a workspace for all blocks of the cblk associated. More...
 
void cpucblk_dalloc_lr (pastix_coefside_t side, SolverCblk *cblk, int rkmax)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_dalloc_fr (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_dalloc (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_dfree (pastix_coefside_t side, SolverCblk *cblk)
 Free the cblk structure that store the coefficient. More...
 
void cpucblk_dfillin (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk)
 Initialize the coeftab structure from the internal bcsc. More...
 
void cpucblk_dinit (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk, const char *directory)
 Fully initialize a single cblk. More...
 
void cpucblk_dgetschur (const SolverCblk *cblk, int upper_part, double *S, pastix_int_t lds)
 Extract a cblk panel of the Schur complement to a dense lapack form. More...
 
void cpucblk_ddump (pastix_coefside_t side, const SolverCblk *cblk, FILE *stream)
 Dump a single column block into a FILE in a human readale format. More...
 
int cpucblk_ddiff (pastix_coefside_t side, const SolverCblk *cblkA, SolverCblk *cblkB)
 Compare two column blocks in full-rank format. More...
 
pastix_fixdbl_t cpucblk_dadd (double alpha, const SolverCblk *cblkA, SolverCblk *cblkB, const void *A, void *B, double *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Add two column bloks in full rank format. More...
 
pastix_fixdbl_t cpublok_dadd (double alpha, const SolverCblk *cblkA, SolverCblk *cblkB, pastix_int_t blokA_m, pastix_int_t blokB_m, const void *A, void *B, double *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Add two bloks. More...
 

PastixDouble MPI routines

int cpucblk_dincoming_deps (int mt_flag, pastix_coefside_t side, SolverMatrix *solvmtx, SolverCblk *cblk)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_drelease_deps (pastix_coefside_t side, SolverMatrix *solvmtx, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
void cpucblk_drequest_cleanup (pastix_coefside_t side, pastix_int_t sched, SolverMatrix *solvmtx)
 Waitall routine for current cblk request. More...
 
void cpucblk_dupdate_reqtab (SolverMatrix *solvmtx)
 
void cpucblk_dmpi_rhs_fwd_progress (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, int threadid)
 
void cpucblk_drelease_rhs_fwd_deps (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
int cpucblk_dincoming_rhs_fwd_deps (int rank, const args_solve_t *enums, SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t rhsb)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_drequest_rhs_fwd_cleanup (const args_solve_t *enums, pastix_int_t sched, SolverMatrix *solvmtx, pastix_rhs_t rhsb)
 Waitall routine for current cblk request. More...
 
void cpucblk_dmpi_rhs_bwd_progress (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, int threadid)
 
void cpucblk_drelease_rhs_bwd_deps (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
int cpucblk_dincoming_rhs_bwd_deps (int rank, const args_solve_t *enums, SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t rhsb)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_drequest_rhs_bwd_cleanup (const args_solve_t *enums, pastix_int_t sched, SolverMatrix *solvmtx, pastix_rhs_t rhsb)
 Waitall routine for current cblk request. More...
 
void cpucblk_dsend_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_drecv_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, double *work, pastix_rhs_t b)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_dsend_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_drecv_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t b)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 

PastixDouble compression/uncompression routines

pastix_fixdbl_t cpublok_dcompress (const pastix_lr_t *lowrank, pastix_int_t M, pastix_int_t N, pastix_lrblock_t *blok)
 Compress a single block from full-rank to low-rank format. More...
 
pastix_int_t cpucblk_dcompress (const SolverMatrix *solvmtx, pastix_coefside_t side, int max_ilulvl, SolverCblk *cblk)
 Compress a single column block from full-rank to low-rank format. More...
 
void cpucblk_duncompress (pastix_coefside_t side, SolverCblk *cblk)
 Uncompress a single column block from low-rank format to full-rank format. More...
 
void cpucblk_dmemory (pastix_coefside_t side, const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_int_t *orig, pastix_int_t *gain)
 Return the memory gain of the low-rank form over the full-rank form for a single column-block. More...
 

PastixComplex64 cblk-BLAS CPU kernels

int cpucblk_zgeaddsp1d (const SolverCblk *cblk1, SolverCblk *cblk2, const pastix_complex64_t *L1, pastix_complex64_t *L2, const pastix_complex64_t *U1, pastix_complex64_t *U2)
 Add two column blocks together. More...
 
pastix_fixdbl_t cpucblk_zgemmsp (pastix_coefside_t sideA, pastix_trans_t trans, const SolverCblk *cblk, const SolverBlok *blok, SolverCblk *fcblk, const void *A, const void *B, void *C, pastix_complex64_t *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpucblk_ztrsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to a column of off-diagonal blocks. More...
 
void cpucblk_zscalo (pastix_trans_t trans, const SolverCblk *cblk, void *dataL, void *dataLD)
 Copy the L term with scaling for the two-terms algorithm. More...
 
pastix_fixdbl_t cpublok_zgemmsp (pastix_trans_t trans, const SolverCblk *cblk, SolverCblk *fcblk, pastix_int_t blok_mk, pastix_int_t blok_nk, pastix_int_t blok_mn, const void *A, const void *B, void *C, const pastix_lr_t *lowrank)
 Compute the CPU gemm associated to a couple of off-diagonal blocks. More...
 
pastix_fixdbl_t cpublok_ztrsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, pastix_int_t blok_m, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpublok_zscalo (pastix_trans_t trans, const SolverCblk *cblk, pastix_int_t blok_m, const void *A, const void *dataD, void *dataB)
 Copy the lower terms of the block with scaling for the two-terms algorithm. More...
 

PastixComplex64 cblk LU kernels

int cpucblk_zgetrfsp1d_getrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of the diagonal block in a panel. More...
 
int cpucblk_zgetrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of one panel. More...
 
int cpucblk_zgetrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *work, pastix_int_t lwork)
 Perform the LU factorization of a given panel and apply all its updates. More...
 

PastixComplex64 cblk Cholesky kernels

int cpucblk_zpotrfsp1d_potrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the Cholesky factorization of the diagonal block in a panel. More...
 
int cpucblk_zpotrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L)
 Compute the Cholesky factorization of one panel. More...
 
int cpucblk_zpotrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *work, pastix_int_t lwork)
 Perform the Cholesky factorization of a given panel and apply all its updates. More...
 

PastixComplex64 cblk LDL^t kernels

int cpucblk_zsytrfsp1d_sytrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Computes the LDL^t factorization of the diagonal block in a panel. More...
 
int cpucblk_zsytrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *DLt)
 Compute the LDL^t factorization of one panel. More...
 
int cpucblk_zsytrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *Dlt, pastix_complex64_t *work, pastix_int_t lwork)
 Perform the LDL^t factorization of a given panel and apply all its updates. More...
 

PastixComplex64 initialization and additionnal routines

void cpucblk_zalloc_lrws (const SolverCblk *cblk, pastix_lrblock_t *lrblok, pastix_complex64_t *ws)
 Initialize lrblock structure from a workspace for all blocks of the cblk associated. More...
 
void cpucblk_zalloc_lr (pastix_coefside_t side, SolverCblk *cblk, int rkmax)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_zalloc_fr (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_zalloc (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_zfree (pastix_coefside_t side, SolverCblk *cblk)
 Free the cblk structure that store the coefficient. More...
 
void cpucblk_zfillin (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk)
 Initialize the coeftab structure from the internal bcsc. More...
 
void cpucblk_zinit (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk, const char *directory)
 Fully initialize a single cblk. More...
 
void cpucblk_zgetschur (const SolverCblk *cblk, int upper_part, pastix_complex64_t *S, pastix_int_t lds)
 Extract a cblk panel of the Schur complement to a dense lapack form. More...
 
void cpucblk_zdump (pastix_coefside_t side, const SolverCblk *cblk, FILE *stream)
 Dump a single column block into a FILE in a human readale format. More...
 
int cpucblk_zdiff (pastix_coefside_t side, const SolverCblk *cblkA, SolverCblk *cblkB)
 Compare two column blocks in full-rank format. More...
 
pastix_fixdbl_t cpucblk_zadd (pastix_complex64_t alpha, const SolverCblk *cblkA, SolverCblk *cblkB, const void *A, void *B, pastix_complex64_t *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Add two column bloks in full rank format. More...
 
pastix_fixdbl_t cpublok_zadd (pastix_complex64_t alpha, const SolverCblk *cblkA, SolverCblk *cblkB, pastix_int_t blokA_m, pastix_int_t blokB_m, const void *A, void *B, pastix_complex64_t *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Add two bloks. More...
 

PastixComplex64 MPI routines

int cpucblk_zincoming_deps (int mt_flag, pastix_coefside_t side, SolverMatrix *solvmtx, SolverCblk *cblk)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_zrelease_deps (pastix_coefside_t side, SolverMatrix *solvmtx, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
void cpucblk_zrequest_cleanup (pastix_coefside_t side, pastix_int_t sched, SolverMatrix *solvmtx)
 Waitall routine for current cblk request. More...
 
void cpucblk_zupdate_reqtab (SolverMatrix *solvmtx)
 
void cpucblk_zmpi_rhs_fwd_progress (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, int threadid)
 
void cpucblk_zrelease_rhs_fwd_deps (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
int cpucblk_zincoming_rhs_fwd_deps (int rank, const args_solve_t *enums, SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t rhsb)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_zrequest_rhs_fwd_cleanup (const args_solve_t *enums, pastix_int_t sched, SolverMatrix *solvmtx, pastix_rhs_t rhsb)
 Waitall routine for current cblk request. More...
 
void cpucblk_zmpi_rhs_bwd_progress (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, int threadid)
 
void cpucblk_zrelease_rhs_bwd_deps (const args_solve_t *enums, SolverMatrix *solvmtx, pastix_rhs_t rhsb, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
int cpucblk_zincoming_rhs_bwd_deps (int rank, const args_solve_t *enums, SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t rhsb)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_zrequest_rhs_bwd_cleanup (const args_solve_t *enums, pastix_int_t sched, SolverMatrix *solvmtx, pastix_rhs_t rhsb)
 Waitall routine for current cblk request. More...
 
void cpucblk_zsend_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_zrecv_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *work, pastix_rhs_t b)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_zsend_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_zrecv_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_rhs_t b)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 

PastixComplex64 compression/uncompression routines

pastix_fixdbl_t cpublok_zcompress (const pastix_lr_t *lowrank, pastix_int_t M, pastix_int_t N, pastix_lrblock_t *blok)
 Compress a single block from full-rank to low-rank format. More...
 
pastix_int_t cpucblk_zcompress (const SolverMatrix *solvmtx, pastix_coefside_t side, int max_ilulvl, SolverCblk *cblk)
 Compress a single column block from full-rank to low-rank format. More...
 
void cpucblk_zuncompress (pastix_coefside_t side, SolverCblk *cblk)
 Uncompress a single column block from low-rank format to full-rank format. More...
 
void cpucblk_zmemory (pastix_coefside_t side, const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_int_t *orig, pastix_int_t *gain)
 Return the memory gain of the low-rank form over the full-rank form for a single column-block. More...
 

Detailed Description

This module contains all the kernel working at the solver matrix structure level for the numerical factorization step.

Function Documentation

◆ cpucblk_cgeaddsp1d()

int cpucblk_cgeaddsp1d ( const SolverCblk cblk1,
SolverCblk cblk2,
const pastix_complex32_t L,
pastix_complex32_t Cl,
const pastix_complex32_t U,
pastix_complex32_t Cu 
)

Add two column blocks together.

Perform the operation: cblk2 <- cblk1 + cblk2 using core_cgeadd().

Parameters
[in]cblk1The pointer to the data structure that describes the panel to add. Next column blok must be accessible through cblk1[1].
[in]cblk2The pointer to the data structure that describes the panel in which we add. Next column blok must be accessible through cblk2[1].
[in]LThe pointer to the lower matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width
[in,out]ClThe pointer to the lower matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cl = Cl + L.
[in]UThe pointer to the upper matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width. Ignored if NULL.
[in,out]CuThe pointer to the upper matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cu = Cu + U.
Return values
PASTIX_SUCCESSon success.

Definition at line 245 of file core_cgeadd.c.

References solver_blok_s::coefind, core_cgeadd(), solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, is_block_inside_fblock(), solver_cblk_s::lcolnum, solver_blok_s::lrownum, pastix_int_t, PASTIX_SUCCESS, PastixNoTrans, and solver_cblk_s::stride.

◆ cpucblk_cgemmsp()

pastix_fixdbl_t cpucblk_cgemmsp ( pastix_coefside_t  sideA,
pastix_trans_t  trans,
const SolverCblk cblk,
const SolverBlok blok,
SolverCblk fcblk,
const void *  A,
const void *  B,
void *  C,
pastix_complex32_t work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideASpecify if A and C belong to the lower part, or to the upper part. If sideA == PastixLCoef, the contribution of: (block .. (cblk[1].fblokptr-1)) -by- block is computed and added to C, otherwise the contribution: (block+1 .. (cblk[1].fblokptr-1)) -by- block is computed and added to C. The pointer to the data structure that describes the panel from which we compute the contributions. Next column blok must be accessible through cblk[1].
[in]transSpecify the transposition used for the B matrix. It has to be either PastixTrans or PastixConjTrans.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blokThe block from which we compute the contributions.
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]workTemporary memory buffer.
[in]lworkTODO
[in]lowrankThe structure with low-rank parameters.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 1529 of file core_cgemmsp.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, core_cgemmsp_1d1d(), core_cgemmsp_1d2d(), core_cgemmsp_2d2d(), core_cgemmsp_fulllr(), core_cgemmsp_lr(), core_cgemmsp_lrfr(), solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelGEMMCblk1d1d, PastixKernelGEMMCblk1d2d, PastixKernelGEMMCblk2d2d, PastixKernelGEMMCblkFRLR, PastixKernelGEMMCblkLRLR, PastixUCoef, and solver_cblk_s::stride.

Referenced by cpucblk_cgetrfsp1d(), cpucblk_cgetrfsp1dplus_update(), cpucblk_chetrfsp1d(), cpucblk_cpotrfsp1d(), cpucblk_cpotrfsp1dplus_update(), cpucblk_cpxtrfsp1d(), cpucblk_cpxtrfsp1dplus_update(), cpucblk_csytrfsp1d(), and fct_cblk_cgemmsp_cpu().

◆ cpucblk_ctrsmsp()

void cpucblk_ctrsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to a column of off-diagonal blocks.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixConjTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.

Definition at line 356 of file core_ctrsmsp.c.

Referenced by cpucblk_cgetrfsp1d_panel(), cpucblk_chetrfsp1d_panel(), cpucblk_cpotrfsp1d_panel(), cpucblk_cpxtrfsp1d_panel(), and cpucblk_csytrfsp1d_panel().

◆ cpucblk_cscalo()

void cpucblk_cscalo ( pastix_trans_t  trans,
const SolverCblk cblk,
void *  dataL,
void *  dataLD 
)

Copy the L term with scaling for the two-terms algorithm.

Performs LD = op(L) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( L ) = L;
  • PastixTrans: Transpose, op( L ) = L;
  • PastixConjTrans: Conjugate Transpose, op( L ) = conjf(L).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataLDThe pointer to the correct representation of LD.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 171 of file core_cscalo.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, core_cscalo(), solver_cblk_s::fblokptr, solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelSCALOCblk, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by cpucblk_chetrfsp1d_panel(), and cpucblk_csytrfsp1d_panel().

◆ cpublok_cgemmsp()

pastix_fixdbl_t cpublok_cgemmsp ( pastix_trans_t  transB,
const SolverCblk cblk,
SolverCblk fcblk,
pastix_int_t  blok_mk,
pastix_int_t  blok_nk,
pastix_int_t  blok_mn,
const void *  A,
const void *  B,
void *  C,
const pastix_lr_t lowrank 
)

Compute the CPU gemm associated to a couple of off-diagonal blocks.

C_l = C_l - A_l * op(B_s), with B_s = B_l, or B_u or C_u = C_u - A_u * op(B_s), with B_s = B_l, or B_u

Parameters
[in]transBSpecify wheter B should be used as PastixNoTrans, PastixTrans, or PastixConjTrans in the computations.
[in]cblkThe cblk structure to which block A and B belong to. The A and B pointers must be one of the [lu]coeftab of this column block. Next column blok must be accessible through cblk[1].
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the [lu]coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]blok_mkSpecify the index of the A block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_nkSpecify the index of the B block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_mnSpecify the index of the C block in the fcblk column. This index is 0-based for the diagonal block.
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with the low-rank parameters.
Returns
TODO

Definition at line 1676 of file core_cgemmsp.c.

References solver_cblk_s::cblktype, core_cgemmsp_block_frfr(), core_cgemmsp_block_frlr(), and core_cgemmsp_block_lrlr().

Referenced by fct_blok_cgemmsp_cpu().

◆ cpublok_ctrsmsp()

pastix_fixdbl_t cpublok_ctrsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
pastix_int_t  blok_m,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixConjTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the first off-diagonal block in cblk that is solved. The TRSM is also applied to all the folowing blocks which are facing the same diagonal block
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.
Return values
TODO

Definition at line 690 of file core_ctrsmsp.c.

References solver_cblk_s::cblktype, core_ctrsmsp_2dsub(), and core_ctrsmsp_lrsub().

Referenced by fct_blok_ctrsmsp_cpu().

◆ cpublok_cscalo()

void cpublok_cscalo ( pastix_trans_t  trans,
const SolverCblk cblk,
pastix_int_t  blok_m,
const void *  dataA,
const void *  dataD,
void *  dataB 
)

Copy the lower terms of the block with scaling for the two-terms algorithm.

Performs B = op(A) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( A ) = A;
  • PastixTrans: Transpose, op( A ) = A;
  • PastixConjTrans: Conjugate Transpose, op( A ) = conjf(A).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the off-diagonal block to be solved in the cblk. All blocks facing the same cblk, in the current column block will be solved.
[in]dataAThe pointer to the correct representation of data of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]dataDThe pointer to the correct representation of data of D.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataBThe pointer to the correct representation of data of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 316 of file core_cscalo.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, core_cscalo(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, pastix_int_t, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by fct_blok_cscalo_cpu().

◆ cpucblk_cgetrfsp1d_getrf()

int cpucblk_cgetrfsp1d_getrf ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  dataL,
void *  dataU 
)

Compute the LU factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataUThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 217 of file core_cgetrfsp.c.

References solver_cblk_s::cblktype, core_cgeadd(), solver_matrix_s::diagthreshold, solver_cblk_s::fcolnum, kernel_trace_start(), solver_cblk_s::lcolnum, pastix_int_t, PastixKernelGETRF, PastixTrans, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, and pastix_lrblock_s::u.

Referenced by cpucblk_cgetrfsp1d_panel(), and fct_blok_cgetrfsp_cpu().

◆ cpucblk_cgetrfsp1d_panel()

int cpucblk_cgetrfsp1d_panel ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  L,
void *  U 
)

Compute the LU factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]UThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 305 of file core_cgetrfsp.c.

References cpucblk_cgetrfsp1d_getrf(), cpucblk_ctrsmsp(), solver_matrix_s::lowrank, pastix_int_t, PastixNonUnit, PastixNoTrans, PastixRight, PastixUnit, and PastixUpper.

Referenced by cpucblk_cgetrfsp1d(), and cpucblk_cgetrfsp1dplus().

◆ cpucblk_cgetrfsp1d()

int cpucblk_cgetrfsp1d ( SolverMatrix solvmtx,
SolverCblk cblk,
pastix_complex32_t work,
pastix_int_t  lwork 
)

Perform the LU factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 355 of file core_cgetrfsp.c.

References cblk_getdataL(), cblk_getdataU(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, cpucblk_calloc(), cpucblk_cgemmsp(), cpucblk_cgetrfsp1d_panel(), cpucblk_crelease_deps(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_matrix_s::lowrank, pastix_int_t, PastixLCoef, PastixLUCoef, PastixTrans, and PastixUCoef.

Referenced by sequential_cgetrf(), thread_cgetrf_dynamic(), and thread_cgetrf_static().

◆ cpucblk_cpotrfsp1d_potrf()

int cpucblk_cpotrfsp1d_potrf ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  dataL 
)

Compute the Cholesky factorization of the diagonal block in a panel.

Warning
This routine will fail if it discovers a null or negative value on the diagonal during factorization.
Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 220 of file core_cpotrfsp.c.

References solver_cblk_s::cblktype, solver_matrix_s::diagthreshold, solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, kernel_trace_start(), solver_cblk_s::lcolnum, solver_blok_s::lrownum, pastix_int_t, PastixKernelPOTRF, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, and pastix_lrblock_s::u.

Referenced by cpucblk_cpotrfsp1d_panel(), and fct_blok_cpotrfsp_cpu().

◆ cpucblk_cpotrfsp1d_panel()

int cpucblk_cpotrfsp1d_panel ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  L 
)

Compute the Cholesky factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 292 of file core_cpotrfsp.c.

References cpucblk_cpotrfsp1d_potrf(), cpucblk_ctrsmsp(), solver_matrix_s::lowrank, pastix_int_t, PastixConjTrans, PastixLower, PastixNonUnit, and PastixRight.

Referenced by cpucblk_cpotrfsp1d(), and cpucblk_cpotrfsp1dplus().

◆ cpucblk_cpotrfsp1d()

int cpucblk_cpotrfsp1d ( SolverMatrix solvmtx,
SolverCblk cblk,
pastix_complex32_t work,
pastix_int_t  lwork 
)

Perform the Cholesky factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 334 of file core_cpotrfsp.c.

References cblk_getdataL(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, cpucblk_calloc(), cpucblk_cgemmsp(), cpucblk_cpotrfsp1d_panel(), cpucblk_crelease_deps(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_matrix_s::lowrank, pastix_int_t, PastixConjTrans, and PastixLCoef.

Referenced by sequential_cpotrf(), thread_cpotrf_dynamic(), and thread_cpotrf_static().

◆ cpucblk_csytrfsp1d_sytrf()

int cpucblk_csytrfsp1d_sytrf ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  dataL 
)

Computes the LDL^t factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 234 of file core_csytrfsp.c.

References solver_cblk_s::cblktype, solver_matrix_s::diagthreshold, solver_cblk_s::fcolnum, kernel_trace_start(), solver_cblk_s::lcolnum, pastix_int_t, PastixKernelSYTRF, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, and pastix_lrblock_s::u.

Referenced by cpucblk_csytrfsp1d_panel().

◆ cpucblk_csytrfsp1d_panel()

int cpucblk_csytrfsp1d_panel ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  L,
void *  DLt 
)

Compute the LDL^t factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]DLtThe pointer to the correct representation of DLt matrix (stored in the upper part by default).
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 432 of file core_csytrfsp.c.

References solver_cblk_s::cblktype, cpucblk_cscalo(), cpucblk_csytrfsp1d_sytrf(), cpucblk_ctrsmsp(), solver_matrix_s::lowrank, pastix_int_t, PastixNonUnit, PastixNoTrans, PastixRight, and PastixUpper.

Referenced by cpucblk_csytrfsp1d(), and cpucblk_csytrfsp1dplus().

◆ cpucblk_csytrfsp1d()

int cpucblk_csytrfsp1d ( SolverMatrix solvmtx,
SolverCblk cblk,
pastix_complex32_t DLt,
pastix_complex32_t work,
pastix_int_t  lwork 
)

Perform the LDL^t factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]DLtTemporary memory buffer to store the transpose of DLt.
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 487 of file core_csytrfsp.c.

References cblk_getdataL(), cblk_getdataU(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, core_csytrfsp1d_gemm(), cpucblk_calloc(), cpucblk_calloc_lrws(), cpucblk_cgemmsp(), cpucblk_crelease_deps(), cpucblk_csytrfsp1d_panel(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_matrix_s::lowrank, pastix_int_t, PastixLCoef, and PastixTrans.

Referenced by sequential_csytrf(), thread_csytrf_dynamic(), and thread_csytrf_static().

◆ cpucblk_calloc_lrws()

void cpucblk_calloc_lrws ( const SolverCblk cblk,
pastix_lrblock_t lrblok,
pastix_complex32_t ws 
)

Initialize lrblock structure from a workspace for all blocks of the cblk associated.

The lrblock structure must be allocated before.

Parameters
[in,out]cblkThe column block associated to the initialization.
[in]lrblokThe structure blok to initialize. Must be allocated before.
[in]wsThe workspace associated with the data that will be used for initialize lrblok.

Definition at line 98 of file cpucblk_cinit.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_cblk_s::fblokptr, pastix_int_t, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by cpucblk_chetrfsp1d(), and cpucblk_csytrfsp1d().

◆ cpucblk_calloc_lr()

void cpucblk_calloc_lr ( pastix_coefside_t  side,
SolverCblk cblk,
int  rkmax 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.
[in]rkmaxTODO

Definition at line 148 of file cpucblk_cinit.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, core_clralloc(), solver_cblk_s::fblokptr, solver_cblk_s::lcoeftab, solver_blok_s::LRblock, pastix_int_t, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_calloc(), and cpucblk_cunpack_lr().

◆ cpucblk_calloc_fr()

void cpucblk_calloc_fr ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 222 of file cpucblk_cinit.c.

References cblk_colnbr(), solver_cblk_s::lcoeftab, PastixLCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_calloc().

◆ cpucblk_calloc()

void cpucblk_calloc ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 269 of file cpucblk_cinit.c.

References solver_cblk_s::cblktype, cpucblk_calloc_fr(), cpucblk_calloc_lr(), solver_cblk_s::lcoeftab, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_cgetrfsp1d(), cpucblk_cgetrfsp1dplus_update(), cpucblk_chetrfsp1d(), cpucblk_chetrfsp1dplus_update(), cpucblk_cinit(), cpucblk_cpotrfsp1d(), cpucblk_cpotrfsp1dplus_update(), cpucblk_cpxtrfsp1d(), cpucblk_cpxtrfsp1dplus_update(), cpucblk_csytrfsp1d(), cpucblk_csytrfsp1dplus_update(), and cpucblk_zcinit().

◆ cpucblk_cfree()

void cpucblk_cfree ( pastix_coefside_t  side,
SolverCblk cblk 
)

Free the cblk structure that store the coefficient.

This routines performs the free and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to free.

Definition at line 322 of file cpucblk_cinit.c.

References solver_cblk_s::cblktype, core_clrfree(), solver_cblk_s::fblokptr, solver_cblk_s::lcoeftab, solver_blok_s::LRblock, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

◆ cpucblk_cfillin()

void cpucblk_cfillin ( pastix_coefside_t  side,
const SolverMatrix solvmtx,
const pastix_bcsc_t *  bcsc,
pastix_int_t  itercblk 
)

Initialize the coeftab structure from the internal bcsc.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxPaStiX structure to store numerical data and flags
[in]bcscThe internal bcsc structure that hold the graph with permutation stored by cblk.
[in]itercblkThe index of the cblk to fill in both bcsc and solvmtx structures.

Definition at line 628 of file cpucblk_cinit.c.

References solver_matrix_s::cblktab, cpucblk_cfillin_fr(), and cpucblk_cfillin_lr().

Referenced by cpucblk_cinit().

◆ cpucblk_cinit()

void cpucblk_cinit ( pastix_coefside_t  side,
const SolverMatrix solvmtx,
const pastix_bcsc_t *  bcsc,
pastix_int_t  itercblk,
const char *  directory 
)

Fully initialize a single cblk.

The cblk is allocated, intialized from the bcsc, and compressed if necessary.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe solver matrix data structure.
[in]bcscThe internal block CSC structure to fill-in the matrix.
[in]itercblkThe index of the cblk to initialize.
[in,out]directoryThe pointer to the temporary directory where to store the output files. Used only if PASTIX_DEBUG_DUMP_COEFTAB is defined.

Try to compress the cblk if needs to be compressed

Definition at line 226 of file coeftab_cinit.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, coeftabComputeCblkILULevels(), cpucblk_calloc(), cpucblk_ccompress(), cpucblk_cdumpfile(), cpucblk_cfillin(), solver_cblk_s::ctrbcnt, solver_matrix_s::globalalloc, pastix_lr_s::ilu_lvl, and solver_matrix_s::lowrank.

◆ cpucblk_cgetschur()

void cpucblk_cgetschur ( const SolverCblk cblk,
int  upper_part,
pastix_complex32_t S,
pastix_int_t  lds 
)

Extract a cblk panel of the Schur complement to a dense lapack form.

Parameters
[in]cblkThe column block to extract in the Schur array
[in]upper_partIf true, the upper part is also extracted in S.
[in,out]SThe pointer to the top of the column of the cblk in the Schur array. On exit, the computed coefficient are copy to this array.
[in]ldsThe leading dimension of the S array.

Definition at line 182 of file cpucblk_cschur.c.

References solver_cblk_s::cblktype, cpucblk_cgetschur_fr(), and cpucblk_cgetschur_lr().

Referenced by coeftab_cgetschur().

◆ cpucblk_cdump()

void cpucblk_cdump ( pastix_coefside_t  side,
const SolverCblk cblk,
FILE *  stream 
)

Dump a single column block into a FILE in a human readale format.

All non-zeroes coefficients are dumped in the format: i j val with one value per row.

Parameters
[in]sideDefine which side of the cblk must be printed.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
[in]cblkThe column block to dump into the file.
[in,out]streamThe FILE structure opened in write mode.

Definition at line 54 of file coeftab_cinit.c.

References blok_rownbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, solver_cblk_s::lcoeftab, pastix_int_t, PastixUCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by coeftab_cdump(), and cpucblk_cdumpfile().

◆ cpucblk_cdiff()

int cpucblk_cdiff ( pastix_coefside_t  side,
const SolverCblk cblkA,
SolverCblk cblkB 
)

Compare two column blocks in full-rank format.

The second cblk is overwritten by the difference of the two column blocks. The frobenius norm of the difference is computed and the functions returns 0 if the result: || B - A || / ( || A || * eps )

is below 10. Otherwise, an error message is printed and 1 is returned.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix that matches the A matrix in stucture. On exit, cblkB coefficient arrays are overwritten by the result of (B-A).
Returns
0 if the test is passed, >= 0 otherwise.

Definition at line 63 of file cpucblk_cdiff.c.

References cblk_colnbr(), core_cgeadd(), solver_cblk_s::lcoeftab, pastix_int_t, PastixLCoef, PastixNoTrans, PastixUCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by coeftab_cdiff().

◆ cpucblk_cadd()

pastix_fixdbl_t cpucblk_cadd ( pastix_complex32_t  alpha,
const SolverCblk cblkA,
SolverCblk cblkB,
const void *  A,
void *  B,
pastix_complex32_t work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Add two column bloks in full rank format.

The second cblk is overwritten by the sum of the two column blocks. B <- alpha * A + B

Parameters
[in]alphaThe scalar alpha
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix On exit, cblkB coefficient arrays are overwritten by the result of alpha * A + B.
[in,out]AThe pointer to the coeftab of the cblk.lcoeftab matrix storing the coefficients of the panel when the Lower part is computed, cblk.ucoeftab otherwise. Must be of size cblk.stride -by- cblk.width
[in]BThe pointer to the coeftab of the cblk.lcoeftab matrix storing the coefficients of the panel, if Symmetric/Hermitian cases or if upper part is computed; cblk.ucoeftab otherwise. Must be of size cblk.stride -by- cblk.width
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
[in]lowrankThe structure with low-rank parameters.
Returns
The number of flops of the operation.

Definition at line 391 of file cpucblk_cadd.c.

References cblk_colnbr(), solver_cblk_s::cblktype, cpucblk_cadd_frfr(), cpucblk_cadd_frlr(), cpucblk_cadd_lrlr(), solver_cblk_s::fblokptr, solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelGEADDCblkFRFR, PastixKernelGEADDCblkFRLR, PastixKernelGEADDCblkLRLR, and solver_cblk_s::stride.

Referenced by fct_cblk_cadd_cpu().

◆ cpublok_cadd()

pastix_fixdbl_t cpublok_cadd ( pastix_complex32_t  alpha,
const SolverCblk cblkA,
SolverCblk cblkB,
pastix_int_t  blokA_m,
pastix_int_t  blokB_m,
const void *  A,
void *  B,
pastix_complex32_t work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Add two bloks.

The second cblk is overwritten by the sum of the two blocks. B <- alpha * A + B

Parameters
[in]alphaThe scalar alpha
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix On exit, cblkB coefficient arrays are overwritten by the result of alpha * A + B.
[in]blokA_mIndex of the first off-diagonal block in cblk, that is used for A.
[in]blokB_mIndex of the first off-diagonal block in cblk, that is used for B.
[in,out]AThe pointer to the coeftab of the blok.lcoeftab matrix storing the coefficients of the panel when the Lower part is computed, blok.ucoeftab otherwise. Must be of size blok.stride -by- blok.width
[in,out]BThe pointer to the coeftab of the blok.lcoeftab matrix storing the coefficients of the panel, if Symmetric/Hermitian cases or if upper part is computed; blok.ucoeftab otherwise. Must be of size blok.stride -by- blok.width
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
[in]lowrankThe structure with low-rank parameters.
Returns
The number of flops of the operation.

Definition at line 431 of file cpublok_cadd.c.

References cblk_colnbr(), solver_cblk_s::cblktype, cpublok_cadd_frfr(), cpublok_cadd_frlr(), cpublok_cadd_lrlr(), solver_cblk_s::fblokptr, solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelGEADDCblkFRFR, PastixKernelGEADDCblkFRLR, PastixKernelGEADDCblkLRLR, and solver_cblk_s::stride.

Referenced by fct_blok_cadd_cpu().

◆ cpucblk_cincoming_deps()

int cpucblk_cincoming_deps ( int  rank,
pastix_coefside_t  side,
SolverMatrix solvmtx,
SolverCblk cblk 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]rankThe rank of the current thread.
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 543 of file cpucblk_cmpi_coeftab.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

Referenced by sequential_cgetrf(), sequential_chetrf(), sequential_cpotrf(), sequential_cpxtrf(), sequential_csytrf(), thread_cgetrf_static(), thread_chetrf_static(), thread_cpotrf_static(), thread_cpxtrf_static(), and thread_csytrf_static().

◆ cpucblk_crelease_deps()

void cpucblk_crelease_deps ( pastix_coefside_t  side,
SolverMatrix solvmtx,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 602 of file cpucblk_cmpi_coeftab.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, solver_cblk_s::ctrbcnt, pqueuePush1(), solver_cblk_s::priority, and solver_cblk_s::threadid.

Referenced by cpucblk_cgetrfsp1d(), cpucblk_cgetrfsp1dplus_update(), cpucblk_chetrfsp1d(), cpucblk_chetrfsp1dplus_update(), cpucblk_cpotrfsp1d(), cpucblk_cpotrfsp1dplus_update(), cpucblk_cpxtrfsp1d(), cpucblk_cpxtrfsp1dplus_update(), cpucblk_csytrfsp1d(), and cpucblk_csytrfsp1dplus_update().

◆ cpucblk_crequest_cleanup()

void cpucblk_crequest_cleanup ( pastix_coefside_t  side,
pastix_int_t  sched,
SolverMatrix solvmtx 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.

Definition at line 654 of file cpucblk_cmpi_coeftab.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_int_t, PastixSchedDynamic, PastixSchedSequential, PastixSchedStatic, solver_matrix_s::reqidx, solver_matrix_s::reqnum, and solver_matrix_s::reqtab.

◆ cpucblk_crelease_rhs_fwd_deps()

void cpucblk_crelease_rhs_fwd_deps ( const args_solve_t enums,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 765 of file cpucblk_cmpi_rhs_fwd.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_cincoming_rhs_fwd_deps()

int cpucblk_cincoming_rhs_fwd_deps ( int  rank,
const args_solve_t enums,
SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]rankThe rank of the current thread.
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 703 of file cpucblk_cmpi_rhs_fwd.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_crequest_rhs_fwd_cleanup()

void cpucblk_crequest_rhs_fwd_cleanup ( const args_solve_t enums,
pastix_int_t  sched,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]enumsEnums needed for the solve.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 821 of file cpucblk_cmpi_rhs_fwd.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_int_t, PastixSchedDynamic, PastixSchedSequential, PastixSchedStatic, solver_matrix_s::reqidx, solver_matrix_s::reqnum, and solver_matrix_s::reqtab.

◆ cpucblk_crelease_rhs_bwd_deps()

void cpucblk_crelease_rhs_bwd_deps ( const args_solve_t enums,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 527 of file cpucblk_cmpi_rhs_bwd.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, solver_cblk_s::ctrbcnt, pqueuePush1(), solver_cblk_s::priority, and solver_cblk_s::threadid.

◆ cpucblk_cincoming_rhs_bwd_deps()

int cpucblk_cincoming_rhs_bwd_deps ( int  rank,
const args_solve_t enums,
SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]rankThe rank of the current thread.
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 465 of file cpucblk_cmpi_rhs_bwd.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_crequest_rhs_bwd_cleanup()

void cpucblk_crequest_rhs_bwd_cleanup ( const args_solve_t enums,
pastix_int_t  sched,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]enumsEnums needed for the solve.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 582 of file cpucblk_cmpi_rhs_bwd.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_int_t, PastixSchedDynamic, PastixSchedSequential, PastixSchedStatic, solver_matrix_s::reqidx, solver_matrix_s::reqnum, and solver_matrix_s::reqtab.

◆ cpucblk_csend_rhs_forward()

void cpucblk_csend_rhs_forward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 48 of file cpucblk_cmpi_rhs_fwd.c.

References solver_cblk_s::bcscnum, cblk_colnbr(), pastix_rhs_s::cblkb, solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpucblk_crecv_rhs_forward()

void cpucblk_crecv_rhs_forward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_complex32_t work,
pastix_rhs_t  rhsb 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]workThe temporary buffer to receive the remote data
[in,out]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 229 of file cpucblk_cmpi_rhs_fwd.c.

References pastix_rhs_s::b, cblk_colnbr(), solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpucblk_csend_rhs_backward()

void cpucblk_csend_rhs_backward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 105 of file cpucblk_cmpi_rhs_fwd.c.

References pastix_rhs_s::b, solver_cblk_s::bcscnum, cblk_colnbr(), pastix_rhs_s::cblkb, solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::ld, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpucblk_crecv_rhs_backward()

void cpucblk_crecv_rhs_backward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 168 of file cpucblk_cmpi_rhs_fwd.c.

References solver_cblk_s::bcscnum, cblk_colnbr(), pastix_rhs_s::cblkb, solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpublok_ccompress()

pastix_fixdbl_t cpublok_ccompress ( const pastix_lr_t lowrank,
pastix_int_t  M,
pastix_int_t  N,
pastix_lrblock_t lrA 
)

Compress a single block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]lowrankThe pointer to the low-rank structure describing the lo-rank compression parameters.
[in]MThe number of rows in the block
[in]NThe number of columns in the block
[in,out]lrAThe block to compress. On input, it points to a full-rank matrix. On output, if possible the matrix is compressed in block low-rank format.
Returns
The number of flops used to compress the block.

Definition at line 57 of file cpucblk_ccompress.c.

References pastix_lrblock_s::rk, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by core_ctrsmsp_lr(), core_ctrsmsp_lrsub(), and cpucblk_ccompress().

◆ cpucblk_ccompress()

pastix_int_t cpucblk_ccompress ( const SolverMatrix solvmtx,
pastix_coefside_t  side,
int  max_ilulvl,
SolverCblk cblk 
)

Compress a single column block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]solvmtxThe pointer to the solver structure.
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]max_ilulvlTODO
[in,out]cblkThe column block to compress.
Returns
The memory gain resulting from the compression to low-rank format in number of elements.

Definition at line 114 of file cpucblk_ccompress.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, cpublok_ccompress(), solver_cblk_s::fblokptr, solver_blok_s::iluklvl, solver_matrix_s::lowrank, solver_blok_s::LRblock, pastix_int_t, PastixLCoef, PastixUCoef, and pastix_lrblock_s::rk.

Referenced by coeftab_ccompress(), cpucblk_cinit(), cpucblk_cmemory(), cpucblk_zcinit(), and pcoeftabComp().

◆ cpucblk_cuncompress()

void cpucblk_cuncompress ( pastix_coefside_t  side,
SolverCblk cblk 
)

Uncompress a single column block from low-rank format to full-rank format.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to uncompress.

Definition at line 201 of file cpucblk_ccompress.c.

References blok_rownbr(), cblk_colnbr(), core_clr2ge(), core_clralloc(), core_clrfree(), solver_cblk_s::fblokptr, solver_blok_s::LRblock, pastix_int_t, PastixLCoef, PastixNoTrans, PastixUCoef, and pastix_lrblock_s::u.

Referenced by coeftab_cuncompress().

◆ cpucblk_cmemory()

void cpucblk_cmemory ( pastix_coefside_t  side,
const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_int_t orig,
pastix_int_t gain 
)

Return the memory gain of the low-rank form over the full-rank form for a single column-block.

This function returns the memory gain in number of elements for a single column block when it is stored in low-rank format compared to a full rank storage.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe pointer to the solver structure.
[in]cblkThe column block to study.
[in,out]origThe structure that counts the original cost of the blocks.
[in,out]gainThe structure that counts gain on each type of the blocks.

Definition at line 281 of file cpucblk_ccompress.c.

References blok_is_preselected(), blok_rownbr(), cblk_colnbr(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_lr_s::compress_preselect, cpucblk_ccompress(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, pastix_lr_s::ilu_lvl, solver_matrix_s::lowrank, LR_InDiag, LR_InSele, LR_OffDiag, solver_blok_s::LRblock, solver_cblk_s::ownerid, pastix_int_t, PastixLCoef, PastixUCoef, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, and solver_cblk_s::sndeidx.

◆ cpucblk_sgeaddsp1d()

int cpucblk_sgeaddsp1d ( const SolverCblk cblk1,
SolverCblk cblk2,
const float *  L,
float *  Cl,
const float *  U,
float *  Cu 
)

Add two column blocks together.

Perform the operation: cblk2 <- cblk1 + cblk2 using core_sgeadd().

Parameters
[in]cblk1The pointer to the data structure that describes the panel to add. Next column blok must be accessible through cblk1[1].
[in]cblk2The pointer to the data structure that describes the panel in which we add. Next column blok must be accessible through cblk2[1].
[in]LThe pointer to the lower matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width
[in,out]ClThe pointer to the lower matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cl = Cl + L.
[in]UThe pointer to the upper matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width. Ignored if NULL.
[in,out]CuThe pointer to the upper matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cu = Cu + U.
Return values
PASTIX_SUCCESSon success.

Definition at line 245 of file core_sgeadd.c.

References solver_blok_s::coefind, core_sgeadd(), solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, is_block_inside_fblock(), solver_cblk_s::lcolnum, solver_blok_s::lrownum, pastix_int_t, PASTIX_SUCCESS, PastixNoTrans, and solver_cblk_s::stride.

◆ cpucblk_sgemmsp()

pastix_fixdbl_t cpucblk_sgemmsp ( pastix_coefside_t  sideA,
pastix_trans_t  trans,
const SolverCblk cblk,
const SolverBlok blok,
SolverCblk fcblk,
const void *  A,
const void *  B,
void *  C,
float *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideASpecify if A and C belong to the lower part, or to the upper part. If sideA == PastixLCoef, the contribution of: (block .. (cblk[1].fblokptr-1)) -by- block is computed and added to C, otherwise the contribution: (block+1 .. (cblk[1].fblokptr-1)) -by- block is computed and added to C. The pointer to the data structure that describes the panel from which we compute the contributions. Next column blok must be accessible through cblk[1].
[in]transSpecify the transposition used for the B matrix. It has to be either PastixTrans or PastixTrans.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blokThe block from which we compute the contributions.
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]workTemporary memory buffer.
[in]lworkTODO
[in]lowrankThe structure with low-rank parameters.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 1529 of file core_sgemmsp.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, core_sgemmsp_1d1d(), core_sgemmsp_1d2d(), core_sgemmsp_2d2d(), core_sgemmsp_fulllr(), core_sgemmsp_lr(), core_sgemmsp_lrfr(), solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelGEMMCblk1d1d, PastixKernelGEMMCblk1d2d, PastixKernelGEMMCblk2d2d, PastixKernelGEMMCblkFRLR, PastixKernelGEMMCblkLRLR, PastixUCoef, and solver_cblk_s::stride.

Referenced by cpucblk_sgetrfsp1d(), cpucblk_sgetrfsp1dplus_update(), cpucblk_spotrfsp1d(), cpucblk_spotrfsp1dplus_update(), cpucblk_ssytrfsp1d(), and fct_cblk_sgemmsp_cpu().

◆ cpucblk_strsmsp()

void cpucblk_strsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to a column of off-diagonal blocks.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.

Definition at line 356 of file core_strsmsp.c.

Referenced by cpucblk_sgetrfsp1d_panel(), cpucblk_spotrfsp1d_panel(), and cpucblk_ssytrfsp1d_panel().

◆ cpucblk_sscalo()

void cpucblk_sscalo ( pastix_trans_t  trans,
const SolverCblk cblk,
void *  dataL,
void *  dataLD 
)

Copy the L term with scaling for the two-terms algorithm.

Performs LD = op(L) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( L ) = L;
  • PastixTrans: Transpose, op( L ) = L;
  • PastixTrans: Conjugate Transpose, op( L ) = (L).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataLDThe pointer to the correct representation of LD.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 171 of file core_sscalo.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, core_sscalo(), solver_cblk_s::fblokptr, solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelSCALOCblk, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by cpucblk_ssytrfsp1d_panel().

◆ cpublok_sgemmsp()

pastix_fixdbl_t cpublok_sgemmsp ( pastix_trans_t  transB,
const SolverCblk cblk,
SolverCblk fcblk,
pastix_int_t  blok_mk,
pastix_int_t  blok_nk,
pastix_int_t  blok_mn,
const void *  A,
const void *  B,
void *  C,
const pastix_lr_t lowrank 
)

Compute the CPU gemm associated to a couple of off-diagonal blocks.

C_l = C_l - A_l * op(B_s), with B_s = B_l, or B_u or C_u = C_u - A_u * op(B_s), with B_s = B_l, or B_u

Parameters
[in]transBSpecify wheter B should be used as PastixNoTrans, PastixTrans, or PastixTrans in the computations.
[in]cblkThe cblk structure to which block A and B belong to. The A and B pointers must be one of the [lu]coeftab of this column block. Next column blok must be accessible through cblk[1].
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the [lu]coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]blok_mkSpecify the index of the A block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_nkSpecify the index of the B block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_mnSpecify the index of the C block in the fcblk column. This index is 0-based for the diagonal block.
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with the low-rank parameters.
Returns
TODO

Definition at line 1676 of file core_sgemmsp.c.

References solver_cblk_s::cblktype, core_sgemmsp_block_frfr(), core_sgemmsp_block_frlr(), and core_sgemmsp_block_lrlr().

Referenced by fct_blok_sgemmsp_cpu().

◆ cpublok_strsmsp()

pastix_fixdbl_t cpublok_strsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
pastix_int_t  blok_m,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the first off-diagonal block in cblk that is solved. The TRSM is also applied to all the folowing blocks which are facing the same diagonal block
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.
Return values
TODO

Definition at line 690 of file core_strsmsp.c.

References solver_cblk_s::cblktype, core_strsmsp_2dsub(), and core_strsmsp_lrsub().

Referenced by fct_blok_strsmsp_cpu().

◆ cpublok_sscalo()

void cpublok_sscalo ( pastix_trans_t  trans,
const SolverCblk cblk,
pastix_int_t  blok_m,
const void *  dataA,
const void *  dataD,
void *  dataB 
)

Copy the lower terms of the block with scaling for the two-terms algorithm.

Performs B = op(A) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( A ) = A;
  • PastixTrans: Transpose, op( A ) = A;
  • PastixTrans: Conjugate Transpose, op( A ) = (A).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the off-diagonal block to be solved in the cblk. All blocks facing the same cblk, in the current column block will be solved.
[in]dataAThe pointer to the correct representation of data of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]dataDThe pointer to the correct representation of data of D.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataBThe pointer to the correct representation of data of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 316 of file core_sscalo.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, core_sscalo(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, pastix_int_t, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by fct_blok_sscalo_cpu().

◆ cpucblk_sgetrfsp1d_getrf()

int cpucblk_sgetrfsp1d_getrf ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  dataL,
void *  dataU 
)

Compute the LU factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataUThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 217 of file core_sgetrfsp.c.

References solver_cblk_s::cblktype, core_sgeadd(), solver_matrix_s::diagthreshold, solver_cblk_s::fcolnum, kernel_trace_start(), solver_cblk_s::lcolnum, pastix_int_t, PastixKernelGETRF, PastixTrans, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, and pastix_lrblock_s::u.

Referenced by cpucblk_sgetrfsp1d_panel(), and fct_blok_sgetrfsp_cpu().

◆ cpucblk_sgetrfsp1d_panel()

int cpucblk_sgetrfsp1d_panel ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  L,
void *  U 
)

Compute the LU factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]UThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 305 of file core_sgetrfsp.c.

References cpucblk_sgetrfsp1d_getrf(), cpucblk_strsmsp(), solver_matrix_s::lowrank, pastix_int_t, PastixNonUnit, PastixNoTrans, PastixRight, PastixUnit, and PastixUpper.

Referenced by cpucblk_sgetrfsp1d(), and cpucblk_sgetrfsp1dplus().

◆ cpucblk_sgetrfsp1d()

int cpucblk_sgetrfsp1d ( SolverMatrix solvmtx,
SolverCblk cblk,
float *  work,
pastix_int_t  lwork 
)

Perform the LU factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 355 of file core_sgetrfsp.c.

References cblk_getdataL(), cblk_getdataU(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, cpucblk_salloc(), cpucblk_sgemmsp(), cpucblk_sgetrfsp1d_panel(), cpucblk_srelease_deps(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_matrix_s::lowrank, pastix_int_t, PastixLCoef, PastixLUCoef, PastixTrans, and PastixUCoef.

Referenced by sequential_sgetrf(), thread_sgetrf_dynamic(), and thread_sgetrf_static().

◆ cpucblk_spotrfsp1d_potrf()

int cpucblk_spotrfsp1d_potrf ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  dataL 
)

Compute the Cholesky factorization of the diagonal block in a panel.

Warning
This routine will fail if it discovers a null or negative value on the diagonal during factorization.
Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 220 of file core_spotrfsp.c.

References solver_cblk_s::cblktype, solver_matrix_s::diagthreshold, solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, kernel_trace_start(), solver_cblk_s::lcolnum, solver_blok_s::lrownum, pastix_int_t, PastixKernelPOTRF, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, and pastix_lrblock_s::u.

Referenced by cpucblk_spotrfsp1d_panel(), and fct_blok_spotrfsp_cpu().

◆ cpucblk_spotrfsp1d_panel()

int cpucblk_spotrfsp1d_panel ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  L 
)

Compute the Cholesky factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 292 of file core_spotrfsp.c.

References cpucblk_spotrfsp1d_potrf(), cpucblk_strsmsp(), solver_matrix_s::lowrank, pastix_int_t, PastixLower, PastixNonUnit, PastixRight, and PastixTrans.

Referenced by cpucblk_spotrfsp1d(), and cpucblk_spotrfsp1dplus().

◆ cpucblk_spotrfsp1d()

int cpucblk_spotrfsp1d ( SolverMatrix solvmtx,
SolverCblk cblk,
float *  work,
pastix_int_t  lwork 
)

Perform the Cholesky factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 334 of file core_spotrfsp.c.

References cblk_getdataL(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, cpucblk_salloc(), cpucblk_sgemmsp(), cpucblk_spotrfsp1d_panel(), cpucblk_srelease_deps(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_matrix_s::lowrank, pastix_int_t, PastixLCoef, and PastixTrans.

Referenced by sequential_spotrf(), thread_spotrf_dynamic(), and thread_spotrf_static().

◆ cpucblk_ssytrfsp1d_sytrf()

int cpucblk_ssytrfsp1d_sytrf ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  dataL 
)

Computes the LDL^t factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 234 of file core_ssytrfsp.c.

References solver_cblk_s::cblktype, solver_matrix_s::diagthreshold, solver_cblk_s::fcolnum, kernel_trace_start(), solver_cblk_s::lcolnum, pastix_int_t, PastixKernelSYTRF, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, and pastix_lrblock_s::u.

Referenced by cpucblk_ssytrfsp1d_panel().

◆ cpucblk_ssytrfsp1d_panel()

int cpucblk_ssytrfsp1d_panel ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  L,
void *  DLt 
)

Compute the LDL^t factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]DLtThe pointer to the correct representation of DLt matrix (stored in the upper part by default).
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 432 of file core_ssytrfsp.c.

References solver_cblk_s::cblktype, cpucblk_sscalo(), cpucblk_ssytrfsp1d_sytrf(), cpucblk_strsmsp(), solver_matrix_s::lowrank, pastix_int_t, PastixNonUnit, PastixNoTrans, PastixRight, and PastixUpper.

Referenced by cpucblk_ssytrfsp1d(), and cpucblk_ssytrfsp1dplus().

◆ cpucblk_ssytrfsp1d()

int cpucblk_ssytrfsp1d ( SolverMatrix solvmtx,
SolverCblk cblk,
float *  DLt,
float *  work,
pastix_int_t  lwork 
)

Perform the LDL^t factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]DLtTemporary memory buffer to store the transpose of DLt.
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 487 of file core_ssytrfsp.c.

References cblk_getdataL(), cblk_getdataU(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, core_ssytrfsp1d_gemm(), cpucblk_salloc(), cpucblk_salloc_lrws(), cpucblk_sgemmsp(), cpucblk_srelease_deps(), cpucblk_ssytrfsp1d_panel(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_matrix_s::lowrank, pastix_int_t, PastixLCoef, and PastixTrans.

Referenced by sequential_ssytrf(), thread_ssytrf_dynamic(), and thread_ssytrf_static().

◆ cpucblk_salloc_lrws()

void cpucblk_salloc_lrws ( const SolverCblk cblk,
pastix_lrblock_t lrblok,
float *  ws 
)

Initialize lrblock structure from a workspace for all blocks of the cblk associated.

The lrblock structure must be allocated before.

Parameters
[in,out]cblkThe column block associated to the initialization.
[in]lrblokThe structure blok to initialize. Must be allocated before.
[in]wsThe workspace associated with the data that will be used for initialize lrblok.

Definition at line 98 of file cpucblk_sinit.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_cblk_s::fblokptr, pastix_int_t, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by cpucblk_ssytrfsp1d().

◆ cpucblk_salloc_lr()

void cpucblk_salloc_lr ( pastix_coefside_t  side,
SolverCblk cblk,
int  rkmax 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.
[in]rkmaxTODO

Definition at line 148 of file cpucblk_sinit.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, core_slralloc(), solver_cblk_s::fblokptr, solver_cblk_s::lcoeftab, solver_blok_s::LRblock, pastix_int_t, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_salloc(), and cpucblk_sunpack_lr().

◆ cpucblk_salloc_fr()

void cpucblk_salloc_fr ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 222 of file cpucblk_sinit.c.

References cblk_colnbr(), solver_cblk_s::lcoeftab, PastixLCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_salloc().

◆ cpucblk_salloc()

void cpucblk_salloc ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 269 of file cpucblk_sinit.c.

References solver_cblk_s::cblktype, cpucblk_salloc_fr(), cpucblk_salloc_lr(), solver_cblk_s::lcoeftab, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_dsinit(), cpucblk_sgetrfsp1d(), cpucblk_sgetrfsp1dplus_update(), cpucblk_sinit(), cpucblk_spotrfsp1d(), cpucblk_spotrfsp1dplus_update(), cpucblk_ssytrfsp1d(), and cpucblk_ssytrfsp1dplus_update().

◆ cpucblk_sfree()

void cpucblk_sfree ( pastix_coefside_t  side,
SolverCblk cblk 
)

Free the cblk structure that store the coefficient.

This routines performs the free and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to free.

Definition at line 322 of file cpucblk_sinit.c.

References solver_cblk_s::cblktype, core_slrfree(), solver_cblk_s::fblokptr, solver_cblk_s::lcoeftab, solver_blok_s::LRblock, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

◆ cpucblk_sfillin()

void cpucblk_sfillin ( pastix_coefside_t  side,
const SolverMatrix solvmtx,
const pastix_bcsc_t *  bcsc,
pastix_int_t  itercblk 
)

Initialize the coeftab structure from the internal bcsc.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxPaStiX structure to store numerical data and flags
[in]bcscThe internal bcsc structure that hold the graph with permutation stored by cblk.
[in]itercblkThe index of the cblk to fill in both bcsc and solvmtx structures.

Definition at line 628 of file cpucblk_sinit.c.

References solver_matrix_s::cblktab, cpucblk_sfillin_fr(), and cpucblk_sfillin_lr().

Referenced by cpucblk_sinit().

◆ cpucblk_sinit()

void cpucblk_sinit ( pastix_coefside_t  side,
const SolverMatrix solvmtx,
const pastix_bcsc_t *  bcsc,
pastix_int_t  itercblk,
const char *  directory 
)

Fully initialize a single cblk.

The cblk is allocated, intialized from the bcsc, and compressed if necessary.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe solver matrix data structure.
[in]bcscThe internal block CSC structure to fill-in the matrix.
[in]itercblkThe index of the cblk to initialize.
[in,out]directoryThe pointer to the temporary directory where to store the output files. Used only if PASTIX_DEBUG_DUMP_COEFTAB is defined.

Try to compress the cblk if needs to be compressed

Definition at line 226 of file coeftab_sinit.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, coeftabComputeCblkILULevels(), cpucblk_salloc(), cpucblk_scompress(), cpucblk_sdumpfile(), cpucblk_sfillin(), solver_cblk_s::ctrbcnt, solver_matrix_s::globalalloc, pastix_lr_s::ilu_lvl, and solver_matrix_s::lowrank.

◆ cpucblk_sgetschur()

void cpucblk_sgetschur ( const SolverCblk cblk,
int  upper_part,
float *  S,
pastix_int_t  lds 
)

Extract a cblk panel of the Schur complement to a dense lapack form.

Parameters
[in]cblkThe column block to extract in the Schur array
[in]upper_partIf true, the upper part is also extracted in S.
[in,out]SThe pointer to the top of the column of the cblk in the Schur array. On exit, the computed coefficient are copy to this array.
[in]ldsThe leading dimension of the S array.

Definition at line 182 of file cpucblk_sschur.c.

References solver_cblk_s::cblktype, cpucblk_sgetschur_fr(), and cpucblk_sgetschur_lr().

Referenced by coeftab_sgetschur().

◆ cpucblk_sdump()

void cpucblk_sdump ( pastix_coefside_t  side,
const SolverCblk cblk,
FILE *  stream 
)

Dump a single column block into a FILE in a human readale format.

All non-zeroes coefficients are dumped in the format: i j val with one value per row.

Parameters
[in]sideDefine which side of the cblk must be printed.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
[in]cblkThe column block to dump into the file.
[in,out]streamThe FILE structure opened in write mode.

Definition at line 54 of file coeftab_sinit.c.

References blok_rownbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, solver_cblk_s::lcoeftab, pastix_int_t, PastixUCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by coeftab_sdump(), and cpucblk_sdumpfile().

◆ cpucblk_sdiff()

int cpucblk_sdiff ( pastix_coefside_t  side,
const SolverCblk cblkA,
SolverCblk cblkB 
)

Compare two column blocks in full-rank format.

The second cblk is overwritten by the difference of the two column blocks. The frobenius norm of the difference is computed and the functions returns 0 if the result: || B - A || / ( || A || * eps )

is below 10. Otherwise, an error message is printed and 1 is returned.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix that matches the A matrix in stucture. On exit, cblkB coefficient arrays are overwritten by the result of (B-A).
Returns
0 if the test is passed, >= 0 otherwise.

Definition at line 63 of file cpucblk_sdiff.c.

References cblk_colnbr(), core_sgeadd(), solver_cblk_s::lcoeftab, pastix_int_t, PastixLCoef, PastixNoTrans, PastixUCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by coeftab_sdiff().

◆ cpucblk_sadd()

pastix_fixdbl_t cpucblk_sadd ( float  alpha,
const SolverCblk cblkA,
SolverCblk cblkB,
const void *  A,
void *  B,
float *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Add two column bloks in full rank format.

The second cblk is overwritten by the sum of the two column blocks. B <- alpha * A + B

Parameters
[in]alphaThe scalar alpha
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix On exit, cblkB coefficient arrays are overwritten by the result of alpha * A + B.
[in,out]AThe pointer to the coeftab of the cblk.lcoeftab matrix storing the coefficients of the panel when the Lower part is computed, cblk.ucoeftab otherwise. Must be of size cblk.stride -by- cblk.width
[in]BThe pointer to the coeftab of the cblk.lcoeftab matrix storing the coefficients of the panel, if Symmetric/Symmetric cases or if upper part is computed; cblk.ucoeftab otherwise. Must be of size cblk.stride -by- cblk.width
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
[in]lowrankThe structure with low-rank parameters.
Returns
The number of flops of the operation.

Definition at line 391 of file cpucblk_sadd.c.

References cblk_colnbr(), solver_cblk_s::cblktype, cpucblk_sadd_frfr(), cpucblk_sadd_frlr(), cpucblk_sadd_lrlr(), solver_cblk_s::fblokptr, solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelGEADDCblkFRFR, PastixKernelGEADDCblkFRLR, PastixKernelGEADDCblkLRLR, and solver_cblk_s::stride.

Referenced by fct_cblk_sadd_cpu().

◆ cpublok_sadd()

pastix_fixdbl_t cpublok_sadd ( float  alpha,
const SolverCblk cblkA,
SolverCblk cblkB,
pastix_int_t  blokA_m,
pastix_int_t  blokB_m,
const void *  A,
void *  B,
float *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Add two bloks.

The second cblk is overwritten by the sum of the two blocks. B <- alpha * A + B

Parameters
[in]alphaThe scalar alpha
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix On exit, cblkB coefficient arrays are overwritten by the result of alpha * A + B.
[in]blokA_mIndex of the first off-diagonal block in cblk, that is used for A.
[in]blokB_mIndex of the first off-diagonal block in cblk, that is used for B.
[in,out]AThe pointer to the coeftab of the blok.lcoeftab matrix storing the coefficients of the panel when the Lower part is computed, blok.ucoeftab otherwise. Must be of size blok.stride -by- blok.width
[in,out]BThe pointer to the coeftab of the blok.lcoeftab matrix storing the coefficients of the panel, if Symmetric/Symmetric cases or if upper part is computed; blok.ucoeftab otherwise. Must be of size blok.stride -by- blok.width
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
[in]lowrankThe structure with low-rank parameters.
Returns
The number of flops of the operation.

Definition at line 431 of file cpublok_sadd.c.

References cblk_colnbr(), solver_cblk_s::cblktype, cpublok_sadd_frfr(), cpublok_sadd_frlr(), cpublok_sadd_lrlr(), solver_cblk_s::fblokptr, solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelGEADDCblkFRFR, PastixKernelGEADDCblkFRLR, PastixKernelGEADDCblkLRLR, and solver_cblk_s::stride.

Referenced by fct_blok_sadd_cpu().

◆ cpucblk_sincoming_deps()

int cpucblk_sincoming_deps ( int  rank,
pastix_coefside_t  side,
SolverMatrix solvmtx,
SolverCblk cblk 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]rankThe rank of the current thread.
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 543 of file cpucblk_smpi_coeftab.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

Referenced by sequential_sgetrf(), sequential_spotrf(), sequential_ssytrf(), thread_sgetrf_static(), thread_spotrf_static(), and thread_ssytrf_static().

◆ cpucblk_srelease_deps()

void cpucblk_srelease_deps ( pastix_coefside_t  side,
SolverMatrix solvmtx,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 602 of file cpucblk_smpi_coeftab.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, solver_cblk_s::ctrbcnt, pqueuePush1(), solver_cblk_s::priority, and solver_cblk_s::threadid.

Referenced by cpucblk_sgetrfsp1d(), cpucblk_sgetrfsp1dplus_update(), cpucblk_spotrfsp1d(), cpucblk_spotrfsp1dplus_update(), cpucblk_ssytrfsp1d(), and cpucblk_ssytrfsp1dplus_update().

◆ cpucblk_srequest_cleanup()

void cpucblk_srequest_cleanup ( pastix_coefside_t  side,
pastix_int_t  sched,
SolverMatrix solvmtx 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.

Definition at line 654 of file cpucblk_smpi_coeftab.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_int_t, PastixSchedDynamic, PastixSchedSequential, PastixSchedStatic, solver_matrix_s::reqidx, solver_matrix_s::reqnum, and solver_matrix_s::reqtab.

◆ cpucblk_srelease_rhs_fwd_deps()

void cpucblk_srelease_rhs_fwd_deps ( const args_solve_t enums,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 765 of file cpucblk_smpi_rhs_fwd.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_sincoming_rhs_fwd_deps()

int cpucblk_sincoming_rhs_fwd_deps ( int  rank,
const args_solve_t enums,
SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]rankThe rank of the current thread.
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 703 of file cpucblk_smpi_rhs_fwd.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_srequest_rhs_fwd_cleanup()

void cpucblk_srequest_rhs_fwd_cleanup ( const args_solve_t enums,
pastix_int_t  sched,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]enumsEnums needed for the solve.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 821 of file cpucblk_smpi_rhs_fwd.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_int_t, PastixSchedDynamic, PastixSchedSequential, PastixSchedStatic, solver_matrix_s::reqidx, solver_matrix_s::reqnum, and solver_matrix_s::reqtab.

◆ cpucblk_srelease_rhs_bwd_deps()

void cpucblk_srelease_rhs_bwd_deps ( const args_solve_t enums,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 527 of file cpucblk_smpi_rhs_bwd.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, solver_cblk_s::ctrbcnt, pqueuePush1(), solver_cblk_s::priority, and solver_cblk_s::threadid.

◆ cpucblk_sincoming_rhs_bwd_deps()

int cpucblk_sincoming_rhs_bwd_deps ( int  rank,
const args_solve_t enums,
SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]rankThe rank of the current thread.
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 465 of file cpucblk_smpi_rhs_bwd.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_srequest_rhs_bwd_cleanup()

void cpucblk_srequest_rhs_bwd_cleanup ( const args_solve_t enums,
pastix_int_t  sched,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]enumsEnums needed for the solve.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 582 of file cpucblk_smpi_rhs_bwd.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_int_t, PastixSchedDynamic, PastixSchedSequential, PastixSchedStatic, solver_matrix_s::reqidx, solver_matrix_s::reqnum, and solver_matrix_s::reqtab.

◆ cpucblk_ssend_rhs_forward()

void cpucblk_ssend_rhs_forward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 48 of file cpucblk_smpi_rhs_fwd.c.

References solver_cblk_s::bcscnum, cblk_colnbr(), pastix_rhs_s::cblkb, solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpucblk_srecv_rhs_forward()

void cpucblk_srecv_rhs_forward ( const SolverMatrix solvmtx,
SolverCblk cblk,
float *  work,
pastix_rhs_t  rhsb 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]workThe temporary buffer to receive the remote data
[in,out]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 229 of file cpucblk_smpi_rhs_fwd.c.

References pastix_rhs_s::b, cblk_colnbr(), solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpucblk_ssend_rhs_backward()

void cpucblk_ssend_rhs_backward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 105 of file cpucblk_smpi_rhs_fwd.c.

References pastix_rhs_s::b, solver_cblk_s::bcscnum, cblk_colnbr(), pastix_rhs_s::cblkb, solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::ld, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpucblk_srecv_rhs_backward()

void cpucblk_srecv_rhs_backward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 168 of file cpucblk_smpi_rhs_fwd.c.

References solver_cblk_s::bcscnum, cblk_colnbr(), pastix_rhs_s::cblkb, solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpublok_scompress()

pastix_fixdbl_t cpublok_scompress ( const pastix_lr_t lowrank,
pastix_int_t  M,
pastix_int_t  N,
pastix_lrblock_t lrA 
)

Compress a single block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]lowrankThe pointer to the low-rank structure describing the lo-rank compression parameters.
[in]MThe number of rows in the block
[in]NThe number of columns in the block
[in,out]lrAThe block to compress. On input, it points to a full-rank matrix. On output, if possible the matrix is compressed in block low-rank format.
Returns
The number of flops used to compress the block.

Definition at line 57 of file cpucblk_scompress.c.

References pastix_lrblock_s::rk, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by core_strsmsp_lr(), core_strsmsp_lrsub(), and cpucblk_scompress().

◆ cpucblk_scompress()

pastix_int_t cpucblk_scompress ( const SolverMatrix solvmtx,
pastix_coefside_t  side,
int  max_ilulvl,
SolverCblk cblk 
)

Compress a single column block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]solvmtxThe pointer to the solver structure.
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]max_ilulvlTODO
[in,out]cblkThe column block to compress.
Returns
The memory gain resulting from the compression to low-rank format in number of elements.

Definition at line 114 of file cpucblk_scompress.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, cpublok_scompress(), solver_cblk_s::fblokptr, solver_blok_s::iluklvl, solver_matrix_s::lowrank, solver_blok_s::LRblock, pastix_int_t, PastixLCoef, PastixUCoef, and pastix_lrblock_s::rk.

Referenced by coeftab_scompress(), cpucblk_dsinit(), cpucblk_sinit(), cpucblk_smemory(), and pcoeftabComp().

◆ cpucblk_suncompress()

void cpucblk_suncompress ( pastix_coefside_t  side,
SolverCblk cblk 
)

Uncompress a single column block from low-rank format to full-rank format.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to uncompress.

Definition at line 201 of file cpucblk_scompress.c.

References blok_rownbr(), cblk_colnbr(), core_slr2ge(), core_slralloc(), core_slrfree(), solver_cblk_s::fblokptr, solver_blok_s::LRblock, pastix_int_t, PastixLCoef, PastixNoTrans, PastixUCoef, and pastix_lrblock_s::u.

Referenced by coeftab_suncompress().

◆ cpucblk_smemory()

void cpucblk_smemory ( pastix_coefside_t  side,
const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_int_t orig,
pastix_int_t gain 
)

Return the memory gain of the low-rank form over the full-rank form for a single column-block.

This function returns the memory gain in number of elements for a single column block when it is stored in low-rank format compared to a full rank storage.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe pointer to the solver structure.
[in]cblkThe column block to study.
[in,out]origThe structure that counts the original cost of the blocks.
[in,out]gainThe structure that counts gain on each type of the blocks.

Definition at line 281 of file cpucblk_scompress.c.

References blok_is_preselected(), blok_rownbr(), cblk_colnbr(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_lr_s::compress_preselect, cpucblk_scompress(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, pastix_lr_s::ilu_lvl, solver_matrix_s::lowrank, LR_InDiag, LR_InSele, LR_OffDiag, solver_blok_s::LRblock, solver_cblk_s::ownerid, pastix_int_t, PastixLCoef, PastixUCoef, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, and solver_cblk_s::sndeidx.

◆ cpucblk_dgeaddsp1d()

int cpucblk_dgeaddsp1d ( const SolverCblk cblk1,
SolverCblk cblk2,
const double *  L,
double *  Cl,
const double *  U,
double *  Cu 
)

Add two column blocks together.

Perform the operation: cblk2 <- cblk1 + cblk2 using core_dgeadd().

Parameters
[in]cblk1The pointer to the data structure that describes the panel to add. Next column blok must be accessible through cblk1[1].
[in]cblk2The pointer to the data structure that describes the panel in which we add. Next column blok must be accessible through cblk2[1].
[in]LThe pointer to the lower matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width
[in,out]ClThe pointer to the lower matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cl = Cl + L.
[in]UThe pointer to the upper matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width. Ignored if NULL.
[in,out]CuThe pointer to the upper matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cu = Cu + U.
Return values
PASTIX_SUCCESSon success.

Definition at line 245 of file core_dgeadd.c.

References solver_blok_s::coefind, core_dgeadd(), solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, is_block_inside_fblock(), solver_cblk_s::lcolnum, solver_blok_s::lrownum, pastix_int_t, PASTIX_SUCCESS, PastixNoTrans, and solver_cblk_s::stride.

◆ cpucblk_dgemmsp()

pastix_fixdbl_t cpucblk_dgemmsp ( pastix_coefside_t  sideA,
pastix_trans_t  trans,
const SolverCblk cblk,
const SolverBlok blok,
SolverCblk fcblk,
const void *  A,
const void *  B,
void *  C,
double *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideASpecify if A and C belong to the lower part, or to the upper part. If sideA == PastixLCoef, the contribution of: (block .. (cblk[1].fblokptr-1)) -by- block is computed and added to C, otherwise the contribution: (block+1 .. (cblk[1].fblokptr-1)) -by- block is computed and added to C. The pointer to the data structure that describes the panel from which we compute the contributions. Next column blok must be accessible through cblk[1].
[in]transSpecify the transposition used for the B matrix. It has to be either PastixTrans or PastixTrans.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blokThe block from which we compute the contributions.
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]workTemporary memory buffer.
[in]lworkTODO
[in]lowrankThe structure with low-rank parameters.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 1529 of file core_dgemmsp.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, core_dgemmsp_1d1d(), core_dgemmsp_1d2d(), core_dgemmsp_2d2d(), core_dgemmsp_fulllr(), core_dgemmsp_lr(), core_dgemmsp_lrfr(), solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelGEMMCblk1d1d, PastixKernelGEMMCblk1d2d, PastixKernelGEMMCblk2d2d, PastixKernelGEMMCblkFRLR, PastixKernelGEMMCblkLRLR, PastixUCoef, and solver_cblk_s::stride.

Referenced by cpucblk_dgetrfsp1d(), cpucblk_dgetrfsp1dplus_update(), cpucblk_dpotrfsp1d(), cpucblk_dpotrfsp1dplus_update(), cpucblk_dsytrfsp1d(), and fct_cblk_dgemmsp_cpu().

◆ cpucblk_dtrsmsp()

void cpucblk_dtrsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to a column of off-diagonal blocks.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.

Definition at line 356 of file core_dtrsmsp.c.

Referenced by cpucblk_dgetrfsp1d_panel(), cpucblk_dpotrfsp1d_panel(), and cpucblk_dsytrfsp1d_panel().

◆ cpucblk_dscalo()

void cpucblk_dscalo ( pastix_trans_t  trans,
const SolverCblk cblk,
void *  dataL,
void *  dataLD 
)

Copy the L term with scaling for the two-terms algorithm.

Performs LD = op(L) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( L ) = L;
  • PastixTrans: Transpose, op( L ) = L;
  • PastixTrans: Conjugate Transpose, op( L ) = (L).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataLDThe pointer to the correct representation of LD.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 171 of file core_dscalo.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, core_dscalo(), solver_cblk_s::fblokptr, solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelSCALOCblk, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by cpucblk_dsytrfsp1d_panel().

◆ cpublok_dgemmsp()

pastix_fixdbl_t cpublok_dgemmsp ( pastix_trans_t  transB,
const SolverCblk cblk,
SolverCblk fcblk,
pastix_int_t  blok_mk,
pastix_int_t  blok_nk,
pastix_int_t  blok_mn,
const void *  A,
const void *  B,
void *  C,
const pastix_lr_t lowrank 
)

Compute the CPU gemm associated to a couple of off-diagonal blocks.

C_l = C_l - A_l * op(B_s), with B_s = B_l, or B_u or C_u = C_u - A_u * op(B_s), with B_s = B_l, or B_u

Parameters
[in]transBSpecify wheter B should be used as PastixNoTrans, PastixTrans, or PastixTrans in the computations.
[in]cblkThe cblk structure to which block A and B belong to. The A and B pointers must be one of the [lu]coeftab of this column block. Next column blok must be accessible through cblk[1].
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the [lu]coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]blok_mkSpecify the index of the A block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_nkSpecify the index of the B block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_mnSpecify the index of the C block in the fcblk column. This index is 0-based for the diagonal block.
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with the low-rank parameters.
Returns
TODO

Definition at line 1676 of file core_dgemmsp.c.

References solver_cblk_s::cblktype, core_dgemmsp_block_frfr(), core_dgemmsp_block_frlr(), and core_dgemmsp_block_lrlr().

Referenced by fct_blok_dgemmsp_cpu().

◆ cpublok_dtrsmsp()

pastix_fixdbl_t cpublok_dtrsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
pastix_int_t  blok_m,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the first off-diagonal block in cblk that is solved. The TRSM is also applied to all the folowing blocks which are facing the same diagonal block
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.
Return values
TODO

Definition at line 690 of file core_dtrsmsp.c.

References solver_cblk_s::cblktype, core_dtrsmsp_2dsub(), and core_dtrsmsp_lrsub().

Referenced by fct_blok_dtrsmsp_cpu().

◆ cpublok_dscalo()

void cpublok_dscalo ( pastix_trans_t  trans,
const SolverCblk cblk,
pastix_int_t  blok_m,
const void *  dataA,
const void *  dataD,
void *  dataB 
)

Copy the lower terms of the block with scaling for the two-terms algorithm.

Performs B = op(A) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( A ) = A;
  • PastixTrans: Transpose, op( A ) = A;
  • PastixTrans: Conjugate Transpose, op( A ) = (A).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the off-diagonal block to be solved in the cblk. All blocks facing the same cblk, in the current column block will be solved.
[in]dataAThe pointer to the correct representation of data of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]dataDThe pointer to the correct representation of data of D.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataBThe pointer to the correct representation of data of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 316 of file core_dscalo.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, core_dscalo(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, pastix_int_t, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by fct_blok_dscalo_cpu().

◆ cpucblk_dgetrfsp1d_getrf()

int cpucblk_dgetrfsp1d_getrf ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  dataL,
void *  dataU 
)

Compute the LU factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataUThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 217 of file core_dgetrfsp.c.

References solver_cblk_s::cblktype, core_dgeadd(), solver_matrix_s::diagthreshold, solver_cblk_s::fcolnum, kernel_trace_start(), solver_cblk_s::lcolnum, pastix_int_t, PastixKernelGETRF, PastixTrans, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, and pastix_lrblock_s::u.

Referenced by cpucblk_dgetrfsp1d_panel(), and fct_blok_dgetrfsp_cpu().

◆ cpucblk_dgetrfsp1d_panel()

int cpucblk_dgetrfsp1d_panel ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  L,
void *  U 
)

Compute the LU factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]UThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 305 of file core_dgetrfsp.c.

References cpucblk_dgetrfsp1d_getrf(), cpucblk_dtrsmsp(), solver_matrix_s::lowrank, pastix_int_t, PastixNonUnit, PastixNoTrans, PastixRight, PastixUnit, and PastixUpper.

Referenced by cpucblk_dgetrfsp1d(), and cpucblk_dgetrfsp1dplus().

◆ cpucblk_dgetrfsp1d()

int cpucblk_dgetrfsp1d ( SolverMatrix solvmtx,
SolverCblk cblk,
double *  work,
pastix_int_t  lwork 
)

Perform the LU factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 355 of file core_dgetrfsp.c.

References cblk_getdataL(), cblk_getdataU(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, cpucblk_dalloc(), cpucblk_dgemmsp(), cpucblk_dgetrfsp1d_panel(), cpucblk_drelease_deps(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_matrix_s::lowrank, pastix_int_t, PastixLCoef, PastixLUCoef, PastixTrans, and PastixUCoef.

Referenced by sequential_dgetrf(), thread_dgetrf_dynamic(), and thread_dgetrf_static().

◆ cpucblk_dpotrfsp1d_potrf()

int cpucblk_dpotrfsp1d_potrf ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  dataL 
)

Compute the Cholesky factorization of the diagonal block in a panel.

Warning
This routine will fail if it discovers a null or negative value on the diagonal during factorization.
Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 220 of file core_dpotrfsp.c.

References solver_cblk_s::cblktype, solver_matrix_s::diagthreshold, solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, kernel_trace_start(), solver_cblk_s::lcolnum, solver_blok_s::lrownum, pastix_int_t, PastixKernelPOTRF, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, and pastix_lrblock_s::u.

Referenced by cpucblk_dpotrfsp1d_panel(), and fct_blok_dpotrfsp_cpu().

◆ cpucblk_dpotrfsp1d_panel()

int cpucblk_dpotrfsp1d_panel ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  L 
)

Compute the Cholesky factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 292 of file core_dpotrfsp.c.

References cpucblk_dpotrfsp1d_potrf(), cpucblk_dtrsmsp(), solver_matrix_s::lowrank, pastix_int_t, PastixLower, PastixNonUnit, PastixRight, and PastixTrans.

Referenced by cpucblk_dpotrfsp1d(), and cpucblk_dpotrfsp1dplus().

◆ cpucblk_dpotrfsp1d()

int cpucblk_dpotrfsp1d ( SolverMatrix solvmtx,
SolverCblk cblk,
double *  work,
pastix_int_t  lwork 
)

Perform the Cholesky factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 334 of file core_dpotrfsp.c.

References cblk_getdataL(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, cpucblk_dalloc(), cpucblk_dgemmsp(), cpucblk_dpotrfsp1d_panel(), cpucblk_drelease_deps(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_matrix_s::lowrank, pastix_int_t, PastixLCoef, and PastixTrans.

Referenced by sequential_dpotrf(), thread_dpotrf_dynamic(), and thread_dpotrf_static().

◆ cpucblk_dsytrfsp1d_sytrf()

int cpucblk_dsytrfsp1d_sytrf ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  dataL 
)

Computes the LDL^t factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 234 of file core_dsytrfsp.c.

References solver_cblk_s::cblktype, solver_matrix_s::diagthreshold, solver_cblk_s::fcolnum, kernel_trace_start(), solver_cblk_s::lcolnum, pastix_int_t, PastixKernelSYTRF, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, and pastix_lrblock_s::u.

Referenced by cpucblk_dsytrfsp1d_panel().

◆ cpucblk_dsytrfsp1d_panel()

int cpucblk_dsytrfsp1d_panel ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  L,
void *  DLt 
)

Compute the LDL^t factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]DLtThe pointer to the correct representation of DLt matrix (stored in the upper part by default).
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 432 of file core_dsytrfsp.c.

References solver_cblk_s::cblktype, cpucblk_dscalo(), cpucblk_dsytrfsp1d_sytrf(), cpucblk_dtrsmsp(), solver_matrix_s::lowrank, pastix_int_t, PastixNonUnit, PastixNoTrans, PastixRight, and PastixUpper.

Referenced by cpucblk_dsytrfsp1d(), and cpucblk_dsytrfsp1dplus().

◆ cpucblk_dsytrfsp1d()

int cpucblk_dsytrfsp1d ( SolverMatrix solvmtx,
SolverCblk cblk,
double *  DLt,
double *  work,
pastix_int_t  lwork 
)

Perform the LDL^t factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]DLtTemporary memory buffer to store the transpose of DLt.
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 487 of file core_dsytrfsp.c.

References cblk_getdataL(), cblk_getdataU(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, core_dsytrfsp1d_gemm(), cpucblk_dalloc(), cpucblk_dalloc_lrws(), cpucblk_dgemmsp(), cpucblk_drelease_deps(), cpucblk_dsytrfsp1d_panel(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_matrix_s::lowrank, pastix_int_t, PastixLCoef, and PastixTrans.

Referenced by sequential_dsytrf(), thread_dsytrf_dynamic(), and thread_dsytrf_static().

◆ cpucblk_dalloc_lrws()

void cpucblk_dalloc_lrws ( const SolverCblk cblk,
pastix_lrblock_t lrblok,
double *  ws 
)

Initialize lrblock structure from a workspace for all blocks of the cblk associated.

The lrblock structure must be allocated before.

Parameters
[in,out]cblkThe column block associated to the initialization.
[in]lrblokThe structure blok to initialize. Must be allocated before.
[in]wsThe workspace associated with the data that will be used for initialize lrblok.

Definition at line 98 of file cpucblk_dinit.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_cblk_s::fblokptr, pastix_int_t, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by cpucblk_dsytrfsp1d().

◆ cpucblk_dalloc_lr()

void cpucblk_dalloc_lr ( pastix_coefside_t  side,
SolverCblk cblk,
int  rkmax 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.
[in]rkmaxTODO

Definition at line 148 of file cpucblk_dinit.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, core_dlralloc(), solver_cblk_s::fblokptr, solver_cblk_s::lcoeftab, solver_blok_s::LRblock, pastix_int_t, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_dalloc(), and cpucblk_dunpack_lr().

◆ cpucblk_dalloc_fr()

void cpucblk_dalloc_fr ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 222 of file cpucblk_dinit.c.

References cblk_colnbr(), solver_cblk_s::lcoeftab, PastixLCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_dalloc().

◆ cpucblk_dalloc()

void cpucblk_dalloc ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 269 of file cpucblk_dinit.c.

References solver_cblk_s::cblktype, cpucblk_dalloc_fr(), cpucblk_dalloc_lr(), solver_cblk_s::lcoeftab, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_dgetrfsp1d(), cpucblk_dgetrfsp1dplus_update(), cpucblk_dinit(), cpucblk_dpotrfsp1d(), cpucblk_dpotrfsp1dplus_update(), cpucblk_dsytrfsp1d(), and cpucblk_dsytrfsp1dplus_update().

◆ cpucblk_dfree()

void cpucblk_dfree ( pastix_coefside_t  side,
SolverCblk cblk 
)

Free the cblk structure that store the coefficient.

This routines performs the free and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to free.

Definition at line 322 of file cpucblk_dinit.c.

References solver_cblk_s::cblktype, core_dlrfree(), solver_cblk_s::fblokptr, solver_cblk_s::lcoeftab, solver_blok_s::LRblock, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

◆ cpucblk_dfillin()

void cpucblk_dfillin ( pastix_coefside_t  side,
const SolverMatrix solvmtx,
const pastix_bcsc_t *  bcsc,
pastix_int_t  itercblk 
)

Initialize the coeftab structure from the internal bcsc.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxPaStiX structure to store numerical data and flags
[in]bcscThe internal bcsc structure that hold the graph with permutation stored by cblk.
[in]itercblkThe index of the cblk to fill in both bcsc and solvmtx structures.

Definition at line 628 of file cpucblk_dinit.c.

References solver_matrix_s::cblktab, cpucblk_dfillin_fr(), and cpucblk_dfillin_lr().

Referenced by cpucblk_dinit().

◆ cpucblk_dinit()

void cpucblk_dinit ( pastix_coefside_t  side,
const SolverMatrix solvmtx,
const pastix_bcsc_t *  bcsc,
pastix_int_t  itercblk,
const char *  directory 
)

Fully initialize a single cblk.

The cblk is allocated, intialized from the bcsc, and compressed if necessary.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe solver matrix data structure.
[in]bcscThe internal block CSC structure to fill-in the matrix.
[in]itercblkThe index of the cblk to initialize.
[in,out]directoryThe pointer to the temporary directory where to store the output files. Used only if PASTIX_DEBUG_DUMP_COEFTAB is defined.

Try to compress the cblk if needs to be compressed

Definition at line 226 of file coeftab_dinit.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, coeftabComputeCblkILULevels(), cpucblk_dalloc(), cpucblk_dcompress(), cpucblk_ddumpfile(), cpucblk_dfillin(), solver_cblk_s::ctrbcnt, solver_matrix_s::globalalloc, pastix_lr_s::ilu_lvl, and solver_matrix_s::lowrank.

◆ cpucblk_dgetschur()

void cpucblk_dgetschur ( const SolverCblk cblk,
int  upper_part,
double *  S,
pastix_int_t  lds 
)

Extract a cblk panel of the Schur complement to a dense lapack form.

Parameters
[in]cblkThe column block to extract in the Schur array
[in]upper_partIf true, the upper part is also extracted in S.
[in,out]SThe pointer to the top of the column of the cblk in the Schur array. On exit, the computed coefficient are copy to this array.
[in]ldsThe leading dimension of the S array.

Definition at line 182 of file cpucblk_dschur.c.

References solver_cblk_s::cblktype, cpucblk_dgetschur_fr(), and cpucblk_dgetschur_lr().

Referenced by coeftab_dgetschur().

◆ cpucblk_ddump()

void cpucblk_ddump ( pastix_coefside_t  side,
const SolverCblk cblk,
FILE *  stream 
)

Dump a single column block into a FILE in a human readale format.

All non-zeroes coefficients are dumped in the format: i j val with one value per row.

Parameters
[in]sideDefine which side of the cblk must be printed.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
[in]cblkThe column block to dump into the file.
[in,out]streamThe FILE structure opened in write mode.

Definition at line 54 of file coeftab_dinit.c.

References blok_rownbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, solver_cblk_s::lcoeftab, pastix_int_t, PastixUCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by coeftab_ddump(), and cpucblk_ddumpfile().

◆ cpucblk_ddiff()

int cpucblk_ddiff ( pastix_coefside_t  side,
const SolverCblk cblkA,
SolverCblk cblkB 
)

Compare two column blocks in full-rank format.

The second cblk is overwritten by the difference of the two column blocks. The frobenius norm of the difference is computed and the functions returns 0 if the result: || B - A || / ( || A || * eps )

is below 10. Otherwise, an error message is printed and 1 is returned.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix that matches the A matrix in stucture. On exit, cblkB coefficient arrays are overwritten by the result of (B-A).
Returns
0 if the test is passed, >= 0 otherwise.

Definition at line 63 of file cpucblk_ddiff.c.

References cblk_colnbr(), core_dgeadd(), solver_cblk_s::lcoeftab, pastix_int_t, PastixLCoef, PastixNoTrans, PastixUCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by coeftab_ddiff().

◆ cpucblk_dadd()

pastix_fixdbl_t cpucblk_dadd ( double  alpha,
const SolverCblk cblkA,
SolverCblk cblkB,
const void *  A,
void *  B,
double *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Add two column bloks in full rank format.

The second cblk is overwritten by the sum of the two column blocks. B <- alpha * A + B

Parameters
[in]alphaThe scalar alpha
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix On exit, cblkB coefficient arrays are overwritten by the result of alpha * A + B.
[in,out]AThe pointer to the coeftab of the cblk.lcoeftab matrix storing the coefficients of the panel when the Lower part is computed, cblk.ucoeftab otherwise. Must be of size cblk.stride -by- cblk.width
[in]BThe pointer to the coeftab of the cblk.lcoeftab matrix storing the coefficients of the panel, if Symmetric/Symmetric cases or if upper part is computed; cblk.ucoeftab otherwise. Must be of size cblk.stride -by- cblk.width
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
[in]lowrankThe structure with low-rank parameters.
Returns
The number of flops of the operation.

Definition at line 391 of file cpucblk_dadd.c.

References cblk_colnbr(), solver_cblk_s::cblktype, cpucblk_dadd_frfr(), cpucblk_dadd_frlr(), cpucblk_dadd_lrlr(), solver_cblk_s::fblokptr, solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelGEADDCblkFRFR, PastixKernelGEADDCblkFRLR, PastixKernelGEADDCblkLRLR, and solver_cblk_s::stride.

Referenced by fct_cblk_dadd_cpu().

◆ cpublok_dadd()

pastix_fixdbl_t cpublok_dadd ( double  alpha,
const SolverCblk cblkA,
SolverCblk cblkB,
pastix_int_t  blokA_m,
pastix_int_t  blokB_m,
const void *  A,
void *  B,
double *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Add two bloks.

The second cblk is overwritten by the sum of the two blocks. B <- alpha * A + B

Parameters
[in]alphaThe scalar alpha
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix On exit, cblkB coefficient arrays are overwritten by the result of alpha * A + B.
[in]blokA_mIndex of the first off-diagonal block in cblk, that is used for A.
[in]blokB_mIndex of the first off-diagonal block in cblk, that is used for B.
[in,out]AThe pointer to the coeftab of the blok.lcoeftab matrix storing the coefficients of the panel when the Lower part is computed, blok.ucoeftab otherwise. Must be of size blok.stride -by- blok.width
[in,out]BThe pointer to the coeftab of the blok.lcoeftab matrix storing the coefficients of the panel, if Symmetric/Symmetric cases or if upper part is computed; blok.ucoeftab otherwise. Must be of size blok.stride -by- blok.width
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
[in]lowrankThe structure with low-rank parameters.
Returns
The number of flops of the operation.

Definition at line 431 of file cpublok_dadd.c.

References cblk_colnbr(), solver_cblk_s::cblktype, cpublok_dadd_frfr(), cpublok_dadd_frlr(), cpublok_dadd_lrlr(), solver_cblk_s::fblokptr, solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelGEADDCblkFRFR, PastixKernelGEADDCblkFRLR, PastixKernelGEADDCblkLRLR, and solver_cblk_s::stride.

Referenced by fct_blok_dadd_cpu().

◆ cpucblk_dincoming_deps()

int cpucblk_dincoming_deps ( int  rank,
pastix_coefside_t  side,
SolverMatrix solvmtx,
SolverCblk cblk 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]rankThe rank of the current thread.
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 543 of file cpucblk_dmpi_coeftab.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

Referenced by sequential_dgetrf(), sequential_dpotrf(), sequential_dsytrf(), thread_dgetrf_static(), thread_dpotrf_static(), and thread_dsytrf_static().

◆ cpucblk_drelease_deps()

void cpucblk_drelease_deps ( pastix_coefside_t  side,
SolverMatrix solvmtx,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 602 of file cpucblk_dmpi_coeftab.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, solver_cblk_s::ctrbcnt, pqueuePush1(), solver_cblk_s::priority, and solver_cblk_s::threadid.

Referenced by cpucblk_dgetrfsp1d(), cpucblk_dgetrfsp1dplus_update(), cpucblk_dpotrfsp1d(), cpucblk_dpotrfsp1dplus_update(), cpucblk_dsytrfsp1d(), and cpucblk_dsytrfsp1dplus_update().

◆ cpucblk_drequest_cleanup()

void cpucblk_drequest_cleanup ( pastix_coefside_t  side,
pastix_int_t  sched,
SolverMatrix solvmtx 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.

Definition at line 654 of file cpucblk_dmpi_coeftab.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_int_t, PastixSchedDynamic, PastixSchedSequential, PastixSchedStatic, solver_matrix_s::reqidx, solver_matrix_s::reqnum, and solver_matrix_s::reqtab.

◆ cpucblk_drelease_rhs_fwd_deps()

void cpucblk_drelease_rhs_fwd_deps ( const args_solve_t enums,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 765 of file cpucblk_dmpi_rhs_fwd.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_dincoming_rhs_fwd_deps()

int cpucblk_dincoming_rhs_fwd_deps ( int  rank,
const args_solve_t enums,
SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]rankThe rank of the current thread.
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 703 of file cpucblk_dmpi_rhs_fwd.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_drequest_rhs_fwd_cleanup()

void cpucblk_drequest_rhs_fwd_cleanup ( const args_solve_t enums,
pastix_int_t  sched,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]enumsEnums needed for the solve.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 821 of file cpucblk_dmpi_rhs_fwd.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_int_t, PastixSchedDynamic, PastixSchedSequential, PastixSchedStatic, solver_matrix_s::reqidx, solver_matrix_s::reqnum, and solver_matrix_s::reqtab.

◆ cpucblk_drelease_rhs_bwd_deps()

void cpucblk_drelease_rhs_bwd_deps ( const args_solve_t enums,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 527 of file cpucblk_dmpi_rhs_bwd.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, solver_cblk_s::ctrbcnt, pqueuePush1(), solver_cblk_s::priority, and solver_cblk_s::threadid.

◆ cpucblk_dincoming_rhs_bwd_deps()

int cpucblk_dincoming_rhs_bwd_deps ( int  rank,
const args_solve_t enums,
SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]rankThe rank of the current thread.
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 465 of file cpucblk_dmpi_rhs_bwd.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_drequest_rhs_bwd_cleanup()

void cpucblk_drequest_rhs_bwd_cleanup ( const args_solve_t enums,
pastix_int_t  sched,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]enumsEnums needed for the solve.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 582 of file cpucblk_dmpi_rhs_bwd.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_int_t, PastixSchedDynamic, PastixSchedSequential, PastixSchedStatic, solver_matrix_s::reqidx, solver_matrix_s::reqnum, and solver_matrix_s::reqtab.

◆ cpucblk_dsend_rhs_forward()

void cpucblk_dsend_rhs_forward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 48 of file cpucblk_dmpi_rhs_fwd.c.

References solver_cblk_s::bcscnum, cblk_colnbr(), pastix_rhs_s::cblkb, solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpucblk_drecv_rhs_forward()

void cpucblk_drecv_rhs_forward ( const SolverMatrix solvmtx,
SolverCblk cblk,
double *  work,
pastix_rhs_t  rhsb 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]workThe temporary buffer to receive the remote data
[in,out]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 229 of file cpucblk_dmpi_rhs_fwd.c.

References pastix_rhs_s::b, cblk_colnbr(), solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpucblk_dsend_rhs_backward()

void cpucblk_dsend_rhs_backward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 105 of file cpucblk_dmpi_rhs_fwd.c.

References pastix_rhs_s::b, solver_cblk_s::bcscnum, cblk_colnbr(), pastix_rhs_s::cblkb, solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::ld, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpucblk_drecv_rhs_backward()

void cpucblk_drecv_rhs_backward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 168 of file cpucblk_dmpi_rhs_fwd.c.

References solver_cblk_s::bcscnum, cblk_colnbr(), pastix_rhs_s::cblkb, solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpublok_dcompress()

pastix_fixdbl_t cpublok_dcompress ( const pastix_lr_t lowrank,
pastix_int_t  M,
pastix_int_t  N,
pastix_lrblock_t lrA 
)

Compress a single block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]lowrankThe pointer to the low-rank structure describing the lo-rank compression parameters.
[in]MThe number of rows in the block
[in]NThe number of columns in the block
[in,out]lrAThe block to compress. On input, it points to a full-rank matrix. On output, if possible the matrix is compressed in block low-rank format.
Returns
The number of flops used to compress the block.

Definition at line 57 of file cpucblk_dcompress.c.

References pastix_lrblock_s::rk, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by core_dtrsmsp_lr(), core_dtrsmsp_lrsub(), and cpucblk_dcompress().

◆ cpucblk_dcompress()

pastix_int_t cpucblk_dcompress ( const SolverMatrix solvmtx,
pastix_coefside_t  side,
int  max_ilulvl,
SolverCblk cblk 
)

Compress a single column block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]solvmtxThe pointer to the solver structure.
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]max_ilulvlTODO
[in,out]cblkThe column block to compress.
Returns
The memory gain resulting from the compression to low-rank format in number of elements.

Definition at line 114 of file cpucblk_dcompress.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, cpublok_dcompress(), solver_cblk_s::fblokptr, solver_blok_s::iluklvl, solver_matrix_s::lowrank, solver_blok_s::LRblock, pastix_int_t, PastixLCoef, PastixUCoef, and pastix_lrblock_s::rk.

Referenced by coeftab_dcompress(), cpucblk_dinit(), cpucblk_dmemory(), and pcoeftabComp().

◆ cpucblk_duncompress()

void cpucblk_duncompress ( pastix_coefside_t  side,
SolverCblk cblk 
)

Uncompress a single column block from low-rank format to full-rank format.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to uncompress.

Definition at line 201 of file cpucblk_dcompress.c.

References blok_rownbr(), cblk_colnbr(), core_dlr2ge(), core_dlralloc(), core_dlrfree(), solver_cblk_s::fblokptr, solver_blok_s::LRblock, pastix_int_t, PastixLCoef, PastixNoTrans, PastixUCoef, and pastix_lrblock_s::u.

Referenced by coeftab_duncompress().

◆ cpucblk_dmemory()

void cpucblk_dmemory ( pastix_coefside_t  side,
const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_int_t orig,
pastix_int_t gain 
)

Return the memory gain of the low-rank form over the full-rank form for a single column-block.

This function returns the memory gain in number of elements for a single column block when it is stored in low-rank format compared to a full rank storage.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe pointer to the solver structure.
[in]cblkThe column block to study.
[in,out]origThe structure that counts the original cost of the blocks.
[in,out]gainThe structure that counts gain on each type of the blocks.

Definition at line 281 of file cpucblk_dcompress.c.

References blok_is_preselected(), blok_rownbr(), cblk_colnbr(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_lr_s::compress_preselect, cpucblk_dcompress(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, pastix_lr_s::ilu_lvl, solver_matrix_s::lowrank, LR_InDiag, LR_InSele, LR_OffDiag, solver_blok_s::LRblock, solver_cblk_s::ownerid, pastix_int_t, PastixLCoef, PastixUCoef, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, and solver_cblk_s::sndeidx.

◆ cpucblk_zgeaddsp1d()

int cpucblk_zgeaddsp1d ( const SolverCblk cblk1,
SolverCblk cblk2,
const pastix_complex64_t *  L,
pastix_complex64_t *  Cl,
const pastix_complex64_t *  U,
pastix_complex64_t *  Cu 
)

Add two column blocks together.

Perform the operation: cblk2 <- cblk1 + cblk2 using core_zgeadd().

Parameters
[in]cblk1The pointer to the data structure that describes the panel to add. Next column blok must be accessible through cblk1[1].
[in]cblk2The pointer to the data structure that describes the panel in which we add. Next column blok must be accessible through cblk2[1].
[in]LThe pointer to the lower matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width
[in,out]ClThe pointer to the lower matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cl = Cl + L.
[in]UThe pointer to the upper matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width. Ignored if NULL.
[in,out]CuThe pointer to the upper matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cu = Cu + U.
Return values
PASTIX_SUCCESSon success.

Definition at line 245 of file core_zgeadd.c.

References solver_blok_s::coefind, core_zgeadd(), solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, is_block_inside_fblock(), solver_cblk_s::lcolnum, solver_blok_s::lrownum, pastix_int_t, PASTIX_SUCCESS, PastixNoTrans, and solver_cblk_s::stride.

◆ cpucblk_zgemmsp()

pastix_fixdbl_t cpucblk_zgemmsp ( pastix_coefside_t  sideA,
pastix_trans_t  trans,
const SolverCblk cblk,
const SolverBlok blok,
SolverCblk fcblk,
const void *  A,
const void *  B,
void *  C,
pastix_complex64_t *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideASpecify if A and C belong to the lower part, or to the upper part. If sideA == PastixLCoef, the contribution of: (block .. (cblk[1].fblokptr-1)) -by- block is computed and added to C, otherwise the contribution: (block+1 .. (cblk[1].fblokptr-1)) -by- block is computed and added to C. The pointer to the data structure that describes the panel from which we compute the contributions. Next column blok must be accessible through cblk[1].
[in]transSpecify the transposition used for the B matrix. It has to be either PastixTrans or PastixConjTrans.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blokThe block from which we compute the contributions.
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]workTemporary memory buffer.
[in]lworkTODO
[in]lowrankThe structure with low-rank parameters.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 1529 of file core_zgemmsp.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, core_zgemmsp_1d1d(), core_zgemmsp_1d2d(), core_zgemmsp_2d2d(), core_zgemmsp_fulllr(), core_zgemmsp_lr(), core_zgemmsp_lrfr(), solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelGEMMCblk1d1d, PastixKernelGEMMCblk1d2d, PastixKernelGEMMCblk2d2d, PastixKernelGEMMCblkFRLR, PastixKernelGEMMCblkLRLR, PastixUCoef, and solver_cblk_s::stride.

Referenced by cpucblk_zgetrfsp1d(), cpucblk_zgetrfsp1dplus_update(), cpucblk_zhetrfsp1d(), cpucblk_zpotrfsp1d(), cpucblk_zpotrfsp1dplus_update(), cpucblk_zpxtrfsp1d(), cpucblk_zpxtrfsp1dplus_update(), cpucblk_zsytrfsp1d(), and fct_cblk_zgemmsp_cpu().

◆ cpucblk_ztrsmsp()

void cpucblk_ztrsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to a column of off-diagonal blocks.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixConjTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.

Definition at line 356 of file core_ztrsmsp.c.

Referenced by cpucblk_zgetrfsp1d_panel(), cpucblk_zhetrfsp1d_panel(), cpucblk_zpotrfsp1d_panel(), cpucblk_zpxtrfsp1d_panel(), and cpucblk_zsytrfsp1d_panel().

◆ cpucblk_zscalo()

void cpucblk_zscalo ( pastix_trans_t  trans,
const SolverCblk cblk,
void *  dataL,
void *  dataLD 
)

Copy the L term with scaling for the two-terms algorithm.

Performs LD = op(L) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( L ) = L;
  • PastixTrans: Transpose, op( L ) = L;
  • PastixConjTrans: Conjugate Transpose, op( L ) = conj(L).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataLDThe pointer to the correct representation of LD.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 171 of file core_zscalo.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, core_zscalo(), solver_cblk_s::fblokptr, solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelSCALOCblk, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by cpucblk_zhetrfsp1d_panel(), and cpucblk_zsytrfsp1d_panel().

◆ cpublok_zgemmsp()

pastix_fixdbl_t cpublok_zgemmsp ( pastix_trans_t  transB,
const SolverCblk cblk,
SolverCblk fcblk,
pastix_int_t  blok_mk,
pastix_int_t  blok_nk,
pastix_int_t  blok_mn,
const void *  A,
const void *  B,
void *  C,
const pastix_lr_t lowrank 
)

Compute the CPU gemm associated to a couple of off-diagonal blocks.

C_l = C_l - A_l * op(B_s), with B_s = B_l, or B_u or C_u = C_u - A_u * op(B_s), with B_s = B_l, or B_u

Parameters
[in]transBSpecify wheter B should be used as PastixNoTrans, PastixTrans, or PastixConjTrans in the computations.
[in]cblkThe cblk structure to which block A and B belong to. The A and B pointers must be one of the [lu]coeftab of this column block. Next column blok must be accessible through cblk[1].
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the [lu]coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]blok_mkSpecify the index of the A block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_nkSpecify the index of the B block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_mnSpecify the index of the C block in the fcblk column. This index is 0-based for the diagonal block.
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with the low-rank parameters.
Returns
TODO

Definition at line 1676 of file core_zgemmsp.c.

References solver_cblk_s::cblktype, core_zgemmsp_block_frfr(), core_zgemmsp_block_frlr(), and core_zgemmsp_block_lrlr().

Referenced by fct_blok_zgemmsp_cpu().

◆ cpublok_ztrsmsp()

pastix_fixdbl_t cpublok_ztrsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
pastix_int_t  blok_m,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixConjTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the first off-diagonal block in cblk that is solved. The TRSM is also applied to all the folowing blocks which are facing the same diagonal block
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.
Return values
TODO

Definition at line 690 of file core_ztrsmsp.c.

References solver_cblk_s::cblktype, core_ztrsmsp_2dsub(), and core_ztrsmsp_lrsub().

Referenced by fct_blok_ztrsmsp_cpu().

◆ cpublok_zscalo()

void cpublok_zscalo ( pastix_trans_t  trans,
const SolverCblk cblk,
pastix_int_t  blok_m,
const void *  dataA,
const void *  dataD,
void *  dataB 
)

Copy the lower terms of the block with scaling for the two-terms algorithm.

Performs B = op(A) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( A ) = A;
  • PastixTrans: Transpose, op( A ) = A;
  • PastixConjTrans: Conjugate Transpose, op( A ) = conj(A).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the off-diagonal block to be solved in the cblk. All blocks facing the same cblk, in the current column block will be solved.
[in]dataAThe pointer to the correct representation of data of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]dataDThe pointer to the correct representation of data of D.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataBThe pointer to the correct representation of data of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 316 of file core_zscalo.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, core_zscalo(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, pastix_int_t, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by fct_blok_zscalo_cpu().

◆ cpucblk_zgetrfsp1d_getrf()

int cpucblk_zgetrfsp1d_getrf ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  dataL,
void *  dataU 
)

Compute the LU factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataUThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 217 of file core_zgetrfsp.c.

References solver_cblk_s::cblktype, core_zgeadd(), solver_matrix_s::diagthreshold, solver_cblk_s::fcolnum, kernel_trace_start(), solver_cblk_s::lcolnum, pastix_int_t, PastixKernelGETRF, PastixTrans, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, and pastix_lrblock_s::u.

Referenced by cpucblk_zgetrfsp1d_panel(), and fct_blok_zgetrfsp_cpu().

◆ cpucblk_zgetrfsp1d_panel()

int cpucblk_zgetrfsp1d_panel ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  L,
void *  U 
)

Compute the LU factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]UThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 305 of file core_zgetrfsp.c.

References cpucblk_zgetrfsp1d_getrf(), cpucblk_ztrsmsp(), solver_matrix_s::lowrank, pastix_int_t, PastixNonUnit, PastixNoTrans, PastixRight, PastixUnit, and PastixUpper.

Referenced by cpucblk_zgetrfsp1d(), and cpucblk_zgetrfsp1dplus().

◆ cpucblk_zgetrfsp1d()

int cpucblk_zgetrfsp1d ( SolverMatrix solvmtx,
SolverCblk cblk,
pastix_complex64_t *  work,
pastix_int_t  lwork 
)

Perform the LU factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 355 of file core_zgetrfsp.c.

References cblk_getdataL(), cblk_getdataU(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, cpucblk_zalloc(), cpucblk_zgemmsp(), cpucblk_zgetrfsp1d_panel(), cpucblk_zrelease_deps(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_matrix_s::lowrank, pastix_int_t, PastixLCoef, PastixLUCoef, PastixTrans, and PastixUCoef.

Referenced by sequential_zgetrf(), thread_zgetrf_dynamic(), and thread_zgetrf_static().

◆ cpucblk_zpotrfsp1d_potrf()

int cpucblk_zpotrfsp1d_potrf ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  dataL 
)

Compute the Cholesky factorization of the diagonal block in a panel.

Warning
This routine will fail if it discovers a null or negative value on the diagonal during factorization.
Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 220 of file core_zpotrfsp.c.

References solver_cblk_s::cblktype, solver_matrix_s::diagthreshold, solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, kernel_trace_start(), solver_cblk_s::lcolnum, solver_blok_s::lrownum, pastix_int_t, PastixKernelPOTRF, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, and pastix_lrblock_s::u.

Referenced by cpucblk_zpotrfsp1d_panel(), and fct_blok_zpotrfsp_cpu().

◆ cpucblk_zpotrfsp1d_panel()

int cpucblk_zpotrfsp1d_panel ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  L 
)

Compute the Cholesky factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 292 of file core_zpotrfsp.c.

References cpucblk_zpotrfsp1d_potrf(), cpucblk_ztrsmsp(), solver_matrix_s::lowrank, pastix_int_t, PastixConjTrans, PastixLower, PastixNonUnit, and PastixRight.

Referenced by cpucblk_zpotrfsp1d(), and cpucblk_zpotrfsp1dplus().

◆ cpucblk_zpotrfsp1d()

int cpucblk_zpotrfsp1d ( SolverMatrix solvmtx,
SolverCblk cblk,
pastix_complex64_t *  work,
pastix_int_t  lwork 
)

Perform the Cholesky factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 334 of file core_zpotrfsp.c.

References cblk_getdataL(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, cpucblk_zalloc(), cpucblk_zgemmsp(), cpucblk_zpotrfsp1d_panel(), cpucblk_zrelease_deps(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_matrix_s::lowrank, pastix_int_t, PastixConjTrans, and PastixLCoef.

Referenced by sequential_zpotrf(), thread_zpotrf_dynamic(), and thread_zpotrf_static().

◆ cpucblk_zsytrfsp1d_sytrf()

int cpucblk_zsytrfsp1d_sytrf ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  dataL 
)

Computes the LDL^t factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 234 of file core_zsytrfsp.c.

References solver_cblk_s::cblktype, solver_matrix_s::diagthreshold, solver_cblk_s::fcolnum, kernel_trace_start(), solver_cblk_s::lcolnum, pastix_int_t, PastixKernelSYTRF, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, solver_cblk_s::stride, and pastix_lrblock_s::u.

Referenced by cpucblk_zsytrfsp1d_panel().

◆ cpucblk_zsytrfsp1d_panel()

int cpucblk_zsytrfsp1d_panel ( SolverMatrix solvmtx,
SolverCblk cblk,
void *  L,
void *  DLt 
)

Compute the LDL^t factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]DLtThe pointer to the correct representation of DLt matrix (stored in the upper part by default).
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 432 of file core_zsytrfsp.c.

References solver_cblk_s::cblktype, cpucblk_zscalo(), cpucblk_zsytrfsp1d_sytrf(), cpucblk_ztrsmsp(), solver_matrix_s::lowrank, pastix_int_t, PastixNonUnit, PastixNoTrans, PastixRight, and PastixUpper.

Referenced by cpucblk_zsytrfsp1d(), and cpucblk_zsytrfsp1dplus().

◆ cpucblk_zsytrfsp1d()

int cpucblk_zsytrfsp1d ( SolverMatrix solvmtx,
SolverCblk cblk,
pastix_complex64_t *  DLt,
pastix_complex64_t *  work,
pastix_int_t  lwork 
)

Perform the LDL^t factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]DLtTemporary memory buffer to store the transpose of DLt.
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 487 of file core_zsytrfsp.c.

References cblk_getdataL(), cblk_getdataU(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, core_zsytrfsp1d_gemm(), cpucblk_zalloc(), cpucblk_zalloc_lrws(), cpucblk_zgemmsp(), cpucblk_zrelease_deps(), cpucblk_zsytrfsp1d_panel(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_matrix_s::lowrank, pastix_int_t, PastixLCoef, and PastixTrans.

Referenced by sequential_zsytrf(), thread_zsytrf_dynamic(), and thread_zsytrf_static().

◆ cpucblk_zalloc_lrws()

void cpucblk_zalloc_lrws ( const SolverCblk cblk,
pastix_lrblock_t lrblok,
pastix_complex64_t *  ws 
)

Initialize lrblock structure from a workspace for all blocks of the cblk associated.

The lrblock structure must be allocated before.

Parameters
[in,out]cblkThe column block associated to the initialization.
[in]lrblokThe structure blok to initialize. Must be allocated before.
[in]wsThe workspace associated with the data that will be used for initialize lrblok.

Definition at line 98 of file cpucblk_zinit.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, solver_cblk_s::fblokptr, pastix_int_t, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by cpucblk_zhetrfsp1d(), and cpucblk_zsytrfsp1d().

◆ cpucblk_zalloc_lr()

void cpucblk_zalloc_lr ( pastix_coefside_t  side,
SolverCblk cblk,
int  rkmax 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.
[in]rkmaxTODO

Definition at line 148 of file cpucblk_zinit.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, core_zlralloc(), solver_cblk_s::fblokptr, solver_cblk_s::lcoeftab, solver_blok_s::LRblock, pastix_int_t, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_zalloc(), and cpucblk_zunpack_lr().

◆ cpucblk_zalloc_fr()

void cpucblk_zalloc_fr ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 222 of file cpucblk_zinit.c.

References cblk_colnbr(), solver_cblk_s::lcoeftab, PastixLCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_zalloc().

◆ cpucblk_zalloc()

void cpucblk_zalloc ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 269 of file cpucblk_zinit.c.

References solver_cblk_s::cblktype, cpucblk_zalloc_fr(), cpucblk_zalloc_lr(), solver_cblk_s::lcoeftab, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_zgetrfsp1d(), cpucblk_zgetrfsp1dplus_update(), cpucblk_zhetrfsp1d(), cpucblk_zhetrfsp1dplus_update(), cpucblk_zinit(), cpucblk_zpotrfsp1d(), cpucblk_zpotrfsp1dplus_update(), cpucblk_zpxtrfsp1d(), cpucblk_zpxtrfsp1dplus_update(), cpucblk_zsytrfsp1d(), and cpucblk_zsytrfsp1dplus_update().

◆ cpucblk_zfree()

void cpucblk_zfree ( pastix_coefside_t  side,
SolverCblk cblk 
)

Free the cblk structure that store the coefficient.

This routines performs the free and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to free.

Definition at line 322 of file cpucblk_zinit.c.

References solver_cblk_s::cblktype, core_zlrfree(), solver_cblk_s::fblokptr, solver_cblk_s::lcoeftab, solver_blok_s::LRblock, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by coeftabExit().

◆ cpucblk_zfillin()

void cpucblk_zfillin ( pastix_coefside_t  side,
const SolverMatrix solvmtx,
const pastix_bcsc_t *  bcsc,
pastix_int_t  itercblk 
)

Initialize the coeftab structure from the internal bcsc.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxPaStiX structure to store numerical data and flags
[in]bcscThe internal bcsc structure that hold the graph with permutation stored by cblk.
[in]itercblkThe index of the cblk to fill in both bcsc and solvmtx structures.

Definition at line 628 of file cpucblk_zinit.c.

References solver_matrix_s::cblktab, cpucblk_zfillin_fr(), and cpucblk_zfillin_lr().

Referenced by cpucblk_zinit().

◆ cpucblk_zinit()

void cpucblk_zinit ( pastix_coefside_t  side,
const SolverMatrix solvmtx,
const pastix_bcsc_t *  bcsc,
pastix_int_t  itercblk,
const char *  directory 
)

Fully initialize a single cblk.

The cblk is allocated, intialized from the bcsc, and compressed if necessary.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe solver matrix data structure.
[in]bcscThe internal block CSC structure to fill-in the matrix.
[in]itercblkThe index of the cblk to initialize.
[in,out]directoryThe pointer to the temporary directory where to store the output files. Used only if PASTIX_DEBUG_DUMP_COEFTAB is defined.

Try to compress the cblk if needs to be compressed

Definition at line 226 of file coeftab_zinit.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, coeftabComputeCblkILULevels(), cpucblk_zalloc(), cpucblk_zcompress(), cpucblk_zdumpfile(), cpucblk_zfillin(), solver_cblk_s::ctrbcnt, solver_matrix_s::globalalloc, pastix_lr_s::ilu_lvl, and solver_matrix_s::lowrank.

◆ cpucblk_zgetschur()

void cpucblk_zgetschur ( const SolverCblk cblk,
int  upper_part,
pastix_complex64_t *  S,
pastix_int_t  lds 
)

Extract a cblk panel of the Schur complement to a dense lapack form.

Parameters
[in]cblkThe column block to extract in the Schur array
[in]upper_partIf true, the upper part is also extracted in S.
[in,out]SThe pointer to the top of the column of the cblk in the Schur array. On exit, the computed coefficient are copy to this array.
[in]ldsThe leading dimension of the S array.

Definition at line 182 of file cpucblk_zschur.c.

References solver_cblk_s::cblktype, cpucblk_zgetschur_fr(), and cpucblk_zgetschur_lr().

Referenced by coeftab_zgetschur().

◆ cpucblk_zdump()

void cpucblk_zdump ( pastix_coefside_t  side,
const SolverCblk cblk,
FILE *  stream 
)

Dump a single column block into a FILE in a human readale format.

All non-zeroes coefficients are dumped in the format: i j val with one value per row.

Parameters
[in]sideDefine which side of the cblk must be printed.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
[in]cblkThe column block to dump into the file.
[in,out]streamThe FILE structure opened in write mode.

Definition at line 54 of file coeftab_zinit.c.

References blok_rownbr(), solver_cblk_s::cblktype, solver_blok_s::coefind, solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, solver_cblk_s::lcoeftab, pastix_int_t, PastixUCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by coeftab_zdump(), and cpucblk_zdumpfile().

◆ cpucblk_zdiff()

int cpucblk_zdiff ( pastix_coefside_t  side,
const SolverCblk cblkA,
SolverCblk cblkB 
)

Compare two column blocks in full-rank format.

The second cblk is overwritten by the difference of the two column blocks. The frobenius norm of the difference is computed and the functions returns 0 if the result: || B - A || / ( || A || * eps )

is below 10. Otherwise, an error message is printed and 1 is returned.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix that matches the A matrix in stucture. On exit, cblkB coefficient arrays are overwritten by the result of (B-A).
Returns
0 if the test is passed, >= 0 otherwise.

Definition at line 63 of file cpucblk_zdiff.c.

References cblk_colnbr(), core_zgeadd(), solver_cblk_s::lcoeftab, pastix_int_t, PastixLCoef, PastixNoTrans, PastixUCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by coeftab_zdiff().

◆ cpucblk_zadd()

pastix_fixdbl_t cpucblk_zadd ( pastix_complex64_t  alpha,
const SolverCblk cblkA,
SolverCblk cblkB,
const void *  A,
void *  B,
pastix_complex64_t *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Add two column bloks in full rank format.

The second cblk is overwritten by the sum of the two column blocks. B <- alpha * A + B

Parameters
[in]alphaThe scalar alpha
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix On exit, cblkB coefficient arrays are overwritten by the result of alpha * A + B.
[in,out]AThe pointer to the coeftab of the cblk.lcoeftab matrix storing the coefficients of the panel when the Lower part is computed, cblk.ucoeftab otherwise. Must be of size cblk.stride -by- cblk.width
[in]BThe pointer to the coeftab of the cblk.lcoeftab matrix storing the coefficients of the panel, if Symmetric/Hermitian cases or if upper part is computed; cblk.ucoeftab otherwise. Must be of size cblk.stride -by- cblk.width
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
[in]lowrankThe structure with low-rank parameters.
Returns
The number of flops of the operation.

Definition at line 391 of file cpucblk_zadd.c.

References cblk_colnbr(), solver_cblk_s::cblktype, cpucblk_zadd_frfr(), cpucblk_zadd_frlr(), cpucblk_zadd_lrlr(), solver_cblk_s::fblokptr, solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelGEADDCblkFRFR, PastixKernelGEADDCblkFRLR, PastixKernelGEADDCblkLRLR, and solver_cblk_s::stride.

Referenced by fct_cblk_zadd_cpu().

◆ cpublok_zadd()

pastix_fixdbl_t cpublok_zadd ( pastix_complex64_t  alpha,
const SolverCblk cblkA,
SolverCblk cblkB,
pastix_int_t  blokA_m,
pastix_int_t  blokB_m,
const void *  A,
void *  B,
pastix_complex64_t *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Add two bloks.

The second cblk is overwritten by the sum of the two blocks. B <- alpha * A + B

Parameters
[in]alphaThe scalar alpha
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix On exit, cblkB coefficient arrays are overwritten by the result of alpha * A + B.
[in]blokA_mIndex of the first off-diagonal block in cblk, that is used for A.
[in]blokB_mIndex of the first off-diagonal block in cblk, that is used for B.
[in,out]AThe pointer to the coeftab of the blok.lcoeftab matrix storing the coefficients of the panel when the Lower part is computed, blok.ucoeftab otherwise. Must be of size blok.stride -by- blok.width
[in,out]BThe pointer to the coeftab of the blok.lcoeftab matrix storing the coefficients of the panel, if Symmetric/Hermitian cases or if upper part is computed; blok.ucoeftab otherwise. Must be of size blok.stride -by- blok.width
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
[in]lowrankThe structure with low-rank parameters.
Returns
The number of flops of the operation.

Definition at line 431 of file cpublok_zadd.c.

References cblk_colnbr(), solver_cblk_s::cblktype, cpublok_zadd_frfr(), cpublok_zadd_frlr(), cpublok_zadd_lrlr(), solver_cblk_s::fblokptr, solver_blok_s::inlast, kernel_trace_start(), kernel_trace_stop(), pastix_int_t, PastixKernelGEADDCblkFRFR, PastixKernelGEADDCblkFRLR, PastixKernelGEADDCblkLRLR, and solver_cblk_s::stride.

Referenced by fct_blok_zadd_cpu().

◆ cpucblk_zincoming_deps()

int cpucblk_zincoming_deps ( int  rank,
pastix_coefside_t  side,
SolverMatrix solvmtx,
SolverCblk cblk 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]rankThe rank of the current thread.
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 543 of file cpucblk_zmpi_coeftab.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

Referenced by sequential_zgetrf(), sequential_zhetrf(), sequential_zpotrf(), sequential_zpxtrf(), sequential_zsytrf(), thread_zgetrf_static(), thread_zhetrf_static(), thread_zpotrf_static(), thread_zpxtrf_static(), and thread_zsytrf_static().

◆ cpucblk_zrelease_deps()

void cpucblk_zrelease_deps ( pastix_coefside_t  side,
SolverMatrix solvmtx,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 602 of file cpucblk_zmpi_coeftab.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, solver_cblk_s::ctrbcnt, pqueuePush1(), solver_cblk_s::priority, and solver_cblk_s::threadid.

Referenced by cpucblk_zgetrfsp1d(), cpucblk_zgetrfsp1dplus_update(), cpucblk_zhetrfsp1d(), cpucblk_zhetrfsp1dplus_update(), cpucblk_zpotrfsp1d(), cpucblk_zpotrfsp1dplus_update(), cpucblk_zpxtrfsp1d(), cpucblk_zpxtrfsp1dplus_update(), cpucblk_zsytrfsp1d(), and cpucblk_zsytrfsp1dplus_update().

◆ cpucblk_zrequest_cleanup()

void cpucblk_zrequest_cleanup ( pastix_coefside_t  side,
pastix_int_t  sched,
SolverMatrix solvmtx 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.

Definition at line 654 of file cpucblk_zmpi_coeftab.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_int_t, PastixSchedDynamic, PastixSchedSequential, PastixSchedStatic, solver_matrix_s::reqidx, solver_matrix_s::reqnum, and solver_matrix_s::reqtab.

◆ cpucblk_zrelease_rhs_fwd_deps()

void cpucblk_zrelease_rhs_fwd_deps ( const args_solve_t enums,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 765 of file cpucblk_zmpi_rhs_fwd.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_zincoming_rhs_fwd_deps()

int cpucblk_zincoming_rhs_fwd_deps ( int  rank,
const args_solve_t enums,
SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]rankThe rank of the current thread.
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 703 of file cpucblk_zmpi_rhs_fwd.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_zrequest_rhs_fwd_cleanup()

void cpucblk_zrequest_rhs_fwd_cleanup ( const args_solve_t enums,
pastix_int_t  sched,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]enumsEnums needed for the solve.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 821 of file cpucblk_zmpi_rhs_fwd.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_int_t, PastixSchedDynamic, PastixSchedSequential, PastixSchedStatic, solver_matrix_s::reqidx, solver_matrix_s::reqnum, and solver_matrix_s::reqtab.

◆ cpucblk_zrelease_rhs_bwd_deps()

void cpucblk_zrelease_rhs_bwd_deps ( const args_solve_t enums,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 527 of file cpucblk_zmpi_rhs_bwd.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, solver_cblk_s::ctrbcnt, pqueuePush1(), solver_cblk_s::priority, and solver_cblk_s::threadid.

◆ cpucblk_zincoming_rhs_bwd_deps()

int cpucblk_zincoming_rhs_bwd_deps ( int  rank,
const args_solve_t enums,
SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]rankThe rank of the current thread.
[in]enumsEnums needed for the solve.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 465 of file cpucblk_zmpi_rhs_bwd.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_zrequest_rhs_bwd_cleanup()

void cpucblk_zrequest_rhs_bwd_cleanup ( const args_solve_t enums,
pastix_int_t  sched,
SolverMatrix solvmtx,
pastix_rhs_t  rhsb 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]enumsEnums needed for the solve.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 582 of file cpucblk_zmpi_rhs_bwd.c.

References solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_int_t, PastixSchedDynamic, PastixSchedSequential, PastixSchedStatic, solver_matrix_s::reqidx, solver_matrix_s::reqnum, and solver_matrix_s::reqtab.

◆ cpucblk_zsend_rhs_forward()

void cpucblk_zsend_rhs_forward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 48 of file cpucblk_zmpi_rhs_fwd.c.

References solver_cblk_s::bcscnum, cblk_colnbr(), pastix_rhs_s::cblkb, solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpucblk_zrecv_rhs_forward()

void cpucblk_zrecv_rhs_forward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_complex64_t *  work,
pastix_rhs_t  rhsb 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]workThe temporary buffer to receive the remote data
[in,out]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 229 of file cpucblk_zmpi_rhs_fwd.c.

References pastix_rhs_s::b, cblk_colnbr(), solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpucblk_zsend_rhs_backward()

void cpucblk_zsend_rhs_backward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 105 of file cpucblk_zmpi_rhs_fwd.c.

References pastix_rhs_s::b, solver_cblk_s::bcscnum, cblk_colnbr(), pastix_rhs_s::cblkb, solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::ld, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpucblk_zrecv_rhs_backward()

void cpucblk_zrecv_rhs_backward ( const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_rhs_t  rhsb 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]rhsbThe pointer to the rhs data structure that holds the vectors of the right hand side.

Definition at line 168 of file cpucblk_zmpi_rhs_fwd.c.

References solver_cblk_s::bcscnum, cblk_colnbr(), pastix_rhs_s::cblkb, solver_cblk_s::cblktype, solver_cblk_s::gcblknum, solver_cblk_s::lcolidx, pastix_rhs_s::n, solver_cblk_s::ownerid, and pastix_int_t.

◆ cpublok_zcompress()

pastix_fixdbl_t cpublok_zcompress ( const pastix_lr_t lowrank,
pastix_int_t  M,
pastix_int_t  N,
pastix_lrblock_t lrA 
)

Compress a single block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]lowrankThe pointer to the low-rank structure describing the lo-rank compression parameters.
[in]MThe number of rows in the block
[in]NThe number of columns in the block
[in,out]lrAThe block to compress. On input, it points to a full-rank matrix. On output, if possible the matrix is compressed in block low-rank format.
Returns
The number of flops used to compress the block.

Definition at line 57 of file cpucblk_zcompress.c.

References pastix_lrblock_s::rk, pastix_lrblock_s::u, and pastix_lrblock_s::v.

Referenced by core_ztrsmsp_lr(), core_ztrsmsp_lrsub(), and cpucblk_zcompress().

◆ cpucblk_zcompress()

pastix_int_t cpucblk_zcompress ( const SolverMatrix solvmtx,
pastix_coefside_t  side,
int  max_ilulvl,
SolverCblk cblk 
)

Compress a single column block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]solvmtxThe pointer to the solver structure.
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]max_ilulvlTODO
[in,out]cblkThe column block to compress.
Returns
The memory gain resulting from the compression to low-rank format in number of elements.

Definition at line 114 of file cpucblk_zcompress.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, cpublok_zcompress(), solver_cblk_s::fblokptr, solver_blok_s::iluklvl, solver_matrix_s::lowrank, solver_blok_s::LRblock, pastix_int_t, PastixLCoef, PastixUCoef, and pastix_lrblock_s::rk.

Referenced by coeftab_zcompress(), cpucblk_zinit(), cpucblk_zmemory(), and pcoeftabComp().

◆ cpucblk_zuncompress()

void cpucblk_zuncompress ( pastix_coefside_t  side,
SolverCblk cblk 
)

Uncompress a single column block from low-rank format to full-rank format.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to uncompress.

Definition at line 201 of file cpucblk_zcompress.c.

References blok_rownbr(), cblk_colnbr(), core_zlr2ge(), core_zlralloc(), core_zlrfree(), solver_cblk_s::fblokptr, solver_blok_s::LRblock, pastix_int_t, PastixLCoef, PastixNoTrans, PastixUCoef, and pastix_lrblock_s::u.

Referenced by coeftab_zuncompress().

◆ cpucblk_zmemory()

void cpucblk_zmemory ( pastix_coefside_t  side,
const SolverMatrix solvmtx,
SolverCblk cblk,
pastix_int_t orig,
pastix_int_t gain 
)

Return the memory gain of the low-rank form over the full-rank form for a single column-block.

This function returns the memory gain in number of elements for a single column block when it is stored in low-rank format compared to a full rank storage.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe pointer to the solver structure.
[in]cblkThe column block to study.
[in,out]origThe structure that counts the original cost of the blocks.
[in,out]gainThe structure that counts gain on each type of the blocks.

Definition at line 281 of file cpucblk_zcompress.c.

References blok_is_preselected(), blok_rownbr(), cblk_colnbr(), solver_matrix_s::cblktab, solver_cblk_s::cblktype, pastix_lr_s::compress_preselect, cpucblk_zcompress(), solver_cblk_s::fblokptr, solver_blok_s::fcblknm, pastix_lr_s::ilu_lvl, solver_matrix_s::lowrank, LR_InDiag, LR_InSele, LR_OffDiag, solver_blok_s::LRblock, solver_cblk_s::ownerid, pastix_int_t, PastixLCoef, PastixUCoef, pastix_lrblock_s::rk, pastix_lrblock_s::rkmax, and solver_cblk_s::sndeidx.