PaStiX Handbook  6.4.0
Blend

## Modules

Control parameters

Flops and time cost models

Auto-extensible integer vector structure

Sorted queue structure

Elimination tree structure

Candidate structure

Proportional mapping

Factorization Simulation

Symbol spliting

Solver matrix

## Functions

void propMappTree (Cand *candtab, const EliminTree *etree, pastix_int_t candnbr, int nocrossproc, int allcand)
Apply the proportional mapping algorithm. More...

void splitSymbol (BlendCtrl *ctrl, symbol_matrix_t *symbmtx)
Split the column blocks of the symbol matrix to generate parallelism. More...

void simuRun (SimuCtrl *simuctrl, const BlendCtrl *ctrl, const symbol_matrix_t *symbptr)
Run the simulation to map the data on the nodes. More...

int solverMatrixGen (SolverMatrix *solvmtx, const symbol_matrix_t *symbmtx, const pastix_order_t *ordeptr, const SimuCtrl *simuctrl, const BlendCtrl *ctrl, PASTIX_Comm comm, isched_t *isched)
Initialize the solver matrix structure. More...

int solverMatrixGenSeq (SolverMatrix *solvmtx, const symbol_matrix_t *symbmtx, const pastix_order_t *ordeptr, const SimuCtrl *simuctrl, const BlendCtrl *ctrl, PASTIX_Comm comm, isched_t *isched, pastix_int_t is_dbg)
Initialize the solver matrix structure in sequential. More...

## Detailed Description

This module contains all the subroutines and structures to perform the analyze step and prepare the numerical factorization and solve. It is composed of four main steps. The first one is the computation of the proportional mapping based on the elimination tree to attribute worker candidates to all nodes in the tree. The second one is the cutting step of the symbol matrix to generate more parallelism. Then, the simulation predict the best mapping out of the candidates and returns the associated static scheduling for the tasks. Finally, the local solver structure is created to control the numerical factorization and solve and store the problem data.

## ◆ propMappTree()

 void propMappTree ( Cand * candtab, const EliminTree * etree, pastix_int_t candnbr, int nocrossproc, int allcand )

Apply the proportional mapping algorithm.

This function computes the proportionnal mapping of the elimination tree. The result is a set of potential candidates to compute each node of the elimination tree. The real candidate will be affected during the simulation with simuRun(). It is then important to reduce as much as possible the number of candidates per node, while keeping enough freedom for the scheduling to allow a good load balance and few idle times in the final static decision.

Parameters
 [in,out] candtab On entry, the candtab array must contain the cost of each node of the elimination tree, and their depth in the tree as computed by candBuild(). On exit, the fields fcandnum and lcandnum are computed with the proportional mapping algorithm that tries to balance the load between the candidates and distribute the branches to everyone according to their cost. [in] etree The elimination tree to map on the ressources. [in] candnbr The total number of candidates to distribute over the elimination tree. [in] nocrossproc If nocrossproc is enabled, candidates can NOT be part of two subranches with different co-workers in each branch. If nocrossproc is disabled, candidate can be shared between two subranches if the amount of extra work exceeds 10%. [in] allcand No proportional mapping is performed and everyone is candidate to everything. This will have a large performance impact on the simulation.

Definition at line 422 of file propmap.c.

## ◆ splitSymbol()

 void splitSymbol ( BlendCtrl * ctrl, symbol_matrix_t * symbmtx )

Split the column blocks of the symbol matrix to generate parallelism.

This is the main function that cut the symbol matrix column blocks, and return the new symbolMatrix. Cost matrix, elimination tree, and candidate array are updated on exit of this function with respect to the newly created column blocks and blocks. See splitSmart() for the cutting algorithm.

Parameters
 [in] ctrl The blend control structure. On entry, candtab must be initialized. On exit, costmtx, etree, and candtab are updated accordinglyy to the extended symbol matrix, if new cblk are generated. [in] symbmtx On entry, the symbol matrix structure to split. On exit, the new symbol matrix with the new cblk and blocks.

Definition at line 522 of file splitsymbol.c.

## ◆ simuRun()

 void simuRun ( SimuCtrl * simuctrl, const BlendCtrl * ctrl, const symbol_matrix_t * symbptr )

Run the simulation to map the data on the nodes.

This routine simulates the numerical factorization to generate the static scheduling and the final mapping of the column block onto the PaStiX processes.

Parameters
 [in,out] simuctrl The pointer to the simulation structure initialized by simuInit(). [in] ctrl The pointer to the blend control structure which contains the required data, such as the worker distribution among the processes, the candidates array for each column block, and the cost of the computations. [in] symbptr The block symbol structure of the problem.

Definition at line 986 of file simu_run.c.

## ◆ solverMatrixGen()

 int solverMatrixGen ( SolverMatrix * solvmtx, const symbol_matrix_t * symbmtx, const pastix_order_t * ordeptr, const SimuCtrl * simuctrl, const BlendCtrl * ctrl, PASTIX_Comm comm, isched_t * isched )

Initialize the solver matrix structure.

This function takes all the global preprocessing steps: the symbol matrix and the result of the simulation step to generate the solver matrix that holds only local information of each PaStiX process.

Parameters
 [in,out] solvmtx On entry, the allocated pointer to a solver matrix structure. On exit, this structure holds alls the local information required to perform the numerical factorization. [in] symbmtx The global symbol matrix structure. [in] ordeptr The ordering structure. [in] simuctrl The information resulting from the simulation that will provide the data mapping, and the order of the task execution for the static scheduling. [in] ctrl The blend control structure that contains extra information computed during the analyze steps and the parameters of the analyze step. [in] comm TODO [in] isched TODO
Return values
 PASTIX_SUCCESS if success. PASTIX_ERR_OUTOFMEMORY if one of the malloc failed.

Definition at line 88 of file solver_matrix_gen.c.

## ◆ solverMatrixGenSeq()

 int solverMatrixGenSeq ( SolverMatrix * solvmtx, const symbol_matrix_t * symbmtx, const pastix_order_t * ordeptr, const SimuCtrl * simuctrl, const BlendCtrl * ctrl, PASTIX_Comm comm, isched_t * isched, pastix_int_t is_dbg )

Initialize the solver matrix structure in sequential.

This function takes all the global preprocessing steps: the symbol matrix, and the result of the simulation step to generate the solver matrix for one PaStiX process.

Parameters
 [in,out] solvmtx On entry, the allocated pointer to a solver matrix structure. On exit, this structure holds alls the local information required to perform the numerical factorization. [in] symbmtx The global symbol matrix structure. [in] ordeptr The ordering structure. [in] simuctrl The information resulting from the simulation that will provide the data mapping, and the order of the task execution for the static scheduling. [in] ctrl The blend control structure that contains extra information computed during the analyze steps and the parameters of the analyze step. [in] comm TODO [in] isched TODO [in] is_dbg TODO
Return values
 PASTIX_SUCCESS if success. PASTIX_ERR_OUTOFMEMORY if one of the malloc failed.

Definition at line 488 of file solver_matrix_gen.c.