#include <limits.h>
#include <math.h>
#include "superlu_ddefs.h"
#include "psymbfact.h"
Functions/Subroutines | |
static int_t * | intMalloc_symbfact (int_t) |
static int_t * | intCalloc_symbfact (int_t) |
static int_t | initParmsAndStats (psymbfact_stat_t *PS) |
static void | estimate_memUsage (int_t, int, mem_usage_t *, float *, float *, Pslu_freeable_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, comm_symbfact_t *, psymbfact_stat_t *) |
static void | symbfact_free (int, int, Llu_symbfact_t *, vtcsInfo_symbfact_t *, comm_symbfact_t *) |
static int_t | denseSep_symbfact (int, int_t, int, int, int, int_t *, int_t *, int, int, int, int_t, int_t, int_t *, int_t *, int_t *, int_t *, int_t *, MPI_Comm, MPI_Comm *, Llu_symbfact_t *, Pslu_freeable_t *_freeable, vtcsInfo_symbfact_t *, comm_symbfact_t *, psymbfact_stat_t *) |
static int_t | dnsUpSeps_symbfact (int_t, int, int, int, int, int_t *, int_t *, int_t, Llu_symbfact_t *, Pslu_freeable_t *, vtcsInfo_symbfact_t *, comm_symbfact_t *, psymbfact_stat_t *, int_t *, int_t *, int_t *) |
static void | intraLvl_symbfact (SuperMatrix *, int, int, int, int, int, int_t *, int_t *, int, int, int_t, int_t, Pslu_freeable_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, comm_symbfact_t *, psymbfact_stat_t *, int_t *, int_t *, int_t *, int_t *, int_t *, int_t *, int_t *, MPI_Comm, MPI_Comm *) |
static void | initLvl_symbfact (int_t n,int iam,int_t fstVtx,int_t lstVtx,Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact,vtcsInfo_symbfact_t *VInfo,psymbfact_stat_t *PS, MPI_Comm ndComm, int_t *marker, int_t nextl, int_t nextu) |
static void | createComm (int, int, MPI_Comm *, MPI_Comm *) |
static void | freeComm (int, int, MPI_Comm *, MPI_Comm *) |
static void | domain_symbfact (SuperMatrix *, int, int, int, int, int, int_t *, int_t *, int_t, int_t, Pslu_freeable_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, comm_symbfact_t *, psymbfact_stat_t *, int_t *, int_t *, int_t *, int_t *, int_t *, int_t *, int_t *) |
static float | allocPrune_domain (int_t fstVtx,int_t lstVtx,Llu_symbfact_t *Llu_symbfact,vtcsInfo_symbfact_t *VInfo,psymbfact_stat_t *PS) |
static float | allocPrune_lvl (Llu_symbfact_t *Llu_symbfact,vtcsInfo_symbfact_t *VInfo,psymbfact_stat_t *PS) |
static int | symbfact_alloc (int_t n,int nprocs,Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact,vtcsInfo_symbfact_t *VInfo,comm_symbfact_t *CS,psymbfact_stat_t *PS) |
static float | symbfact_mapVtcs (int, int, int, SuperMatrix *, int_t *, int_t *, Pslu_freeable_t *, vtcsInfo_symbfact_t *, int_t *, int_t, psymbfact_stat_t *) |
static void | symbfact_distributeMatrix (int, int, int, SuperMatrix *, int_t *, int_t *, matrix_symbfact_t *, Pslu_freeable_t *, vtcsInfo_symbfact_t *, int_t *, MPI_Comm *) |
static int_t | interLvl_symbfact (SuperMatrix *, int, int, int, int, int, int, int, int_t *, int_t *, int_t *, int_t *, int_t *, int_t *, int_t *, Llu_symbfact_t *, Pslu_freeable_t *, comm_symbfact_t *, vtcsInfo_symbfact_t *, psymbfact_stat_t *, MPI_Comm, MPI_Comm *) |
static float | cntsVtcs (int_t n,int iam,int nprocs_symb,Pslu_freeable_t *Pslu_freeable,Llu_symbfact_t *Llu_symbfact,vtcsInfo_symbfact_t *VInfo,int_t *tempArray,int_t *fstVtxSep,int_t *sizes,psymbfact_stat_t *PS,MPI_Comm *commLvls) |
float | symbfact_dist (int nprocs_num, int nprocs_symb, SuperMatrix *A, int_t *perm_c, int_t *perm_r, int_t *sizes, int_t *fstVtxSep, Pslu_freeable_t *Pslu_freeable, MPI_Comm *num_comm, MPI_Comm *symb_comm, mem_usage_t *symb_mem_usage) |
static int_t | symbfact_vtx (int_t n, int iam, int_t vtx, int_t vtx_lid, int_t vtx_prid, int_t computeL, int domain_symb, int_t fstVtx, int_t lstVtx, int_t snrep_lid, int_t szSn, int_t *p_next, int_t *marker, int_t *sub_rcvd, int_t sub_rcvd_sz, Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact, vtcsInfo_symbfact_t *VInfo, psymbfact_stat_t *PS, int_t *p_neltsVtxInit, int_t *p_neltsVtx, int_t *p_neltsVtx_CSep, int_t *p_neltsZrVtx, int_t *p_neltsMatched, int_t mark_vtx, int_t *p_prval_curvtx, int_t vtx_bel_othSn, int_t *p_vtx_bel_mySn) |
static int_t | updateRcvd_prGraph (int_t n, int iam, int_t *sub_rcvd, int_t sub_rcvd_sz, int_t fstVtx_toUpd, int_t lstVtx_toUpd, int_t pr_offset, int computeL, int_t *marker, Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact, vtcsInfo_symbfact_t *VInfo, psymbfact_stat_t *PS) |
static int_t | update_prGraph (int iam, int_t n, int_t fstVtx_blk, int_t lstVtx_blk, int_t snrep_lid, int_t pr_offset, int_t prval_cursn, int_t xsub_snp1, int computeL, Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact, psymbfact_stat_t *PS) |
static int_t | blk_symbfact (SuperMatrix *A, int iam, int lvl, int szSep, int ind_sizes1, int ind_sizes2, int_t *sizes, int_t *fstVtxSep, int_t fstVtx_loc, int_t fstVtx_blk, int_t lstVtx_blk, int_t *lsub_rcvd, int_t lsub_rcvd_sz, int_t *usub_rcvd, int_t usub_rcvd_sz, Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact, vtcsInfo_symbfact_t *VInfo, comm_symbfact_t *CS, psymbfact_stat_t *PS, int_t *marker, int_t *p_mark, int_t *p_nextl, int_t *p_nextu, int_t *p_neltsZr, int_t *p_neltsTotal, int_t *p_nsuper_loc) |
static int_t | expand_RL (int_t computeRcvd, int_t n, int iam, int_t *lsub_rcvd, int_t lsub_rcvd_sz, int_t *usub_rcvd, int_t usub_rcvd_sz, int_t vtxXp, int_t vtx_upd_pr, int_t lstVtx_upd_pr, int_t fstVtx_srcUpd, int_t lstVtx_srcUpd, int_t fstVtx_toUpd, int_t lstVtx_toUpd, int_t nvtcs_toUpd, int computeL, int_t *pmarkl, int_t *marker, Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact, vtcsInfo_symbfact_t *VInfo, psymbfact_stat_t *PS) |
static int_t | rl_update (int computeRcvd, int_t n, int iam, int_t *lsub_rcvd, int_t lsub_rcvd_sz, int_t *usub_rcvd, int_t usub_rcvd_sz, int_t fstVtx_srcUpd, int_t lstVtx_srcUpd, int_t indBlk_srcUpd, int_t fstVtx_toUpd, int_t lstVtx_toUpd, int_t nvtcs_toUpd, int computeL, int_t *pmarkl, int_t *marker, Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact, vtcsInfo_symbfact_t *VInfo, psymbfact_stat_t *PS) |
static int_t | dnsCurSep_symbfact (int_t n, int iam, int ind_sizes1, int ind_sizes2, int_t *sizes, int_t *fstVtxSep, int szSep, int npNode, int_t rcvd_dnsSep, int_t *p_nextl, int_t *p_nextu, int_t *p_mark, int_t *p_nsuper_loc, int_t *marker, MPI_Comm ndCom, Llu_symbfact_t *Llu_symbfact, Pslu_freeable_t *Pslu_freeable, vtcsInfo_symbfact_t *VInfo, comm_symbfact_t *CS, psymbfact_stat_t *PS) |
-- Parallel symbolic factorization routine (version 2.3) -- Lawrence Berkeley National Lab, Univ. of California Berkeley - July 2003 INRIA France - January 2004 Laura Grigori
November 1, 2007 Feburary 20, 2008 October 15, 2008
The function symbfact_dist implements the parallel symbolic factorization algorithm described in the paper:
Parallel Symbolic Factorization for Sparse LU with Static Pivoting, Laura Grigori, James W. Demmel and Xiaoye S. Li, Pages 1289-1314, SIAM Journal on Scientific Computing, Volume 29, Issue 3.
static float allocPrune_domain | ( | int_t | fstVtx, | |
int_t | lstVtx, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
psymbfact_stat_t * | PS | |||
) | [static] |
Allocate storage for data structures necessary for pruned graphs. For those unpredictable size, make a guess as FILL * n. Return value: 0 if enough memory was available; otherwise, return the amount of space intended to allocate when memory allocation failure occurred.
static float allocPrune_lvl | ( | Llu_symbfact_t * | Llu_symbfact, | |
vtcsInfo_symbfact_t * | VInfo, | |||
psymbfact_stat_t * | PS | |||
) | [static] |
Allocate storage for data structures necessary for pruned graphs. For those unpredictable size, make a guess as FILL * n. Return value: 0 if enough memory was available; otherwise, return the amount of space intended to allocate when memory allocation failure occurred.
static int_t blk_symbfact | ( | SuperMatrix * | A, | |
int | iam, | |||
int | lvl, | |||
int | szSep, | |||
int | ind_sizes1, | |||
int | ind_sizes2, | |||
int_t * | sizes, | |||
int_t * | fstVtxSep, | |||
int_t | fstVtx_loc, | |||
int_t | fstVtx_blk, | |||
int_t | lstVtx_blk, | |||
int_t * | lsub_rcvd, | |||
int_t | lsub_rcvd_sz, | |||
int_t * | usub_rcvd, | |||
int_t | usub_rcvd_sz, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
comm_symbfact_t * | CS, | |||
psymbfact_stat_t * | PS, | |||
int_t * | marker, | |||
int_t * | p_mark, | |||
int_t * | p_nextl, | |||
int_t * | p_nextu, | |||
int_t * | p_neltsZr, | |||
int_t * | p_neltsTotal, | |||
int_t * | p_nsuper_loc | |||
) | [static] |
static float cntsVtcs | ( | int_t | n, | |
int | iam, | |||
int | nprocs_symb, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
int_t * | tempArray, | |||
int_t * | fstVtxSep, | |||
int_t * | sizes, | |||
psymbfact_stat_t * | PS, | |||
MPI_Comm * | commLvls | |||
) | [static] |
Purpose =======
Computes an estimation of the number of elements in columns of L and rows of U. Stores this information in cntelt_vtcs, and it will be used in the right-looking symbolic factorization.
static void createComm | ( | int | iam, | |
int | nprocs, | |||
MPI_Comm * | commLvls, | |||
MPI_Comm * | symb_comm | |||
) | [static] |
static int_t denseSep_symbfact | ( | int | rcvd_dnsSep, | |
int_t | n, | |||
int | iam, | |||
int | ind_sizes1, | |||
int | ind_sizes2, | |||
int_t * | sizes, | |||
int_t * | fstVtxSep, | |||
int | szSep, | |||
int | fstP, | |||
int | lstP, | |||
int_t | fstVtx_blkCyc, | |||
int_t | nblk_loc, | |||
int_t * | p_nextl, | |||
int_t * | p_nextu, | |||
int_t * | p_mark, | |||
int_t * | p_nsuper_loc, | |||
int_t * | marker, | |||
MPI_Comm | ndCom, | |||
MPI_Comm * | symb_comm, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
comm_symbfact_t * | CS, | |||
psymbfact_stat_t * | PS | |||
) | [static] |
All processors affected to current node must call this routine when VInfo->filledSep == FILLED_SEP This is necessary since subsequent routines called from here use MPI_allreduce among all processors affected to curent node
static int_t dnsCurSep_symbfact | ( | int_t | n, | |
int | iam, | |||
int | ind_sizes1, | |||
int | ind_sizes2, | |||
int_t * | sizes, | |||
int_t * | fstVtxSep, | |||
int | szSep, | |||
int | npNode, | |||
int_t | rcvd_dnsSep, | |||
int_t * | p_nextl, | |||
int_t * | p_nextu, | |||
int_t * | p_mark, | |||
int_t * | p_nsuper_loc, | |||
int_t * | marker, | |||
MPI_Comm | ndCom, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
comm_symbfact_t * | CS, | |||
psymbfact_stat_t * | PS | |||
) | [static] |
static int_t dnsUpSeps_symbfact | ( | int_t | n, | |
int | iam, | |||
int | szSep, | |||
int | ind_sizes1, | |||
int | ind_sizes2, | |||
int_t * | sizes, | |||
int_t * | fstVtxSep, | |||
int_t | fstVtx_dns, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
comm_symbfact_t * | CS, | |||
psymbfact_stat_t * | PS, | |||
int_t * | p_nextl, | |||
int_t * | p_nextu, | |||
int_t * | p_nsuper_loc | |||
) | [static] |
static void domain_symbfact | ( | SuperMatrix * | A, | |
int | iam, | |||
int | lvl, | |||
int | szSep, | |||
int | ind_sizes1, | |||
int | ind_sizes2, | |||
int_t * | sizes, | |||
int_t * | fstVtxSep, | |||
int_t | fstVtx, | |||
int_t | lstVtx, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
comm_symbfact_t * | CS, | |||
psymbfact_stat_t * | PS, | |||
int_t * | marker, | |||
int_t * | p_mark, | |||
int_t * | p_nextl, | |||
int_t * | p_nextu, | |||
int_t * | p_neltsZr, | |||
int_t * | p_neltsTotal, | |||
int_t * | p_nsuper_loc | |||
) | [static] |
static void estimate_memUsage | ( | int_t | n, | |
int | iam, | |||
mem_usage_t * | symb_mem_usage, | |||
float * | p_totalMemLU, | |||
float * | p_overestimMem, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
comm_symbfact_t * | CS, | |||
psymbfact_stat_t * | PS | |||
) | [static] |
static int_t expand_RL | ( | int_t | computeRcvd, | |
int_t | n, | |||
int | iam, | |||
int_t * | lsub_rcvd, | |||
int_t | lsub_rcvd_sz, | |||
int_t * | usub_rcvd, | |||
int_t | usub_rcvd_sz, | |||
int_t | vtxXp, | |||
int_t | vtx_upd_pr, | |||
int_t | lstVtx_upd_pr, | |||
int_t | fstVtx_srcUpd, | |||
int_t | lstVtx_srcUpd, | |||
int_t | fstVtx_toUpd, | |||
int_t | lstVtx_toUpd, | |||
int_t | nvtcs_toUpd, | |||
int | computeL, | |||
int_t * | pmarkl, | |||
int_t * | marker, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
psymbfact_stat_t * | PS | |||
) | [static] |
static void freeComm | ( | int | iam, | |
int | nprocs, | |||
MPI_Comm * | commLvls, | |||
MPI_Comm * | symb_comm | |||
) | [static] |
static void initLvl_symbfact | ( | int_t | n, | |
int | iam, | |||
int_t | fstVtx, | |||
int_t | lstVtx, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
psymbfact_stat_t * | PS, | |||
MPI_Comm | ndComm, | |||
int_t * | marker, | |||
int_t | nextl, | |||
int_t | nextu | |||
) | [static] |
Compute counts of rows/columns of current separator. cntelt_vtcs[i] is 0 when i is nonzero before current separator and n when i is zero before current separator.
Set up nvtcsLvl_loc.
static int_t initParmsAndStats | ( | psymbfact_stat_t * | PS | ) | [static] |
Purpose ======= Initialize relaxation parameters and statistics variables
static int_t interLvl_symbfact | ( | SuperMatrix * | A, | |
int | iam, | |||
int | lvl, | |||
int | szSep, | |||
int | fstP, | |||
int | lstP, | |||
int | ind_sizes1, | |||
int | ind_sizes2, | |||
int_t * | sizes, | |||
int_t * | fstVtxSep, | |||
int_t * | p_nextl, | |||
int_t * | p_nextu, | |||
int_t * | p_nsuper_loc, | |||
int_t * | pmark, | |||
int_t * | marker, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
comm_symbfact_t * | CS, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
psymbfact_stat_t * | PS, | |||
MPI_Comm | ndComm, | |||
MPI_Comm * | symb_comm | |||
) | [static] |
static void intraLvl_symbfact | ( | SuperMatrix * | A, | |
int | iam, | |||
int | lvl, | |||
int | szSep, | |||
int | ind_sizes1, | |||
int | ind_sizes2, | |||
int_t * | sizes, | |||
int_t * | fstVtxSep, | |||
int | fstP, | |||
int | lstP, | |||
int_t | fstVtx, | |||
int_t | lstVtx, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
comm_symbfact_t * | CS, | |||
psymbfact_stat_t * | PS, | |||
int_t * | marker, | |||
int_t * | p_mark, | |||
int_t * | p_nextl, | |||
int_t * | p_nextu, | |||
int_t * | p_neltsZr, | |||
int_t * | p_neltsTotal, | |||
int_t * | p_nsuper_loc, | |||
MPI_Comm | ndComm, | |||
MPI_Comm * | symb_comm | |||
) | [static] |
static int_t rl_update | ( | int | computeRcvd, | |
int_t | n, | |||
int | iam, | |||
int_t * | lsub_rcvd, | |||
int_t | lsub_rcvd_sz, | |||
int_t * | usub_rcvd, | |||
int_t | usub_rcvd_sz, | |||
int_t | fstVtx_srcUpd, | |||
int_t | lstVtx_srcUpd, | |||
int_t | indBlk_srcUpd, | |||
int_t | fstVtx_toUpd, | |||
int_t | lstVtx_toUpd, | |||
int_t | nvtcs_toUpd, | |||
int | computeL, | |||
int_t * | pmarkl, | |||
int_t * | marker, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
psymbfact_stat_t * | PS | |||
) | [static] |
static int symbfact_alloc | ( | int_t | n, | |
int | nprocs, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
comm_symbfact_t * | CS, | |||
psymbfact_stat_t * | PS | |||
) | [static] |
Allocate storage for the data structures common to symbolic factorization routines. For those unpredictable size, make a guess as FILL * nnz(A). Return value: 0 if enough memory was available; otherwise, return the amount of space intended to allocate when memory allocation failure occurred.
float symbfact_dist | ( | int | nprocs_num, | |
int | nprocs_symb, | |||
SuperMatrix * | A, | |||
int_t * | perm_c, | |||
int_t * | perm_r, | |||
int_t * | sizes, | |||
int_t * | fstVtxSep, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
MPI_Comm * | num_comm, | |||
MPI_Comm * | symb_comm, | |||
mem_usage_t * | symb_mem_usage | |||
) |
Purpose ======= symbfact_dist() performs symbolic factorization of matrix A suitable for performing the supernodal Gaussian elimination with no pivoting (GEPP). This routine computes the structure of one column of L and one row of U at a time. It uses: o distributed input matrix o supernodes o symmetric structure pruning
Arguments =========
nprocs_num (input) int Number of processors SuperLU_DIST is executed on, and the input matrix is distributed on.
nprocs_symb (input) int Number of processors on which the symbolic factorization is performed. It is equal to the number of independent domains idenfied in the graph partitioning algorithm executed previously and has to be a power of 2. It corresponds to number of leaves in the separator tree.
A (input) SuperMatrix* Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number of the linear equations is A->nrow. Matrix A is distributed in NRformat_loc format. Matrix A is not yet permuted by perm_c.
perm_c (input) int_t* Column permutation vector of size A->ncol, which defines the permutation matrix Pc; perm_c[i] = j means column i of A is in position j in A*Pc.
perm_r (input) int_t* Row permutation vector of size A->nrow, which defines the permutation matrix Pr; perm_r[i] = j means column i of A is in position j in Pr*A.
sizes (input) int_t* Contains the number of vertices in each separator.
fstVtxSep (input) int_t* Contains first vertex for each separator.
Pslu_freeable (output) Pslu_freeable_t* Returns the local L and U structure, and global to local information on the indexing of the vertices. Contains all the information necessary for performing the data distribution towards the numeric factorization.
num_comm (input) MPI_Comm* Communicator for numerical factorization
symb_comm (input) MPI_Comm* Communicator for symbolic factorization
symb_mem_usage (input) mem_usage_t * Statistics on memory usage.
Return value ============ < 0, number of bytes allocated on return from the symbolic factorization. > 0, number of bytes allocated when out of memory.
Sketch of the algorithm =======================
Distrbute the vertices on the processors using a subtree to subcube algorithm.
Redistribute the structure of the input matrix A according to the subtree to subcube computed previously for the symbolic factorization routine. This implies in particular a distribution from nprocs_num processors to nprocs_symb processors.
Perform symbolic factorization guided by the separator tree provided by a graph partitioning algorithm. The symbolic factorization uses a combined left-looking, right-looking approach.
static void symbfact_distributeMatrix | ( | int | iam, | |
int | nprocs_num, | |||
int | nprocs_symb, | |||
SuperMatrix * | A, | |||
int_t * | perm_c, | |||
int_t * | perm_r, | |||
matrix_symbfact_t * | AS, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
int_t * | tempArray, | |||
MPI_Comm * | num_comm | |||
) | [static] |
Purpose =======
Distribute input matrix A for the symbolic factorization routine. Only structural information is distributed. The redistributed matrix has its rows and columns permuted according to perm_r and perm_c. A is not modified during this routine.
static void symbfact_free | ( | int | iam, | |
int | nprocs, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
comm_symbfact_t * | CS | |||
) | [static] |
static float symbfact_mapVtcs | ( | int | iam, | |
int | nprocs_num, | |||
int | nprocs_symb, | |||
SuperMatrix * | A, | |||
int_t * | fstVtxSep, | |||
int_t * | sizes, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
int_t * | tempArray, | |||
int_t | maxSzBlk, | |||
psymbfact_stat_t * | PS | |||
) | [static] |
Purpose =======
symbfact_mapVtcs maps the vertices of the graph of the input matrix A on nprocs_symb processors, using the separator tree returned by a graph partitioning algorithm from the previous step of the symbolic factorization. The number of processors nprocs_symb must be a power of 2.
Description of the algorithm ============================
A subtree to subcube algorithm is used first to map the processors on the nodes of the separator tree.
For each node of the separator tree, its corresponding vertices are distributed on the processors affected to this node, using a block cyclic distribution.
After the distribution, fields of the VInfo structure are computed. The array globToLoc and maxNvtcsPProc of Pslu_freeable are also computed.
static int_t symbfact_vtx | ( | int_t | n, | |
int | iam, | |||
int_t | vtx, | |||
int_t | vtx_lid, | |||
int_t | vtx_prid, | |||
int_t | computeL, | |||
int | domain_symb, | |||
int_t | fstVtx, | |||
int_t | lstVtx, | |||
int_t | snrep_lid, | |||
int_t | szSn, | |||
int_t * | p_next, | |||
int_t * | marker, | |||
int_t * | sub_rcvd, | |||
int_t | sub_rcvd_sz, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
psymbfact_stat_t * | PS, | |||
int_t * | p_neltsVtxInit, | |||
int_t * | p_neltsVtx, | |||
int_t * | p_neltsVtx_CSep, | |||
int_t * | p_neltsZrVtx, | |||
int_t * | p_neltsMatched, | |||
int_t | mark_vtx, | |||
int_t * | p_prval_curvtx, | |||
int_t | vtx_bel_othSn, | |||
int_t * | p_vtx_bel_mySn | |||
) | [static] |
static int_t update_prGraph | ( | int | iam, | |
int_t | n, | |||
int_t | fstVtx_blk, | |||
int_t | lstVtx_blk, | |||
int_t | snrep_lid, | |||
int_t | pr_offset, | |||
int_t | prval_cursn, | |||
int_t | xsub_snp1, | |||
int | computeL, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
psymbfact_stat_t * | PS | |||
) | [static] |
static int_t updateRcvd_prGraph | ( | int_t | n, | |
int | iam, | |||
int_t * | sub_rcvd, | |||
int_t | sub_rcvd_sz, | |||
int_t | fstVtx_toUpd, | |||
int_t | lstVtx_toUpd, | |||
int_t | pr_offset, | |||
int | computeL, | |||
int_t * | marker, | |||
Pslu_freeable_t * | Pslu_freeable, | |||
Llu_symbfact_t * | Llu_symbfact, | |||
vtcsInfo_symbfact_t * | VInfo, | |||
psymbfact_stat_t * | PS | |||
) | [static] |