28 #ifndef DOXYGEN_SHOULD_SKIP_THIS
50 #ifndef DOXYGEN_SHOULD_SKIP_THIS
51 #define CBLK_FANIN (1 << 0)
52 #define CBLK_LAYOUT_2D (1 << 1)
53 #define CBLK_TASKS_2D (1 << 2)
54 #define CBLK_COMPRESSED (1 << 3)
55 #define CBLK_IN_SCHUR (1 << 4)
56 #define CBLK_IN_LAST (1 << 5)
57 #define CBLK_RECV (1 << 6)
67 #ifndef DOXYGEN_SHOULD_SKIP_THIS
128 #if defined(PASTIX_DYNSCHED)
133 #ifndef DOXYGEN_SHOULD_SKIP_THIS
134 #define GPUID_UNDEFINED -2
135 #define GPUID_NONE -1
187 #ifndef DOXYGEN_SHOULD_SKIP_THIS
241 #if defined(PASTIX_WITH_PARSEC)
244 #if defined(PASTIX_WITH_STARPU)
260 Task * restrict tasktab;
278 PASTIX_Comm solv_comm;
315 return PastixSolveBackward;
318 return PastixSolveForward;
370 return cblk->
cblktype & CBLK_COMPRESSED
385 return (cblk+1)->fblokptr - cblk->
fblokptr + 1;
411 while( (blok[0].lcblknm == blok[1].lcblknm) &&
412 (blok[0].fcblknm == blok[1].fcblknm) )
436 int is_preselected = ( fcbk->
selevtx );
437 int is_firstoffd = ( blok == (cblk->
fblokptr + 1) );
439 return ( fcbk->
sndeidx == cblk->
sndeidx ) && ( is_preselected | is_firstoffd );
475 int rk = (rank + 1)%nbthreads;
480 assert( solvmtx->computeQueue[ rk ] );
481 stoleQueue = solvmtx->computeQueue[ rk ];
482 if( (cblknum =
pqueuePop(stoleQueue)) != -1 ){
485 rk = (rk + 1)%nbthreads;
507 # if defined(NAPA_SOPALIN)
555 const char *directory );
576 #ifndef DOXYGEN_SHOULD_SKIP_THIS
577 struct SolverBackup_s;
578 typedef struct SolverBackup_s SolverBackup_t;
BEGIN_C_DECLS typedef int pastix_int_t
The type and structure definitions.
static pastix_int_t pqueuePop(pastix_queue_t *q)
Pop the head of the queue whithout returning the keys.
Control structure for the simulation.
void solverRealloc(SolverMatrix *solvptr)
Realloc in a contiguous way a given solver structure.
int solverBackupRestore(SolverMatrix *solvmtx, const SolverBackup_t *b)
Restore initial values.
SolverMatrix * solverCopy(const SolverMatrix *solvptr, pastix_coeftype_t flttype)
Generate a copy of a solver matrix structure.
void solverRecvExit(SolverMatrix *solvmtx)
Free the array linked to pending reception.
int solverSave(const SolverMatrix *solvptr, FILE *stream)
Save a solver matrix structure into a file.
void solverRequestExit(SolverMatrix *solvmtx)
Free the arrays related to the requests.
void solverBackupExit(SolverBackup_t *b)
Free the solver backup data structure.
int solverLoad(SolverMatrix *solvptr, FILE *stream)
Load a solver matrix structure from a file.
int solverDraw(const SolverMatrix *solvptr, FILE *stream, int verbose, const char *directory)
Writes a PostScript picture of the low-rank solver matrix.
SolverBackup_t * solverBackupInit(const SolverMatrix *solvmtx)
Initialize the backup structure.
void solverRhsRecvExit(SolverMatrix *solvmtx)
Frees the array linked to pending reception.
void solverRecvInit(pastix_coefside_t side, SolverMatrix *solvmtx, pastix_coeftype_t flttype)
Allocate the reception buffer, and initiate the first persistant reception.
void solverRhsRecvInit(solve_step_t solve_step, SolverMatrix *solvmtx, pastix_coeftype_t flttype, pastix_rhs_t rhsb)
Allocates the reception buffer, and initiate the first persistant reception.
void solverPrintStats(const SolverMatrix *solvptr)
Print statistical information about the solver matrix structure.
void solverRequestInit(solve_step_t solve_step, SolverMatrix *solvmtx)
Instanciate the arrays for the requests according to the scheduler.
void solverInit(SolverMatrix *solvmtx)
Initialize the solver structure.
int solverCheck(const SolverMatrix *solvmtx)
Checks the consistency of the given solver matrix structure.
void solverExit(SolverMatrix *solvmtx)
Free the content of the solver matrix structure.
Structure to define the type of function to use for the low-rank kernels and their parameters.
The block low-rank structure to hold a matrix in low-rank form.
spm_coeftype_t pastix_coeftype_t
Arithmetic types.
enum pastix_diag_e pastix_diag_t
Diagonal.
enum pastix_solv_mode_e pastix_solv_mode_t
Solve Schur modes.
enum pastix_uplo_e pastix_uplo_t
Upper/Lower part.
enum pastix_scheduler_e pastix_scheduler_t
Scheduler.
enum pastix_side_e pastix_side_t
Side of the operation.
enum pastix_factotype_e pastix_factotype_t
Factorization algorithms available for IPARM_FACTORIZATION parameter.
enum pastix_trans_e pastix_trans_t
Transpostion.
enum pastix_coefside_e pastix_coefside_t
Data blocks used in the kernel.
int solverMatrixGen(SolverMatrix *solvmtx, const symbol_matrix_t *symbmtx, const pastix_order_t *ordeptr, const SimuCtrl *simuctl, const BlendCtrl *ctrl, PASTIX_Comm comm, isched_t *isched)
Initialize the solver matrix structure.
int solverMatrixGenSeq(SolverMatrix *solvmtx, const symbol_matrix_t *symbmtx, const pastix_order_t *ordeptr, const SimuCtrl *simuctl, const BlendCtrl *ctrl, PASTIX_Comm comm, isched_t *isched, pastix_int_t is_dbg)
Initialize the solver matrix structure in sequential.
PaRSEC descriptor stucture for the sparse matrix.
StarPU descriptor stucture for the sparse matrix.
Main PaStiX RHS structure.
static pastix_int_t blok_rownbr_ext(const SolverBlok *blok)
Compute the number of rows of a contiguous block in front of the same cblk.
pastix_atomic_lock_t reqlock
pastix_int_t gfanincblknbr
pastix_coeftype_t flttype
static pastix_int_t blok_rownbr(const SolverBlok *blok)
Compute the number of rows of a block.
static pastix_int_t cblk_bloknbr(const SolverCblk *cblk)
Compute the number of blocks in a column block.
solve_step_e
Tags used in MPI communications.
static pastix_int_t cblk_colnbr(const SolverCblk *cblk)
Compute the number of columns in a column block.
struct task_s Task
The task structure for the numerical factorization.
static pastix_int_t stealQueue(SolverMatrix *solvmtx, int rank, int nbthreads)
Task stealing method.
static int is_block_inside_fblock(const SolverBlok *blok, const SolverBlok *fblok)
Check if a block is included inside another one.
static solve_step_t compute_solve_step(pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans)
Computes the current solve step.
SolverBlok *restrict bloktab
static void * cblk_getdataU(const SolverCblk *cblk)
Get the pointer to the data associated to the upper part of the cblk.
static pastix_int_t cblk_rownbr(const SolverCblk *cblk)
Compute the number of rows of a column block.
static void * cblk_getdata(const SolverCblk *cblk, pastix_coefside_t side)
Get the pointer to the data associated to the side part of the cblk.
pastix_factotype_t factotype
pastix_int_t gfaninbloknbr
static int blok_is_preselected(const SolverCblk *cblk, const SolverBlok *blok, const SolverCblk *fcbk)
Return if a block is preselected as either part of the projection, or as a sub-diagonal block.
pastix_atomic_lock_t lock
struct solver_cblk_s SolverCblk
Solver column block structure.
struct solver_blok_s SolverBlok
Solver block structure.
struct solver_blok_recv_s solver_blok_recv_t
Solver recv block structure.
static void * cblk_getdataL(const SolverCblk *cblk)
Get the pointer to the data associated to the lower part of the cblk.
pastix_lrblock_t * LRblock[2]
pastix_int_t *restrict browtab
pastix_int_t volatile ctrbcnt
solver_blok_recv_t bloktab[1]
struct args_solve_s args_solve_t
Arguments for the solve.
SolverCblk *restrict cblktab
enum solve_step_e solve_step_t
Tags used in MPI communications.
struct solver_cblk_recv_s solver_cblk_recv_t
Solver recv column block structure.
volatile int32_t nbpivots
Solver recv block structure.
Solver recv column block structure.
Solver column block structure.
Solver column block structure.
The task structure for the numerical factorization.