PaStiX Handbook  6.3.2
PaRSEC support for the numerical factorization

Modules

 PaRSEC Cholesky factorization
 
 PaRSEC LU factorization
 
 PaRSEC LDL^t factorization
 
 PaRSEC LDL^h factorization
 
 PaRSEC extra LL^t factorization
 

Data Structures

struct  parsec_sparse_matrix_desc_s
 PaRSEC descriptor stucture for the sparse matrix. More...
 

Functions

static void spm_data_key_to_value (parsec_data_key_t key, const SolverMatrix *solvmtx, int *uplo, pastix_int_t *cblknum, pastix_int_t *bloknum)
 Compute the triplet (uplo, cblknum, bloknum) from the key. More...
 
static uint32_t parsec_sparse_matrix_data_key (parsec_data_collection_t *mat,...)
 Compute the unique key from the triplet (uplo, cblknum, bloknum). More...
 
static uint32_t parsec_sparse_matrix_rank_of (parsec_data_collection_t *mat,...)
 Return the rank of the owner of the piece of data (uplo, cblknum, bloknum). More...
 
static uint32_t parsec_sparse_matrix_rank_of_key (parsec_data_collection_t *mat, parsec_data_key_t key)
 Return the rank of the owner of the piece of data (key) More...
 
static int32_t parsec_sparse_matrix_vpid_of (parsec_data_collection_t *mat,...)
 Return the rank of the virtual process owner of the piece of data (uplo, cblknum, bloknum). More...
 
static int32_t parsec_sparse_matrix_vpid_of_key (parsec_data_collection_t *mat, parsec_data_key_t key)
 Return the rank of the virtual process owner of the piece of data (key) More...
 
static parsec_data_t * parsec_sparse_matrix_data_of (parsec_data_collection_t *mat,...)
 Return the data handler associated to the piece of data (uplo, cblknum, bloknum). More...
 
static parsec_data_t * parsec_sparse_matrix_data_of_key (parsec_data_collection_t *mat, parsec_data_key_t key)
 Return the data handler associated to the piece of data (key). More...
 
static void pastix_parsec_register_cblk_lr (parsec_data_collection_t *o, parsec_data_t **handler, pastix_int_t id, const SolverCblk *cblk, int side)
 TODO. More...
 
static void pastix_parsec_register_cblk_fr (parsec_data_collection_t *o, parsec_data_t **handler, pastix_int_t id, const parsec_sparse_matrix_desc_t *spmtx, const SolverCblk *cblk, int side)
 TODO. More...
 
static void pastix_parsec_register_cblk (parsec_data_collection_t *o, pastix_int_t cblknum, const parsec_sparse_matrix_desc_t *spmtx, const SolverCblk *cblk)
 TODO. More...
 

PaRSEC sparse matrix descriptor

typedef struct parsec_sparse_matrix_desc_s parsec_sparse_matrix_desc_t
 PaRSEC descriptor stucture for the sparse matrix.
 
void parsec_sparse_matrix_init (SolverMatrix *solvmtx, int typesize, pastix_mtxtype_t mtxtype, int nodes, int myrank)
 Generate the PaRSEC descriptor of the sparse matrix. More...
 
void parsec_sparse_matrix_destroy (parsec_sparse_matrix_desc_t *spmtx)
 Free the PaRSEC descriptor of the sparse matrix. More...
 

PaRSEC control function

void pastix_parsec_init (pastix_data_t *pastix, int *argc, char **argv[], const int *bindtab)
 Startup the PaRSEC runtime system. More...
 
void pastix_parsec_finalize (pastix_data_t *pastix)
 Finalize the PaRSEC runtime system. More...
 

Detailed Description

This module describes the functionnality provided by the runtime system PaRSEC for the numerical factorization and solve.


Data Type Documentation

◆ parsec_sparse_matrix_desc_s

struct parsec_sparse_matrix_desc_s

PaRSEC descriptor stucture for the sparse matrix.

Definition at line 35 of file pastix_parsec.h.

Data Fields
parsec_data_collection_t super

Every PaRSEC descriptors must inherit from parsec_desc_t

int typesze

Arithmetic size

pastix_mtxtype_t mtxtype

Matrix structure: PastixGeneral, PastixSymmetric or PastixHermitian.

SolverMatrix * solvmtx

Solver matrix structure that describes the problem and stores the original data

void ** gpu_blocktab

Pointer to GPU arrays that contains frownum,lrownum of each block for Fermi

Function Documentation

◆ parsec_sparse_matrix_init()

