PaStiX Handbook  6.3.2
blendctrl.h
Go to the documentation of this file.
1 /**
2  *
3  * @file blendctrl.h
4  *
5  * PaStiX analyse control parameters structure.
6  *
7  * @copyright 1998-2023 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
8  * Univ. Bordeaux. All rights reserved.
9  *
10  * @version 6.3.2
11  * @author Pascal Henon
12  * @author Mathieu Faverge
13  * @date 2023-07-21
14  *
15  * @addtogroup blend_dev_ctrl
16  * @{
17  * This module handles all option to parameterize the final analyze step that
18  * performs proportional mapping and the generation of the final solver
19  * matrix structure per MPI process.
20  *
21  **/
22 #ifndef _blendctrl_h_
23 #define _blendctrl_h_
24 
25 /**
26  * @brief The type and structure definitions.
27 */
28 typedef struct blendctrl_s {
29  pastix_int_t count_ops ; /**< Print costs in term of number of elementary operations */
30  pastix_int_t debug ; /**< Make additional checks after each step */
31  pastix_int_t timer; /**< Print execution times */
32  pastix_int_t ooc; /**< Enable the out-of-core version of Pastix (Option unused for now) */
33  pastix_int_t ricar; /**< Enable the ILU(k) dedicated steps */
34  pastix_int_t leader; /**< Leader for sequential tasks */
35 
36  /**
37  * @name Proportional Mapping
38  * @{
39  */
40  pastix_int_t allcand; /**< All processors are candidate for each cblk */
41  pastix_int_t nocrossproc; /**< Forbid a processor to be candidate in two
42  different branches shared with different partners */
43  pastix_int_t costlevel; /**< Enable/disable computation and use of subtree cost */
44 
45  /**
46  * @}
47  * @name Symbol split
48  * @{
49  */
50  pastix_int_t blcolmin ; /**< Minimun number of columns for a good use of BLAS primitives */
51  pastix_int_t blcolmax; /**< Maximum number of columns for a good use of BLAS primitives */
52  pastix_int_t abs; /**< Adaptative block size:
53  - 0, all block are cut to blcolmin
54  - >0, try to make (ncand*abs) cblk */
55  pastix_int_t up_after_split; /**< Update the costmtx and candtab arrays after splitting the symbol */
56 
57  /**
58  * @}
59  * @name 2D
60  * @{
61  */
62  pastix_int_t level_tasks2d; /**< Level to shift from 1D to 2D. Automaticaly computed if < 0, only 1D if 0 */
63  pastix_int_t width_tasks2d; /**< Minimal width to consider a cblk 2D if autolevel (level_tasks2d < 0) */
64 
65  /**
66  * @}
67  * @name Architecture
68  * @{
69  */
70  pastix_int_t clustnum; /**< Id of current MPI process */
71  pastix_int_t clustnbr; /**< Number of MPI processes */
72  pastix_int_t total_nbcores; /**< Total number of physical cores used for the simulation */
73  pastix_int_t total_nbthrds; /**< Total number of threads used for the simulation */
74  pastix_int_t local_nbcores; /**< Local number of physical cores used by the current MPI process */
75  pastix_int_t local_nbthrds; /**< Local number of threads used by the current MPI process */
76  pastix_int_t local_nbctxts; /**< Local number of contexts (used for dynamic scheduler and runtimes)*/
77  pastix_int_t *clust2smp; /**< clust2smp[i] = SMP node on which i_th MPI
78  process is running, if multiple MPI processes per node */
79  pastix_int_t *core2clust; /**< core2clust[i] = cluster owning the core i */
80 
81  /**
82  * @}
83  * @name Parameters arrays
84  * @{
85  */
86  pastix_int_t *iparm; /**< In/Out Integer parameters */
87  double *dparm; /**< In/Out Float parameters */
88  const char *dirname; /**< Temporary unique directory to store output files
89  (Initialized to pastix_data->dir_local) */
90  /**
91  * @}
92  * @name Other
93  * @{
94  */
95  //BubbleTree *btree; /**< arbre de bulles */
96  EliminTree *etree; /**< the elimination tree */
97  CostMatrix *costmtx; /**< the cost bounded to each cblk and blok */
98  Cand *candtab; /**< processor candidate tab */
99  FILE *tracefile; /**< File holding the simulated trace */
100  /**
101  * @}
102  */
104 
105 int blendCtrlInit ( pastix_data_t *pastix_data,
106  BlendCtrl *ctrl );
107 
108 void blendCtrlExit (BlendCtrl *);
109 
110 void getCommunicationCosts( const BlendCtrl *ctrl,
111  pastix_int_t clustsrc,
112  pastix_int_t clustdst,
113  pastix_int_t sync_comm_nbr,
114  double *startup,
115  double *bandwidth);
116 
117 #endif /* _blendctrl_h_ */
118 
119 /**
120  * @}
121  */
BEGIN_C_DECLS typedef int pastix_int_t
Definition: datatypes.h:51
Processor candidate group to own a column blok.
Definition: cand.h:28
Arrays of double to store the cost of each element in the matrix.
Definition: cost.h:30
FILE * tracefile
Definition: blendctrl.h:99
pastix_int_t * core2clust
Definition: blendctrl.h:79
pastix_int_t up_after_split
Definition: blendctrl.h:55
pastix_int_t leader
Definition: blendctrl.h:34
pastix_int_t ricar
Definition: blendctrl.h:33
EliminTree * etree
Definition: blendctrl.h:96
pastix_int_t * clust2smp
Definition: blendctrl.h:77
pastix_int_t debug
Definition: blendctrl.h:30
pastix_int_t local_nbcores
Definition: blendctrl.h:74
pastix_int_t allcand
Definition: blendctrl.h:40
pastix_int_t costlevel
Definition: blendctrl.h:43
double * dparm
Definition: blendctrl.h:87
pastix_int_t width_tasks2d
Definition: blendctrl.h:63
const char * dirname
Definition: blendctrl.h:88
pastix_int_t clustnbr
Definition: blendctrl.h:71
pastix_int_t clustnum
Definition: blendctrl.h:70
pastix_int_t abs
Definition: blendctrl.h:52
pastix_int_t blcolmin
Definition: blendctrl.h:50
pastix_int_t ooc
Definition: blendctrl.h:32
pastix_int_t blcolmax
Definition: blendctrl.h:51
pastix_int_t local_nbctxts
Definition: blendctrl.h:76
Cand * candtab
Definition: blendctrl.h:98
pastix_int_t level_tasks2d
Definition: blendctrl.h:62
pastix_int_t local_nbthrds
Definition: blendctrl.h:75
pastix_int_t timer
Definition: blendctrl.h:31
CostMatrix * costmtx
Definition: blendctrl.h:97
pastix_int_t total_nbcores
Definition: blendctrl.h:72
pastix_int_t count_ops
Definition: blendctrl.h:29
pastix_int_t total_nbthrds
Definition: blendctrl.h:73
pastix_int_t nocrossproc
Definition: blendctrl.h:41
pastix_int_t * iparm
Definition: blendctrl.h:86
struct blendctrl_s BlendCtrl
The type and structure definitions.
int blendCtrlInit(pastix_data_t *pastix_data, BlendCtrl *ctrl)
Initialize the Blend control structure.
Definition: blendctrl.c:162
void getCommunicationCosts(const BlendCtrl *ctrl, pastix_int_t clustsrc, pastix_int_t clustdst, pastix_int_t sync_comm_nbr, double *startup, double *bandwidth)
Return the communication cost between two cores.
Definition: blendctrl.c:60
void blendCtrlExit(BlendCtrl *)
Finalize the Blend control structure.
Definition: blendctrl.c:303
The type and structure definitions.
Definition: blendctrl.h:28
Elimination tree.
Definition: elimintree.h:39
Main PaStiX data structure.
Definition: pastixdata.h:67