PaStiX Handbook 6.4.0
Loading...
Searching...
No Matches
starpu_chetrf.c
Go to the documentation of this file.
1/**
2 *
3 * @file starpu_chetrf.c
4 *
5 * PaStiX chetrf StarPU wrapper.
6 *
7 * @copyright 2016-2024 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
8 * Univ. Bordeaux. All rights reserved.
9 *
10 * @version 6.4.0
11 * @author Mathieu Faverge
12 * @author Pierre Ramet
13 * @author Alycia Lisito
14 * @author Nolan Bredel
15 * @author Tom Moenne-Loccoz
16 * @date 2024-07-05
17 * @generated from /builds/2mk6rsew/0/solverstack/pastix/sopalin/starpu/starpu_zhetrf.c, normal z -> c, Tue Feb 25 14:35:25 2025
18 *
19 * @addtogroup starpu_hetrf
20 * @{
21 *
22 **/
23#include "common.h"
24#include "blend/solver.h"
25#include "sopalin/sopalin_data.h"
26#include "pastix_ccores.h"
27#include "pastix_starpu.h"
28#include "pastix_cstarpu.h"
29#include "timing.h"
30
31/**
32 *******************************************************************************
33 *
34 * @brief Submits starpu hetrfsp cblk or blok task.
35 *
36 *******************************************************************************
37 *
38 * @param[in] sopalin_data
39 * Solver matrix information structure that will guide the algorithm.
40 *
41 * @param[in] cblk
42 * The column block.
43 *
44 * @param[in] prio
45 * The task priority.
46 *
47 *******************************************************************************/
48void
49starpu_task_chetrfsp( sopalin_data_t *sopalin_data,
50 SolverCblk *cblk,
51 int prio )
52{
53 SolverBlok *lblk, *blok;
55
56 if ( cblk->cblktype & CBLK_TASKS_2D ) {
57 starpu_task_blok_chetrf( sopalin_data, cblk, prio );
58
59 lblk = cblk[1].fblokptr;
60 for ( blok = cblk->fblokptr + 1, m = 0; blok < lblk; blok++, m++ ) {
61
64 cblk, blok, prio );
65
66 /* Skip blocks facing the same cblk */
67 while ( ( blok < lblk ) &&
68 ( blok[0].fcblknm == blok[1].fcblknm ) &&
69 ( blok[0].lcblknm == blok[1].lcblknm ) )
70 {
71 blok++;
72 }
73 }
74 }
75 else {
76 starpu_task_cblk_chetrfsp( sopalin_data, cblk, prio );
77 }
78}
79
80/**
81 *******************************************************************************
82 *
83 * @brief Submits starpu cgemmsp cblk or blok task.
84 *
85 *******************************************************************************
86 *
87 * @param[in] sopalin_data
88 * Solver matrix information structure that will guide the algorithm.
89 *
90 * @param[in] cblk
91 * The column block.
92 *
93 * @param[in] blokB
94 * The block.
95 *
96 * @param[in] fcblk
97 * The facing column block.
98 *
99 * @param[in] prio
100 * The task priority.
101 *
102 *******************************************************************************/
103void
104starpu_task_hetrf_cgemmsp( sopalin_data_t *sopalin_data,
105 SolverCblk *cblk,
106 SolverBlok *blokB,
107 SolverCblk *fcblk,
108 int prio )
109{
110 const SolverBlok *blokA, *lblk;
111 lblk = cblk[1].fblokptr;
112
113 if ( cblk->cblktype & CBLK_TASKS_2D ) {
115 cblk, blokB, prio );
116
117 for ( blokA = blokB; blokA < lblk; blokA++ ) {
119 cblk, fcblk, blokA, blokB, prio );
120
121 /* Skip A blocks facing the same cblk */
122 while ( ( blokA < lblk ) &&
123 ( blokA[0].fcblknm == blokA[1].fcblknm ) &&
124 ( blokA[0].lcblknm == blokA[1].lcblknm ) )
125 {
126 blokA++;
127 }
128 }
129
130 /* We don't need the copy of the block B any more */
131 starpu_data_unregister_submit( blokB->handler[1] );
132 blokB->handler[1] = NULL;
133 }
134 else {
136 cblk, blokB, fcblk, prio );
137 }
138}
139
140/**
141 *******************************************************************************
142 *
143 * @brief Perform a sparse LDL^h factorization with 1D kernels.
144 *
145 * The function performs the LDL^h factorization of a sparse hermitian matrix A.
146 * The factorization has the form
147 *
148 * \f[ A = L \times D \times L^h \f]
149 *
150 * where L is a sparse lower triangular matrix unitary on the diagonal, and D a
151 * diagonal matrix.
152 *
153 *******************************************************************************
154 *
155 * @param[inout] sopalin_data
156 * Solver matrix information structure that will guide the algorithm.
157 *
158 * @param[inout] desc
159 * StarPU descriptor of the sparse matrix.
160 *
161 ******************************************************************************/
162void
163starpu_chetrf_sp1dplus_rl( sopalin_data_t *sopalin_data,
165{
166 const SolverMatrix *solvmtx = sopalin_data->solvmtx;
167 SolverCblk *cblk, *fcblk;
168 SolverBlok *blok, *lblk;
169 pastix_int_t k, m, cblknbr, cblk_n, prio;
170
171 cblknbr = solvmtx->cblknbr;
172 cblk = solvmtx->cblktab;
173 for ( k = 0; k < solvmtx->cblknbr; k++, cblk++ ) {
174
175 if ( cblk->cblktype & CBLK_IN_SCHUR ) {
176 break;
177 }
178
179 prio = cblknbr - k;
180
181 /* If this is a fanin, let's submit the send */
182 if ( cblk->cblktype & CBLK_FANIN ) {
183 starpu_task_cadd_1dp_fanin( sopalin_data, PastixLCoef, cblk, prio );
185 continue;
186 }
187
188 /* If this is a recv, let's locally sum the accumulation received */
189 if ( cblk->cblktype & CBLK_RECV ) {
190 starpu_task_cadd_1dp_recv( sopalin_data, PastixLCoef, cblk, prio );
192 continue;
193 }
194
195 starpu_task_cblk_chetrfsp( sopalin_data, cblk, prio );
196
197 blok = cblk->fblokptr + 1; /* this diagonal block */
198 lblk = cblk[1].fblokptr; /* the next diagonal block */
199
200 /* if there are off-diagonal supernodes in the column */
201 for ( m = 0; blok < lblk; blok++, m++ ) {
202 fcblk = (solvmtx->cblktab + blok->fcblknm);
203 cblk_n = fcblk - solvmtx->cblktab;
204
205 /* Update on L */
207 cblk, blok, fcblk,
208 cblknbr - pastix_imin( k + m, cblk_n ) );
209 }
210
211 /* Unregister the temporary workspace generated by hetrf */
212 if ( cblk->handler[1] != NULL ) {
213 starpu_data_unregister_submit( cblk->handler[1] );
214 cblk->handler[1] = NULL;
215 }
216
218 }
219 (void)desc;
220}
221
222/**
223 *******************************************************************************
224 *
225 * @brief Perform a sparse LDL^h factorization with 1D kernels.
226 *
227 * The function performs the LDL^h factorization of a sparse hermitian matrix A.
228 * The factorization has the form
229 *
230 * \f[ A = L \times D \times L^h \f]
231 *
232 * where L is a sparse lower triangular matrix unitary on the diagonal, and D a
233 * diagonal matrix.
234 *
235 *******************************************************************************
236 *
237 * @param[inout] sopalin_data
238 * Solver matrix information structure that will guide the algorithm.
239 *
240 * @param[inout] desc
241 * StarPU descriptor of the sparse matrix.
242 *
243 ******************************************************************************/
244void
245starpu_chetrf_sp1dplus_ll( sopalin_data_t *sopalin_data,
247{
248 const SolverMatrix *solvmtx = sopalin_data->solvmtx;
249 SolverCblk *cblk, *fcblk;
250 SolverBlok *blok;
251 pastix_int_t k, m, cblknbr, prio;
252
253 cblknbr = solvmtx->cblknbr;
254 fcblk = solvmtx->cblktab;
255 for ( k = 0; k < solvmtx->cblknbr; k++, fcblk++ ) {
256
257 prio = cblknbr - k;
258
259 for ( m = fcblk[0].brownum; m < fcblk[1].brownum; m++ ) {
260 blok = solvmtx->bloktab + solvmtx->browtab[m];
261 cblk = solvmtx->cblktab + blok->lcblknm;
262
263 if ( cblk->cblktype & CBLK_IN_SCHUR ) {
264 break;
265 }
266 assert( !( cblk->cblktype & CBLK_FANIN ) );
267
268 /* If this is a recv, let's locally sum the accumulation received */
269 if ( cblk->cblktype & CBLK_RECV ) {
270 starpu_task_cadd_1dp_recv( sopalin_data, PastixLCoef, cblk, prio );
272 continue;
273 }
274
275 /* Update on L */
277 cblk, blok, fcblk, prio );
278 }
279
280 if ( fcblk->cblktype & ( CBLK_IN_SCHUR | CBLK_RECV ) ) {
281 continue;
282 }
283
284 /* If this is a fanin, let's submit the send */
285 if ( fcblk->cblktype & CBLK_FANIN ) {
286 starpu_task_cadd_1dp_fanin( sopalin_data, PastixLCoef, fcblk, prio );
288 continue;
289 }
290
291 starpu_task_cblk_chetrfsp( sopalin_data, fcblk, prio );
292 }
293
294 cblk = solvmtx->cblktab;
295 for ( k = 0; k < solvmtx->cblknbr; k++, cblk++ ) {
296 /* Unregister the temporary workspace generated by hetrf */
297 if ( cblk->handler[1] != NULL ) {
298 starpu_data_unregister_submit( cblk->handler[1] );
299 cblk->handler[1] = NULL;
300 }
301
302 if ( !(cblk->cblktype & (CBLK_FANIN|CBLK_RECV)) ) {
304 }
305 }
306 (void)desc;
307}
308
309/**
310 *******************************************************************************
311 *
312 * @brief Perform a sparse LDL^h factorization with 1D and 2D kernels.
313 *
314 * The function performs the LDL^h factorization of a sparse hermitian matrix A.
315 * The factorization has the form
316 *
317 * \f[ A = L \times D \times L^h \f]
318 *
319 * where L is a sparse lower triangular matrix unitary on the diagonal, and D a
320 * diagonal matrix.
321 *
322 *******************************************************************************
323 *
324 * @param[inout] sopalin_data
325 * Solver matrix information structure that will guide the algorithm.
326 *
327 * @param[inout] desc
328 * StarPU descriptor of the sparse matrix.
329 *
330 ******************************************************************************/
331void
332starpu_chetrf_sp2d_rl( sopalin_data_t *sopalin_data,
334{
335 const SolverMatrix *solvmtx = sopalin_data->solvmtx;
336 SolverCblk *cblk, *fcblk;
337 SolverBlok *blok, *lblk;
338 pastix_int_t k, m, cblknbr, cblk_n, prio;
339
340 cblknbr = solvmtx->cblknbr;
341
342 /* Let's submit all 1D tasks first */
343 cblk = solvmtx->cblktab;
344 for ( k = 0; k <= solvmtx->cblkmax1d; k++, cblk++ ) {
345
346 if ( cblk->cblktype & CBLK_IN_SCHUR ) {
347 break;
348 }
349
350 if ( cblk->cblktype & CBLK_TASKS_2D ) {
351 continue;
352 }
353
354 prio = cblknbr - k;
355
356 /* If this is a fanin, let's submit the send */
357 if ( cblk->cblktype & CBLK_FANIN ) {
358 starpu_task_cadd_1dp_fanin( sopalin_data, PastixLCoef, cblk, prio );
360 continue;
361 }
362
363 /* If this is a recv, let's locally sum the accumulation received */
364 if ( cblk->cblktype & CBLK_RECV ) {
365 starpu_task_cadd_1dp_recv( sopalin_data, PastixLCoef, cblk, prio );
367 continue;
368 }
369
370 starpu_task_chetrfsp( sopalin_data, cblk, prio );
371
372 blok = cblk->fblokptr + 1; /* this diagonal block */
373 lblk = cblk[1].fblokptr; /* the next diagonal block */
374
375 /* if there are off-diagonal supernodes in the column */
376 for ( m = 0; blok < lblk; blok++, m++ ) {
377 fcblk = (solvmtx->cblktab + blok->fcblknm);
378 cblk_n = fcblk - solvmtx->cblktab;
379
380 starpu_task_hetrf_cgemmsp( sopalin_data, cblk, blok, fcblk,
381 cblknbr - pastix_imin( k + m, cblk_n ) );
382 }
383
384 /* Unregister the temporary data generated by the hetrf kernel */
385 if ( cblk->handler[1] != NULL ) {
386 starpu_data_unregister_submit( cblk->handler[1] );
387 cblk->handler[1] = NULL;
388 }
389
391 }
392
393 /* Now we submit all 2D tasks */
394 cblk = solvmtx->cblktab + solvmtx->cblkmin2d;
395 for ( k = solvmtx->cblkmin2d; k < solvmtx->cblknbr; k++, cblk++ ) {
396
397 if ( cblk->cblktype & CBLK_IN_SCHUR ) {
398 continue;
399 }
400
401 if ( ! ( cblk->cblktype & CBLK_TASKS_2D ) ) {
402 continue; /* skip 1D cblk */
403 }
404
405 prio = cblknbr - k;
406
407 /* If this is a fanin, let's submit the send */
408 if ( cblk->cblktype & CBLK_FANIN ) {
409 starpu_task_cadd_2d_fanin( sopalin_data, PastixLCoef, cblk, prio );
411 continue;
412 }
413
414 /* If this is a recv, let's locally sum the accumulation received */
415 if ( cblk->cblktype & CBLK_RECV ) {
416 starpu_task_cadd_2d_recv( sopalin_data, PastixLCoef, cblk, prio );
418 continue;
419 }
420
421 starpu_task_chetrfsp( sopalin_data, cblk, prio );
422
423 blok = cblk->fblokptr + 1;
424 lblk = cblk[1].fblokptr;
425
426 for ( m = 0; blok < lblk; blok++, m++ ) {
427 fcblk = ( solvmtx->cblktab + blok->fcblknm );
428 cblk_n = blok->fcblknm;
429
430 starpu_task_hetrf_cgemmsp( sopalin_data, cblk, blok, fcblk,
431 cblknbr - pastix_imin( k + m, cblk_n ) );
432
433 /* Skip blocks facing the same cblk */
434 while( ( blok < lblk ) &&
435 ( blok[0].fcblknm == blok[1].fcblknm ) &&
436 ( blok[0].lcblknm == blok[1].lcblknm ) )
437 {
438 blok++;
439 }
440 }
441
443 }
444
445 (void)desc;
446}
447
448/**
449 *******************************************************************************
450 *
451 * @brief Perform a sparse LDL^h factorization with 1D and 2D kernels.
452 *
453 * The function performs the LDL^h factorization of a sparse hermitian matrix A.
454 * The factorization has the form
455 *
456 * \f[ A = L \times D \times L^h \f]
457 *
458 * where L is a sparse lower triangular matrix unitary on the diagonal, and D a
459 * diagonal matrix.
460 *
461 *******************************************************************************
462 *
463 * @param[inout] sopalin_data
464 * Solver matrix information structure that will guide the algorithm.
465 *
466 * @param[inout] desc
467 * StarPU descriptor of the sparse matrix.
468 *
469 ******************************************************************************/
470void
471starpu_chetrf_sp2d_ll( sopalin_data_t *sopalin_data,
473{
474 const SolverMatrix *solvmtx = sopalin_data->solvmtx;
475 SolverCblk *cblk, *fcblk;
476 SolverBlok *blok = NULL;
477 SolverBlok *blok_prev;
478 pastix_int_t k, m, cblknbr, prio;
479
480 cblknbr = solvmtx->cblknbr;
481 fcblk = solvmtx->cblktab;
482
483 for ( k = 0; k < cblknbr; k++, fcblk++ ) {
484
485 prio = cblknbr - k;
486
487 for ( m = fcblk[0].brownum; m < fcblk[1].brownum; m++ ) {
488 blok_prev = blok;
489 blok = solvmtx->bloktab + solvmtx->browtab[m];
490 cblk = solvmtx->cblktab + blok->lcblknm;
491
492 if ( cblk->cblktype & CBLK_IN_SCHUR ) {
493 continue;
494 }
495 assert( !(cblk->cblktype & CBLK_FANIN ) );
496
497 if( ( cblk->cblktype & CBLK_TASKS_2D ) &&
498 ( blok_prev != NULL ) &&
499 ( blok_prev->fcblknm == blok->fcblknm ) &&
500 ( blok_prev->lcblknm == blok->lcblknm ) )
501 {
502 continue;
503 }
504
505 if ( cblk->cblktype & CBLK_RECV ) {
506 starpu_task_cadd_recv( sopalin_data, PastixLCoef, cblk, prio );
508 continue;
509 }
510
511 starpu_task_hetrf_cgemmsp( sopalin_data, cblk, blok, fcblk,
512 prio );
513 }
514
515 if ( fcblk->cblktype & ( CBLK_IN_SCHUR | CBLK_RECV ) ) {
516 continue;
517 }
518
519 if ( fcblk->cblktype & CBLK_FANIN ) {
520 starpu_task_cadd_fanin( sopalin_data, PastixLCoef, fcblk, prio );
522 continue;
523 }
524
525 starpu_task_chetrfsp( sopalin_data, fcblk, prio );
526 }
527
528 cblk = solvmtx->cblktab;
529 for ( k = 0; k < solvmtx->cblknbr; k++, cblk++ ) {
530 /* Unregister the temporary workspace generated by hetrf */
531 if ( cblk->handler[1] != NULL ) {
532 starpu_data_unregister_submit( cblk->handler[1] );
533 cblk->handler[1] = NULL;
534 }
535
536 if ( !(cblk->cblktype & (CBLK_FANIN|CBLK_RECV)) ) {
538 }
539 }
540
541 (void)desc;
542}
543
544/**
545 *******************************************************************************
546 *
547 * @brief Perform a sparse LDL^h factorization using StarPU runtime.
548 *
549 * The function performs the LDL^h factorization of a sparse hermitian matrix A.
550 * The factorization has the form
551 *
552 * \f[ A = L \times D \times L^h \f]
553 *
554 * where L is a sparse lower triangular matrix unitary on the diagonal, and D a
555 * diagonal matrix.
556 *
557 * The algorithm is automatically chosen between the 1D and 2D version based on
558 * the API parameter IPARM_TASKS2D_LEVEL. If IPARM_TASKS2D_LEVEL != 0
559 * the 2D scheme is applied, the 1D otherwise.
560 *
561 *******************************************************************************
562 *
563 * @param[inout] pastix_data
564 * The pastix_data structure that describes the solver instance.
565 *
566 * @param[inout] sopalin_data
567 * Solver matrix information structure that will guide the algorithm.
568 *
569 ******************************************************************************/
570void
572 sopalin_data_t *sopalin_data )
573{
574 starpu_sparse_matrix_desc_t *sdesc = sopalin_data->solvmtx->starpu_desc;
575 float sub = 0.;
576 float com = 0.;
577
578 /*
579 * Start StarPU if not already started
580 */
581 if (pastix_data->starpu == NULL) {
582 int argc = 0;
583 pastix_starpu_init( pastix_data, &argc, NULL, NULL );
584 }
585
586 if ( sdesc == NULL ) {
587 /* Create the matrix descriptor */
588 starpu_sparse_matrix_init( sopalin_data->solvmtx,
590 pastix_data->inter_node_procnbr,
591 pastix_data->inter_node_procnum,
592 PastixComplex32 );
593 sdesc = sopalin_data->solvmtx->starpu_desc;
594 }
595
596 starpu_profiling_status_set(STARPU_PROFILING_ENABLE);
597#if defined(STARPU_USE_FXT)
598 if (pastix_data->iparm[IPARM_TRACE] & PastixTraceNumfact) {
599 starpu_fxt_start_profiling();
600 }
601#endif
602#if defined(PASTIX_STARPU_STATS)
603 clockStart( sub );
604#else
605 starpu_resume();
606#endif
607 /*
608 * Select 1D or 2D algorithm based on 2d tasks level
609 */
610 if ( pastix_data->iparm[IPARM_TASKS2D_LEVEL] != 0 )
611 {
612 if ( pastix_data->iparm[IPARM_FACTO_LOOK_SIDE] == PastixFactLeftLooking ) {
613 starpu_chetrf_sp2d_ll( sopalin_data, sdesc );
614 }
615 else {
616 starpu_chetrf_sp2d_rl( sopalin_data, sdesc );
617 }
618 }
619 else
620 {
621 if ( pastix_data->iparm[IPARM_FACTO_LOOK_SIDE] == PastixFactLeftLooking ) {
622 starpu_chetrf_sp1dplus_ll( sopalin_data, sdesc );
623 }
624 else {
625 starpu_chetrf_sp1dplus_rl( sopalin_data, sdesc );
626 }
627 }
628
630#if defined(PASTIX_STARPU_STATS)
631 clockStop( sub );
632 clockStart( com );
633 starpu_resume();
634#endif
635 starpu_task_wait_for_all();
636#if defined(PASTIX_WITH_MPI)
637 starpu_mpi_wait_for_all( pastix_data->pastix_comm );
638 starpu_mpi_barrier( pastix_data->inter_node_comm );
639#endif
640 starpu_pause();
641#if defined(STARPU_USE_FXT)
642 if (pastix_data->iparm[IPARM_TRACE] & PastixTraceNumfact) {
643 starpu_fxt_stop_profiling();
644 }
645#endif
646 starpu_profiling_status_set(STARPU_PROFILING_DISABLE);
647#if defined(PASTIX_STARPU_STATS)
648 clockStop( com );
649 print_stats( sub, com, pastix_data->solvmatr );
650#endif
651
652 (void)com;
653 (void)sub;
654 return;
655}
656
657/**
658 *@}
659 */
BEGIN_C_DECLS typedef int pastix_int_t
Definition datatypes.h:51
#define PastixHermitian
Definition api.h:460
@ PastixLCoef
Definition api.h:478
@ PastixUCoef
Definition api.h:479
@ IPARM_TASKS2D_LEVEL
Definition api.h:90
@ IPARM_FACTO_LOOK_SIDE
Definition api.h:100
@ IPARM_TRACE
Definition api.h:44
@ PastixUpper
Definition api.h:466
@ PastixRight
Definition api.h:496
@ PastixNonUnit
Definition api.h:487
@ PastixConjTrans
Definition api.h:447
@ PastixNoTrans
Definition api.h:445
@ PastixTrans
Definition api.h:446
@ PastixFactLeftLooking
Definition api.h:326
@ PastixTraceNumfact
Definition api.h:211
void starpu_sparse_matrix_getoncpu(starpu_sparse_matrix_desc_t *desc)
Submit asynchronous calls to retrieve the data on main memory.
void starpu_task_blok_chetrf(sopalin_data_t *sopalin_data, SolverCblk *cblk, int prio)
TODO.
void starpu_sparse_matrix_init(SolverMatrix *solvmtx, pastix_mtxtype_t mtxtype, int nodes, int myrank, pastix_coeftype_t flttype)
Generate the StarPU descriptor of the sparse matrix.
void starpu_task_blok_cscalo(sopalin_data_t *sopalin_data, pastix_trans_t trans, const SolverCblk *cblk, SolverBlok *blok, int prio)
TODO.
void pastix_starpu_init(pastix_data_t *pastix, int *argc, char **argv[], const int *bindtab)
Startup the StarPU runtime system.
Definition starpu.c:92
void starpu_task_blok_ctrsmsp(sopalin_data_t *sopalin_data, pastix_coefside_t coef, pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, SolverBlok *blok, int prio)
StarPU GPU implementation.
void starpu_task_cblk_cgemmsp(sopalin_data_t *sopalin_data, pastix_coefside_t sideA, pastix_coefside_t sideB, pastix_trans_t trans, const SolverCblk *cblk, const SolverBlok *blok, SolverCblk *fcblk, int prio)
StarPU GPU implementation.
void starpu_sparse_cblk_wont_use(pastix_coefside_t coef, SolverCblk *cblk)
Submit asynchronous calls to retrieve the data on main memory.
void starpu_task_blok_cgemmsp(sopalin_data_t *sopalin_data, pastix_coefside_t sideA, pastix_coefside_t sideB, pastix_trans_t trans, SolverCblk *cblk, SolverCblk *fcblk, const SolverBlok *blokA, const SolverBlok *blokB, int prio)
StarPU GPU implementation.
void starpu_task_cblk_chetrfsp(sopalin_data_t *sopalin_data, SolverCblk *cblk, int prio)
TODO.
StarPU descriptor stucture for the sparse matrix.
PASTIX_Comm pastix_comm
Definition pastixdata.h:76
int inter_node_procnum
Definition pastixdata.h:84
SolverMatrix * solvmatr
Definition pastixdata.h:103
int inter_node_procnbr
Definition pastixdata.h:83
void * starpu
Definition pastixdata.h:88
pastix_int_t * iparm
Definition pastixdata.h:70
PASTIX_Comm inter_node_comm
Definition pastixdata.h:78
Main PaStiX data structure.
Definition pastixdata.h:68
void starpu_chetrf_sp1dplus_rl(sopalin_data_t *sopalin_data, starpu_sparse_matrix_desc_t *desc)
Perform a sparse LDL^h factorization with 1D kernels.
void starpu_task_hetrf_cgemmsp(sopalin_data_t *sopalin_data, SolverCblk *cblk, SolverBlok *blokB, SolverCblk *fcblk, int prio)
Submits starpu cgemmsp cblk or blok task.
void starpu_chetrf_sp2d_rl(sopalin_data_t *sopalin_data, starpu_sparse_matrix_desc_t *desc)
Perform a sparse LDL^h factorization with 1D and 2D kernels.
void starpu_chetrf_sp2d_ll(sopalin_data_t *sopalin_data, starpu_sparse_matrix_desc_t *desc)
Perform a sparse LDL^h factorization with 1D and 2D kernels.
void starpu_chetrf_sp1dplus_ll(sopalin_data_t *sopalin_data, starpu_sparse_matrix_desc_t *desc)
Perform a sparse LDL^h factorization with 1D kernels.
void starpu_task_chetrfsp(sopalin_data_t *sopalin_data, SolverCblk *cblk, int prio)
Submits starpu hetrfsp cblk or blok task.
void starpu_chetrf(pastix_data_t *pastix_data, sopalin_data_t *sopalin_data)
Perform a sparse LDL^h factorization using StarPU runtime.
void starpu_task_cadd_recv(sopalin_data_t *sopalin_data, pastix_coefside_t side, const SolverCblk *cblk, int prio)
Submits starpu zadd task to send the recv cblk.
void starpu_task_cadd_1dp_recv(sopalin_data_t *sopalin_data, pastix_coefside_t side, const SolverCblk *cblk, int prio)
Submits starpu zadd task to receive and add the recv cblk.
void starpu_task_cadd_fanin(sopalin_data_t *sopalin_data, pastix_coefside_t side, const SolverCblk *cblk, int prio)
Submits starpu zadd task to send the fanin cblk.
void starpu_task_cadd_2d_fanin(sopalin_data_t *sopalin_data, pastix_coefside_t side, const SolverCblk *cblk, int prio)
Submits starpu zadd task to send the fanin block.
void starpu_task_cadd_1dp_fanin(sopalin_data_t *sopalin_data, pastix_coefside_t side, const SolverCblk *cblk, int prio)
Submits starpu zadd task to send the fanin cblk.
void starpu_task_cadd_2d_recv(sopalin_data_t *sopalin_data, pastix_coefside_t side, const SolverCblk *cblk, int prio)
Submits starpu zadd task to receive and add the recv block.
pastix_int_t cblkmin2d
Definition solver.h:219
void * handler[2]
Definition solver.h:142
pastix_int_t brownum
Definition solver.h:171
pastix_int_t fcblknm
Definition solver.h:144
pastix_int_t cblknbr
Definition solver.h:211
SolverBlok *restrict bloktab
Definition solver.h:229
pastix_int_t cblkmax1d
Definition solver.h:218
SolverBlok * fblokptr
Definition solver.h:168
pastix_int_t *restrict browtab
Definition solver.h:230
pastix_int_t lcblknm
Definition solver.h:143
SolverCblk *restrict cblktab
Definition solver.h:228
void * handler[2]
Definition solver.h:179
int8_t cblktype
Definition solver.h:164
Solver block structure.
Definition solver.h:141
Solver column block structure.
Definition solver.h:161
Solver column block structure.
Definition solver.h:203