void parsec_sparse_matrix_init ( SolverMatrix solvmtx,
int  typesize,
pastix_mtxtype_t  mtxtype,
int  nodes,
int  myrank 
)

Generate the PaRSEC descriptor of the sparse matrix.

This function creates the PaRSEC descriptor that will provide the data mapping and memory location to PaRSEC for the computation.

Parameters
[in,out]solvmtxThe solver matrix structure that describes the sparse matrix for PaStiX.
[in]typesizeThe memory size of the arithmetic used to store the matrix coefficients.
[in]mtxtypeThe type of sparse matrix to describe.
  • PastixGeneral: The sparse matrix is general.
  • PastixSymmetric: The sparse matrix is lower triangular symmetric.
  • PastixHermitian: The sparse matrix is lower triangular hermitian.
[in]nodesThe number of processes used to solve the problem.
[in]myrankThe rank of the calling process.

Definition at line 694 of file parsec_sparse_matrix.c.

References blok_rownbr(), cblk_colnbr(), solver_matrix_s::cblkmaxblk, solver_matrix_s::cblkmin2d, solver_matrix_s::cblknbr, solver_matrix_s::cblktab, solver_cblk_s::cblktype, solver_blok_s::coefind, solver_cblk_s::fblokptr, solver_blok_s::fcblknm, solver_blok_s::handler, solver_cblk_s::lcoeftab, solver_blok_s::LRblock, parsec_sparse_matrix_desc_s::mtxtype, solver_cblk_s::ownerid, parsec_sparse_matrix_data_key(), parsec_sparse_matrix_data_of(), parsec_sparse_matrix_data_of_key(), parsec_sparse_matrix_destroy(), parsec_sparse_matrix_rank_of(), parsec_sparse_matrix_rank_of_key(), parsec_sparse_matrix_vpid_of(), parsec_sparse_matrix_vpid_of_key(), pastix_int_t, pastix_parsec_register_cblk(), PastixGeneral, parsec_sparse_matrix_desc_s::solvmtx, parsec_sparse_matrix_desc_s::super, parsec_sparse_matrix_desc_s::typesze, and solver_cblk_s::ucoeftab.

Referenced by parsec_cgetrf(), parsec_chetrf(), parsec_cpotrf(), parsec_cpxtrf(), parsec_csytrf(), parsec_dgetrf(), parsec_dpotrf(), parsec_dsytrf(), parsec_sgetrf(), parsec_spotrf(), parsec_ssytrf(), parsec_zgetrf(), parsec_zhetrf(), parsec_zpotrf(), parsec_zpxtrf(), parsec_zsytrf(), and pastix_subtask_bcsc2ctab().

◆ parsec_sparse_matrix_destroy()

void parsec_sparse_matrix_destroy ( parsec_sparse_matrix_desc_t spmtx)

Free the PaRSEC descriptor of the sparse matrix.

This function destroys the PaRSEC descriptor, but do not free the matrix data that are managed by PaStiX.

Parameters
[in,out]spmtxThe descriptor to free.

Definition at line 925 of file parsec_sparse_matrix.c.

References solver_matrix_s::cblkmin2d, solver_matrix_s::cblknbr, solver_matrix_s::cblktab, solver_cblk_s::fblokptr, solver_blok_s::handler, solver_cblk_s::handler, parsec_sparse_matrix_desc_s::mtxtype, pastix_int_t, PastixGeneral, and parsec_sparse_matrix_desc_s::solvmtx.

Referenced by coeftabExit(), and parsec_sparse_matrix_init().

◆ pastix_parsec_init()

void pastix_parsec_init ( pastix_data_t pastix,
int *  argc,
char **  argv[],
const int *  bindtab 
)

Startup the PaRSEC runtime system.

This function initialize and startup the PaRSEC runtime system with PaStix configuration variables

Parameters
[in,out]pastixThe main pastix_data structure.
[in,out]argcThe number of arguments of the main program.
[in,out]argvThe list of argument given to the main program.
[in]bindtabThe binding array of size the number of threads if a specific binding is required, NULL otherwise.

Definition at line 61 of file parsec.c.

References IPARM_GPU_MEMORY_BLOCK_SIZE, IPARM_GPU_MEMORY_PERCENTAGE, IPARM_GPU_NBR, IPARM_THREAD_NBR, IPARM_VERBOSE, pastix(), and pastix_int_t.

