PaStiX Handbook 6.4.0
Loading...
Searching...
No Matches
starpu_zgetrf.c
Go to the documentation of this file.
1/**
2 *
3 * @file starpu_zgetrf.c
4 *
5 * PaStiX zgetrf 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_zgetrf.c, normal z -> z, Tue Feb 25 14:35:27 2025
18 *
19 * @addtogroup starpu_getrf
20 * @{
21 *
22 **/
23#include "common.h"
24#include "blend/solver.h"
25#include "sopalin/sopalin_data.h"
26#include "pastix_zcores.h"
27#include "pastix_starpu.h"
28#include "pastix_zstarpu.h"
29#include "timing.h"
30
31/**
32 *******************************************************************************
33 *
34 * @brief Submits starpu getrfsp 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_zgetrfsp( 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_zgetrf( 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
68 cblk, blok, prio );
69
70 /* Skip blocks facing the same cblk */
71 while ( ( blok < lblk ) &&
72 ( blok[0].fcblknm == blok[1].fcblknm ) &&
73 ( blok[0].lcblknm == blok[1].lcblknm ) )
74 {
75 blok++;
76 }
77 }
78 }
79 else {
80 starpu_task_cblk_zgetrfsp( sopalin_data, cblk, prio );
81 }
82}
83
84/**
85 *******************************************************************************
86 *
87 * @brief Submits starpu zgemmsp cblk or blok task.
88 *
89 *******************************************************************************
90 *
91 * @param[in] sopalin_data
92 * Solver matrix information structure that will guide the algorithm.
93 *
94 * @param[in] cblk
95 * The column block.
96 *
97 * @param[in] blokB
98 * The block.
99 *
100 * @param[in] fcblk
101 * The facing column block.
102 *
103 * @param[in] prio
104 * The task priority.
105 *
106 *******************************************************************************/
107void
108starpu_task_getrf_zgemmsp( sopalin_data_t *sopalin_data,
109 SolverCblk *cblk,
110 const SolverBlok *blokB,
111 SolverCblk *fcblk,
112 int prio )
113{
114 const SolverBlok *blokA, *lblk;
115 lblk = cblk[1].fblokptr;
116
117 if ( cblk->cblktype & CBLK_TASKS_2D ) {
118 for ( blokA = blokB; blokA < lblk; blokA++ ) {
119 if ( blokA == blokB ) {
121 cblk, fcblk, blokB, blokB, prio );
122
123 /* Skip A blocks facing the same cblk */
124 while ( ( blokA < lblk ) &&
125 ( blokA[0].fcblknm == blokA[1].fcblknm ) &&
126 ( blokA[0].lcblknm == blokA[1].lcblknm ) )
127 {
128 blokA++;
129 }
130 continue;
131 }
133 cblk, fcblk, blokA, blokB, prio );
134
136 cblk, fcblk, blokA, blokB, prio );
137
138 /* Skip A blocks facing the same cblk */
139 while ( ( blokA < lblk ) &&
140 ( blokA[0].fcblknm == blokA[1].fcblknm ) &&
141 ( blokA[0].lcblknm == blokA[1].lcblknm ) )
142 {
143 blokA++;
144 }
145 }
146 }
147 else {
148 /* Update on L */
150 cblk, blokB, fcblk, prio );
151
152 /* Update on U */
153 if ( blokB+1 < lblk ) {
155 cblk, blokB, fcblk, prio );
156 }
157 }
158}
159
160/**
161 *******************************************************************************
162 *
163 * @brief Perform a sparse LU factorization with 1D kernels.
164 *
165 * The function performs the LU factorization of a sparse general matrix A.
166 * The factorization has the form
167 *
168 * \f[ A = L\times U \f]
169 *
170 * where L is a sparse lower triangular matrix, and U a sparse upper triangular
171 * with the same pattern as L^t.
172 *
173 *******************************************************************************
174 *
175 * @param[inout] sopalin_data
176 * Solver matrix information structure that will guide the algorithm.
177 *
178 * @param[inout] desc
179 * StarPU descriptor of the sparse matrix.
180 *
181 ******************************************************************************/
182void
183starpu_zgetrf_sp1dplus_rl( sopalin_data_t *sopalin_data,
185{
186 const SolverMatrix *solvmtx = sopalin_data->solvmtx;
187 SolverCblk *cblk, *fcblk;
188 SolverBlok *blok, *lblk;
189 pastix_int_t k, m, cblknbr, cblk_n, prio;
190
191 cblknbr = solvmtx->cblknbr;
192 cblk = solvmtx->cblktab;
193 for ( k = 0; k < solvmtx->cblknbr; k++, cblk++ ) {
194
195 if ( cblk->cblktype & CBLK_IN_SCHUR ) {
196 break;
197 }
198
199 prio = cblknbr - k;
200
201 /* If this is a fanin, let's submit the send */
202 if ( cblk->cblktype & CBLK_FANIN ) {
203 starpu_task_zadd_1dp_fanin( sopalin_data, PastixLCoef, cblk, prio );
204 starpu_task_zadd_1dp_fanin( sopalin_data, PastixUCoef, cblk, prio );
206 continue;
207 }
208
209 /* If this is a recv, let's locally sum the accumulation received */
210 if ( cblk->cblktype & CBLK_RECV ) {
211 starpu_task_zadd_1dp_recv( sopalin_data, PastixLCoef, cblk, prio );
212 starpu_task_zadd_1dp_recv( sopalin_data, PastixUCoef, cblk, prio );
214 continue;
215 }
216
217 starpu_task_zgetrfsp( sopalin_data, cblk, prio );
218
219 blok = cblk->fblokptr + 1; /* this diagonal block */
220 lblk = cblk[1].fblokptr; /* the next diagonal block */
221
222 /* if there are off-diagonal supernodes in the column */
223 for ( m = 0; blok < lblk; blok++, m++ ) {
224 fcblk = (solvmtx->cblktab + blok->fcblknm);
225 cblk_n = fcblk - solvmtx->cblktab;
226 prio = cblknbr - pastix_imin( k + m, cblk_n );
227
228 /* Update on L */
230 cblk, blok, fcblk, prio );
231
232 /* Update on U */
233 if ( blok+1 < lblk ) {
235 cblk, blok, fcblk, prio );
236 }
237 }
239 }
240 (void)desc;
241}
242
243/**
244 *******************************************************************************
245 *
246 * @brief Perform a sparse LU factorization with 1D kernels.
247 *
248 * The function performs the LU factorization of a sparse general matrix A.
249 * The factorization has the form
250 *
251 * \f[ A = L\times U \f]
252 *
253 * where L is a sparse lower triangular matrix, and U a sparse upper triangular
254 * with the same pattern as L^t.
255 *
256 *******************************************************************************
257 *
258 * @param[inout] sopalin_data
259 * Solver matrix information structure that will guide the algorithm.
260 *
261 * @param[inout] desc
262 * StarPU descriptor of the sparse matrix.
263 *
264 ******************************************************************************/
265void
266starpu_zgetrf_sp1dplus_ll( sopalin_data_t *sopalin_data,
268{
269 const SolverMatrix *solvmtx = sopalin_data->solvmtx;
270 SolverCblk *cblk, *fcblk;
271 SolverBlok *blok, *lblk;
272 pastix_int_t k, m, cblknbr, prio;
273
274 cblknbr = solvmtx->cblknbr;
275 fcblk = solvmtx->cblktab;
276 for ( k = 0; k < solvmtx->cblknbr; k++, fcblk++ ) {
277
278 prio = cblknbr - k;
279
280 for ( m = fcblk[0].brownum; m < fcblk[1].brownum; m++ ) {
281 blok = solvmtx->bloktab + solvmtx->browtab[m];
282 cblk = solvmtx->cblktab + blok->lcblknm;
283
284 if ( cblk->cblktype & CBLK_IN_SCHUR ) {
285 break;
286 }
287 assert( !( cblk->cblktype & CBLK_FANIN ) );
288
289 /* If this is a recv, let's locally sum the accumulation received */
290 if ( cblk->cblktype & CBLK_RECV ) {
291 starpu_task_zadd_1dp_recv( sopalin_data, PastixLCoef, cblk, prio );
292 starpu_task_zadd_1dp_recv( sopalin_data, PastixUCoef, cblk, prio );
294 continue;
295 }
296
297 /* Update on L */
299 cblk, blok, fcblk, prio );
300
301 lblk = fcblk[1].fblokptr;
302
303 /* Update on U */
304 if ( blok+1 < lblk ) {
306 cblk, blok, fcblk, prio);
307 }
308 }
309
310 if ( fcblk->cblktype & ( CBLK_IN_SCHUR | CBLK_RECV ) ) {
311 continue;
312 }
313
314 /* If this is a fanin, let's submit the send */
315 if ( fcblk->cblktype & CBLK_FANIN ) {
316 starpu_task_zadd_1dp_fanin( sopalin_data, PastixLCoef, fcblk, prio );
317 starpu_task_zadd_1dp_fanin( sopalin_data, PastixUCoef, fcblk, prio );
319 continue;
320 }
321
322 starpu_task_zgetrfsp( sopalin_data, fcblk, prio );
323 }
324
325 cblk = solvmtx->cblktab;
326 for ( k = 0; k < solvmtx->cblknbr; k++, cblk++ ) {
327 if ( !(cblk->cblktype & (CBLK_FANIN|CBLK_RECV)) ) {
329 }
330 }
331 (void)desc;
332}
333
334/**
335 *******************************************************************************
336 *
337 * @brief Perform a sparse LU factorization with 1D and 2D kernels.
338 *
339 * The function performs the LU factorization of a sparse general matrix A.
340 * The factorization has the form
341 *
342 * \f[ A = L\times U \f]
343 *
344 * where L is a sparse lower triangular matrix, and U a sparse upper triangular
345 * with the same pattern as L^t.
346 *
347 *******************************************************************************
348 *
349 * @param[inout] sopalin_data
350 * Solver matrix information structure that will guide the algorithm.
351 *
352 * @param[inout] desc
353 * StarPU descriptor of the sparse matrix.
354 *
355 ******************************************************************************/
356void
357starpu_zgetrf_sp2d_rl( sopalin_data_t *sopalin_data,
359{
360 const SolverMatrix *solvmtx = sopalin_data->solvmtx;
361 SolverCblk *cblk, *fcblk;
362 SolverBlok *blok, *lblk;
363 pastix_int_t k, m, cblknbr, cblk_n, prio;
364
365 cblknbr = solvmtx->cblknbr;
366
367 /* Let's submit all 1D tasks first */
368 cblk = solvmtx->cblktab;
369 for ( k = 0; k <= solvmtx->cblkmax1d; k++, cblk++ ) {
370
371 if ( cblk->cblktype & CBLK_IN_SCHUR ) {
372 break;
373 }
374
375 if ( cblk->cblktype & CBLK_TASKS_2D ) {
376 continue;
377 }
378
379 prio = cblknbr - k;
380
381 /* If this is a fanin, let's submit the send */
382 if ( cblk->cblktype & CBLK_FANIN ) {
383 starpu_task_zadd_1dp_fanin( sopalin_data, PastixLCoef, cblk, prio );
384 starpu_task_zadd_1dp_fanin( sopalin_data, PastixUCoef, cblk, prio );
386 continue;
387 }
388
389 /* If this is a recv, let's locally sum the accumulation received */
390 if ( cblk->cblktype & CBLK_RECV ) {
391 starpu_task_zadd_1dp_recv( sopalin_data, PastixLCoef, cblk, prio );
392 starpu_task_zadd_1dp_recv( sopalin_data, PastixUCoef, cblk, prio );
394 continue;
395 }
396
397 starpu_task_zgetrfsp( sopalin_data, cblk, prio );
398
399 blok = cblk->fblokptr + 1; /* this diagonal block */
400 lblk = cblk[1].fblokptr; /* the next diagonal block */
401
402 /* if there are off-diagonal supernodes in the column */
403 for ( m = 0; blok < lblk; blok++, m++ ) {
404 fcblk = (solvmtx->cblktab + blok->fcblknm);
405 cblk_n = fcblk - solvmtx->cblktab;
406
407 starpu_task_getrf_zgemmsp( sopalin_data, cblk, blok, fcblk,
408 cblknbr - pastix_imin( k + m, cblk_n ) );
409 }
411 }
412
413 /* Now we submit all 2D tasks */
414 cblk = solvmtx->cblktab + solvmtx->cblkmin2d;
415 for ( k = solvmtx->cblkmin2d; k < solvmtx->cblknbr; k++, cblk++ ) {
416
417 if ( cblk->cblktype & CBLK_IN_SCHUR ) {
418 continue;
419 }
420
421 if ( ! ( cblk->cblktype & CBLK_TASKS_2D ) ) {
422 continue; /* skip 1D cblk */
423 }
424
425 prio = cblknbr - k;
426
427 /* If this is a fanin, let's submit the send */
428 if ( cblk->cblktype & CBLK_FANIN ) {
429 starpu_task_zadd_2d_fanin( sopalin_data, PastixLCoef, cblk, prio );
430 starpu_task_zadd_2d_fanin( sopalin_data, PastixUCoef, cblk, prio );
432 continue;
433 }
434
435 /* If this is a recv, let's locally sum the accumulation received */
436 if ( cblk->cblktype & CBLK_RECV ) {
437 starpu_task_zadd_2d_recv( sopalin_data, PastixLCoef, cblk, prio );
438 starpu_task_zadd_2d_recv( sopalin_data, PastixUCoef, cblk, prio );
440 continue;
441 }
442
443 starpu_task_zgetrfsp( sopalin_data, cblk, prio );
444
445 blok = cblk->fblokptr + 1; /* this diagonal block */
446 lblk = cblk[1].fblokptr;
447
448 for ( m = 0; blok < lblk; blok++, m++ ) {
449 fcblk = ( solvmtx->cblktab + blok->fcblknm );
450 cblk_n = blok->fcblknm;;
451
452 starpu_task_getrf_zgemmsp( sopalin_data, cblk, blok, fcblk,
453 cblknbr - pastix_imin( k + m, cblk_n ) );
454
455 /* Skip blocks facing the same cblk */
456 while( ( blok < lblk ) &&
457 ( blok[0].fcblknm == blok[1].fcblknm ) &&
458 ( blok[0].lcblknm == blok[1].lcblknm ) )
459 {
460 blok++;
461 }
462 }
464 }
465
466 (void)desc;
467}
468
469/**
470 *******************************************************************************
471 *
472 * @brief Perform a sparse LU factorization with 1D and 2D kernels.
473 *
474 * The function performs the LU factorization of a sparse general matrix A.
475 * The factorization has the form
476 *
477 * \f[ A = L\times U \f]
478 *
479 * where L is a sparse lower triangular matrix, and U a sparse upper triangular
480 * with the same pattern as L^t.
481 *
482 *******************************************************************************
483 *
484 * @param[inout] sopalin_data
485 * Solver matrix information structure that will guide the algorithm.
486 *
487 * @param[inout] desc
488 * StarPU descriptor of the sparse matrix.
489 *
490 ******************************************************************************/
491void
492starpu_zgetrf_sp2d_ll( sopalin_data_t *sopalin_data,
494{
495 const SolverMatrix *solvmtx = sopalin_data->solvmtx;
496 SolverCblk *cblk, *fcblk;
497 SolverBlok *blok = NULL;
498 SolverBlok *blok_prev;
499 pastix_int_t k, m, cblknbr, prio;
500
501 cblknbr = solvmtx->cblknbr;
502 fcblk = solvmtx->cblktab;
503 for ( k = 0; k < cblknbr; k++, fcblk++ ) {
504
505 prio = cblknbr - k;
506
507 for ( m = fcblk[0].brownum; m < fcblk[1].brownum; m++ ) {
508 blok_prev = blok;
509 blok = solvmtx->bloktab + solvmtx->browtab[m];
510 cblk = solvmtx->cblktab + blok->lcblknm;
511
512 if ( cblk->cblktype & CBLK_IN_SCHUR ) {
513 continue;
514 }
515 assert( !(cblk->cblktype & CBLK_FANIN ) );
516
517 if( ( cblk->cblktype & CBLK_TASKS_2D ) &&
518 ( blok_prev != NULL ) &&
519 ( blok_prev->fcblknm == blok->fcblknm ) &&
520 ( blok_prev->lcblknm == blok->lcblknm ) )
521 {
522 continue;
523 }
524
525 if ( cblk->cblktype & CBLK_RECV ) {
526 starpu_task_zadd_recv( sopalin_data, PastixLCoef, cblk, prio );
527 starpu_task_zadd_recv( sopalin_data, PastixUCoef, cblk, prio );
529 continue;
530 }
531
532 starpu_task_getrf_zgemmsp( sopalin_data, cblk, blok, fcblk,
533 prio );
534 }
535
536 if ( fcblk->cblktype & ( CBLK_IN_SCHUR | CBLK_RECV ) ) {
537 continue;
538 }
539
540 if ( fcblk->cblktype & CBLK_FANIN ) {
541 starpu_task_zadd_fanin( sopalin_data, PastixLCoef, fcblk, prio );
542 starpu_task_zadd_fanin( sopalin_data, PastixUCoef, fcblk, prio );
544 continue;
545 }
546
547 starpu_task_zgetrfsp( sopalin_data, fcblk, prio );
548 }
549
550 cblk = solvmtx->cblktab;
551 for ( k = 0; k < solvmtx->cblknbr; k++, cblk++ ) {
552 if ( !(cblk->cblktype & (CBLK_FANIN|CBLK_RECV)) ) {
554 }
555 }
556
557 (void)desc;
558}
559
560/**
561 *******************************************************************************
562 *
563 * @brief Perform a sparse LU factorization using StarPU runtime.
564 *
565 * The function performs the LU factorization of a sparse general matrix A.
566 * The factorization has the form
567 *
568 * \f[ A = L\times U \f]
569 *
570 * where L is a sparse lower triangular matrix, and U a sparse upper triangular
571 * with the same pattern as L^t.
572 *
573 * The algorithm is automatically chosen between the 1D and 2D version based on
574 * the API parameter IPARM_TASKS2D_LEVEL. If IPARM_TASKS2D_LEVEL != 0
575 * the 2D scheme is applied, the 1D otherwise.
576 *
577 *******************************************************************************
578 *
579 * @param[inout] pastix_data
580 * The pastix_data structure that describes the solver instance.
581 *
582 * @param[inout] sopalin_data
583 * Solver matrix information structure that will guide the algorithm.
584 *
585 ******************************************************************************/
586void
588 sopalin_data_t *sopalin_data )
589{
590 starpu_sparse_matrix_desc_t *sdesc = sopalin_data->solvmtx->starpu_desc;
591 double sub = 0.;
592 double com = 0.;
593
594 /*
595 * Start StarPU if not already started
596 */
597 if (pastix_data->starpu == NULL) {
598 int argc = 0;
599 pastix_starpu_init( pastix_data, &argc, NULL, NULL );
600 }
601
602 if ( sdesc == NULL ) {
603 /* Create the matrix descriptor */
604 starpu_sparse_matrix_init( sopalin_data->solvmtx,
606 pastix_data->inter_node_procnbr,
607 pastix_data->inter_node_procnum,
608 PastixComplex64 );
609 sdesc = sopalin_data->solvmtx->starpu_desc;
610 }
611
612 starpu_profiling_status_set(STARPU_PROFILING_ENABLE);
613#if defined(STARPU_USE_FXT)
614 if (pastix_data->iparm[IPARM_TRACE] & PastixTraceNumfact) {
615 starpu_fxt_start_profiling();
616 }
617#endif
618#if defined(PASTIX_STARPU_STATS)
619 clockStart( sub );
620#else
621 starpu_resume();
622#endif
623 /*
624 * Select 1D or 2D algorithm based on 2d tasks level
625 */
626 if ( pastix_data->iparm[IPARM_TASKS2D_LEVEL] != 0 )
627 {
628 if ( pastix_data->iparm[IPARM_FACTO_LOOK_SIDE] == PastixFactLeftLooking ) {
629 starpu_zgetrf_sp2d_ll( sopalin_data, sdesc );
630 }
631 else {
632 starpu_zgetrf_sp2d_rl( sopalin_data, sdesc );
633 }
634 }
635 else
636 {
637 if ( pastix_data->iparm[IPARM_FACTO_LOOK_SIDE] == PastixFactLeftLooking ) {
638 starpu_zgetrf_sp1dplus_ll( sopalin_data, sdesc );
639 }
640 else {
641 starpu_zgetrf_sp1dplus_rl( sopalin_data, sdesc );
642 }
643 }
644
646#if defined(PASTIX_STARPU_STATS)
647 clockStop( sub );
648 clockStart( com );
649 starpu_resume();
650#endif
651 starpu_task_wait_for_all();
652#if defined(PASTIX_WITH_MPI)
653 starpu_mpi_wait_for_all( pastix_data->pastix_comm );
654 starpu_mpi_barrier( pastix_data->inter_node_comm );
655#endif
656 starpu_pause();
657#if defined(STARPU_USE_FXT)
658 if (pastix_data->iparm[IPARM_TRACE] & PastixTraceNumfact) {
659 starpu_fxt_stop_profiling();
660 }
661#endif
662 starpu_profiling_status_set(STARPU_PROFILING_DISABLE);
663#if defined(PASTIX_STARPU_STATS)
664 clockStop( com );
665 print_stats( sub, com, pastix_data->solvmatr );
666#endif
667
668 (void)com;
669 (void)sub;
670 return;
671}
672
673/**
674 *@}
675 */
BEGIN_C_DECLS typedef int pastix_int_t
Definition datatypes.h:51
#define PastixGeneral
Definition api.h:458
@ PastixLCoef
Definition api.h:478
@ PastixLUCoef
Definition api.h:480
@ 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
@ PastixUnit
Definition api.h:488
@ PastixNonUnit
Definition api.h:487
@ PastixNoTrans
Definition api.h:445
@ PastixTrans
Definition api.h:446
@ PastixFactLeftLooking
Definition api.h:326
@ PastixTraceNumfact
Definition api.h:211
void starpu_task_cblk_zgetrfsp(sopalin_data_t *sopalin_data, SolverCblk *cblk, int prio)
TODO.
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_zgetrf(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_cblk_zgemmsp(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 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_ztrsmsp(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_sparse_cblk_wont_use(pastix_coefside_t coef, SolverCblk *cblk)
Submit asynchronous calls to retrieve the data on main memory.
void starpu_task_blok_zgemmsp(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.
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_zgetrf_sp1dplus_rl(sopalin_data_t *sopalin_data, starpu_sparse_matrix_desc_t *desc)
Perform a sparse LU factorization with 1D kernels.
void starpu_zgetrf_sp1dplus_ll(sopalin_data_t *sopalin_data, starpu_sparse_matrix_desc_t *desc)
Perform a sparse LU factorization with 1D kernels.
void starpu_task_zgetrfsp(sopalin_data_t *sopalin_data, SolverCblk *cblk, int prio)
Submits starpu getrfsp cblk or blok task.
void starpu_zgetrf_sp2d_rl(sopalin_data_t *sopalin_data, starpu_sparse_matrix_desc_t *desc)
Perform a sparse LU factorization with 1D and 2D kernels.
void starpu_zgetrf_sp2d_ll(sopalin_data_t *sopalin_data, starpu_sparse_matrix_desc_t *desc)
Perform a sparse LU factorization with 1D and 2D kernels.
void starpu_task_getrf_zgemmsp(sopalin_data_t *sopalin_data, SolverCblk *cblk, const SolverBlok *blokB, SolverCblk *fcblk, int prio)
Submits starpu zgemmsp cblk or blok task.
void starpu_zgetrf(pastix_data_t *pastix_data, sopalin_data_t *sopalin_data)
Perform a sparse LU factorization using StarPU runtime.
void starpu_task_zadd_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.
void starpu_task_zadd_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_zadd_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_zadd_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_zadd_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_zadd_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.
pastix_int_t cblkmin2d
Definition solver.h:219
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
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