PaStiX Handbook  6.2.1
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
 
struct  parsec_sparse_vector_desc_t
 

Macros

#define _GNU_SOURCE   1
 

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)
 
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)
 
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)
 

PaRSEC sparse matrix descriptor

PaRSEC descriptor stucture for the sparse matrix.

typedef struct parsec_sparse_matrix_desc_s parsec_sparse_matrix_desc_t
 
void parsec_sparse_matrix_init (SolverMatrix *solvmtx, int typesize, int 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 vector descriptor

PaRSEC descriptor for the vectors linked to a given sparse matrix.

typedef struct parsec_sparse_vector_desc_t parsec_sparse_vector_desc_t
 
void parsec_sparse_vector_init (parsec_sparse_vector_desc_t *desc, int typesze, int nodes, int myrank)
 
void parsec_sparse_vector_destroy (parsec_sparse_vector_desc_t *desc)
 

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

Definition at line 33 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

int 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

◆ parsec_sparse_vector_desc_t

struct parsec_sparse_vector_desc_t

Definition at line 53 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

SolverMatrix * solvmtx

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

Function Documentation

◆ parsec_sparse_matrix_init()

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

Generate the PaRSEC descriptor of the sparse matrix.

This function creates the PaRSEC descriptor that will provide tha 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 605 of file parsec_sparse_matrix.c.

References 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(), parsec_sparse_matrix_desc_s::solvmtx, and parsec_sparse_matrix_desc_s::typesze.

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(), and parsec_zsytrf().

◆ 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 836 of file parsec_sparse_matrix.c.

References solver_cblk_s::fblokptr, solver_blok_s::handler, solver_cblk_s::handler, parsec_sparse_matrix_desc_s::mtxtype, 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 59 of file parsec.c.

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

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 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 176 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.

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 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_cblk_s::ownerid, 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_cblk_s::ownerid, 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_cblk_s::fblokptr, solver_blok_s::handler, solver_cblk_s::handler, 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_cblk_s::fblokptr, solver_blok_s::handler, solver_cblk_s::handler, parsec_sparse_matrix_desc_s::solvmtx, and spm_data_key_to_value().

Referenced by parsec_sparse_matrix_init().