Referenced by parsec_cgetrf(), parsec_chetrf(), parsec_cpotrf(), parsec_cpxtrf(), parsec_csytrf(), parsec_dgetrf(), parsec_dpotrf(), parsec_dsytrf(), parsec_sgetrf(), parsec_spotrf(), parsec_ssytrf(), parsec_zgetrf(), parsec_zhetrf(), parsec_zpotrf(), parsec_zpxtrf(), parsec_zsytrf(), pastix_subtask_bcsc2ctab(), and pastixInitWithAffinity().

◆ pastix_parsec_finalize()

void pastix_parsec_finalize ( pastix_data_t pastix)

Finalize the PaRSEC runtime system.

This function stop the PaRSEC runtime system.

Parameters
[in,out]pastixThe main pastix_data structure.

Definition at line 178 of file parsec.c.

References pastix().

Referenced by pastixFinalize().

◆ spm_data_key_to_value()

static void spm_data_key_to_value ( parsec_data_key_t  key,
const SolverMatrix solvmtx,
int *  uplo,
pastix_int_t cblknum,
pastix_int_t bloknum 
)
inlinestatic

Compute the triplet (uplo, cblknum, bloknum) from the key.

This function convert the unique key identifier of each piece of data, to its original information.

Parameters
[in]keyThe key identifier to decode.
[in]solvmtxThe solver matrix structure to access information about the blocks and cblks.
[out]uploOn exit, uplo is 0 if the key corresponds to the lower part, or 1 for the upper part.
[out]cblknumOn exit, the index of the cblk encoded in the key.
[out]bloknumOn exit, the index of the blok encoded in the key. bloknum = 0, if the piece of data is the full cblk for 1D kernels. bloknum > 0, if the piece of data is the (bloknum-1)^th block in the cblk.

Definition at line 61 of file parsec_sparse_matrix.c.

References solver_matrix_s::cblkmaxblk, solver_matrix_s::cblkmin2d, solver_matrix_s::cblknbr, and pastix_int_t.

Referenced by parsec_sparse_matrix_data_of_key(), and parsec_sparse_matrix_rank_of_key().

◆ parsec_sparse_matrix_data_key()

static uint32_t parsec_sparse_matrix_data_key ( parsec_data_collection_t *  mat,
  ... 
)
static

Compute the unique key from the triplet (uplo, cblknum, bloknum).

This function convert the unique triplet in a unique key identifier for each piece of data.

Parameters
[in]matThe sparse matrix descriptor.
[in]...This function must receive three int:
  • uplo: 0 for the lower part, 1 for the upper part
  • cblknum: the index of the cblk
  • bloknum: =0 if this is the full cblk, >0 for the (bloknum-1)^th block in the cblk.
Returns
The unique key identifier for the piece of data.

Definition at line 122 of file parsec_sparse_matrix.c.

References solver_matrix_s::cblkmaxblk, solver_matrix_s::cblkmin2d, solver_matrix_s::cblknbr, pastix_int_t, and parsec_sparse_matrix_desc_s::solvmtx.

Referenced by parsec_sparse_matrix_init().

◆ parsec_sparse_matrix_rank_of()

static uint32_t parsec_sparse_matrix_rank_of ( parsec_data_collection_t *  mat,
  ... 
)
static

Return the rank of the owner of the piece of data (uplo, cblknum, bloknum).

Parameters
[in]matThe sparse matrix descriptor.
[in]...This function must receive three int:
  • uplo: 0 for the lower part, 1 for the upper part
  • cblknum: the index of the cblk
  • bloknum: =0 if this is the full cblk, >0 for the (bloknum-1)^th block in the cblk.
Returns
The rank index of the owner of the data.

Definition at line 178 of file parsec_sparse_matrix.c.

References solver_matrix_s::cblktab, solver_cblk_s::ownerid, pastix_int_t, and parsec_sparse_matrix_desc_s::solvmtx.

Referenced by parsec_sparse_matrix_init().

◆ parsec_sparse_matrix_rank_of_key()

static uint32_t parsec_sparse_matrix_rank_of_key ( parsec_data_collection_t *  mat,
parsec_data_key_t  key 
)
static

Return the rank of the owner of the piece of data (key)

Parameters
[in]matThe sparse matrix descriptor.
[in]keyThe unique key idenifier of a piece of data.
Returns
The rank index of the owner of the data.

Definition at line 219 of file parsec_sparse_matrix.c.

References solver_matrix_s::cblktab, solver_cblk_s::ownerid, pastix_int_t, parsec_sparse_matrix_desc_s::solvmtx, and spm_data_key_to_value().

Referenced by parsec_sparse_matrix_init().

◆ parsec_sparse_matrix_vpid_of()

static int32_t parsec_sparse_matrix_vpid_of ( parsec_data_collection_t *  mat,
  ... 
)
static

Return the rank of the virtual process owner of the piece of data (uplo, cblknum, bloknum).

Parameters
[in]matThe sparse matrix descriptor.
[in]...This function must receive three int:
  • uplo: 0 for the lower part, 1 for the upper part
  • cblknum: the index of the cblk
  • bloknum: =0 if this is the full cblk, >0 for the (bloknum-1)^th block in the cblk.
Returns
The rank index of the virtual process owner of the data.

Definition at line 260 of file parsec_sparse_matrix.c.

Referenced by parsec_sparse_matrix_init().

◆ parsec_sparse_matrix_vpid_of_key()

static int32_t parsec_sparse_matrix_vpid_of_key ( parsec_data_collection_t *  mat,
parsec_data_key_t  key 
)
static

Return the rank of the virtual process owner of the piece of data (key)

Parameters
[in]matThe sparse matrix descriptor.
[in]keyThe unique key idenifier of a piece of data.
Returns
The rank index of the virtual process owner of the data.

Definition at line 285 of file parsec_sparse_matrix.c.

Referenced by parsec_sparse_matrix_init().

◆ parsec_sparse_matrix_data_of()

static parsec_data_t* parsec_sparse_matrix_data_of ( parsec_data_collection_t *  mat,
  ... 
)
static

Return the data handler associated to the piece of data (uplo, cblknum, bloknum).

Parameters
[in]matThe sparse matrix descriptor.
[in]...This function must receive three int:
  • uplo: 0 for the lower part, 1 for the upper part
  • cblknum: the index of the cblk
  • bloknum: =0 if this is the full cblk, >0 for the (bloknum-1)^th block in the cblk.
Returns
The pointer to the data handler of the data.

Definition at line 316 of file parsec_sparse_matrix.c.

References solver_matrix_s::cblktab, solver_cblk_s::fblokptr, solver_blok_s::handler, solver_cblk_s::handler, pastix_int_t, and parsec_sparse_matrix_desc_s::solvmtx.

Referenced by parsec_sparse_matrix_init().

◆ parsec_sparse_matrix_data_of_key()

static parsec_data_t* parsec_sparse_matrix_data_of_key ( parsec_data_collection_t *  mat,
parsec_data_key_t  key 
)
static

Return the data handler associated to the piece of data (key).

Parameters
[in]matThe sparse matrix descriptor.
[in]keyThe unique key idenifier of a piece of data.
Returns
The pointer to the data handler of the data.

Definition at line 367 of file parsec_sparse_matrix.c.

References solver_matrix_s::cblktab, solver_cblk_s::fblokptr, solver_blok_s::handler, solver_cblk_s::handler, pastix_int_t, parsec_sparse_matrix_desc_s::solvmtx, and spm_data_key_to_value().

Referenced by parsec_sparse_matrix_init().

◆ pastix_parsec_register_cblk_lr()

static void pastix_parsec_register_cblk_lr ( parsec_data_collection_t *  o,
parsec_data_t **  handler,
pastix_int_t  id,
const SolverCblk cblk,
int  side 
)
inlinestatic

TODO.

Parameters
[in]oTODO
[in]handlerTODO
[in]idTODO
[in]cblkTODO
[in]sideTODO

Definition at line 565 of file parsec_sparse_matrix.c.

References solver_cblk_s::fblokptr, and solver_blok_s::LRblock.

Referenced by pastix_parsec_register_cblk().

◆ pastix_parsec_register_cblk_fr()

static void pastix_parsec_register_cblk_fr ( parsec_data_collection_t *  o,
parsec_data_t **  handler,
pastix_int_t  id,
const parsec_sparse_matrix_desc_t spmtx,
const SolverCblk cblk,
int  side 
)
inlinestatic

TODO.

Parameters
[in]oTODO
[in]handlerTODO
[in]idTODO
[in]spmtxTODO
[in]cblkTODO
[in]sideTODO

Definition at line 603 of file parsec_sparse_matrix.c.

References cblk_colnbr(), solver_cblk_s::lcoeftab, PastixUCoef, solver_cblk_s::stride, parsec_sparse_matrix_desc_s::typesze, and solver_cblk_s::ucoeftab.

Referenced by pastix_parsec_register_cblk().

◆ pastix_parsec_register_cblk()

static void pastix_parsec_register_cblk ( parsec_data_collection_t *  o,
pastix_int_t  cblknum,
const parsec_sparse_matrix_desc_t spmtx,
const SolverCblk cblk 
)
inlinestatic