PaStiX Handbook  6.4.0
starpu_cgetrf.c
Go to the documentation of this file.
1 /**
2  *
3  * @file starpu_cgetrf.c
4  *
5  * PaStiX cgetrf 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/solverstack/pastix/sopalin/starpu/starpu_zgetrf.c, normal z -> c, Tue Oct 8 14:17:36 2024
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_ccores.h"
27 #include "pastix_starpu.h"
28 #include "pastix_cstarpu.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  *******************************************************************************/
48 void
49 starpu_task_cgetrfsp( sopalin_data_t *sopalin_data,
50  SolverCblk *cblk,
51  int prio )
52 {
53  SolverBlok *lblk, *blok;
54  pastix_int_t m;
55 
56  if ( cblk->cblktype & CBLK_TASKS_2D ) {
57  starpu_task_blok_cgetrf( 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_cgetrfsp( sopalin_data, cblk, prio );
81  }
82 }
83 
84 /**
85  *******************************************************************************
86  *
87  * @brief Submits starpu cgemmsp 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  *******************************************************************************/
107 void
108 starpu_task_getrf_cgemmsp( 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  ******************************************************************************/
182 void
183 starpu_cgetrf_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_cadd_1dp_fanin( sopalin_data, PastixLCoef, cblk, prio );
204  starpu_task_cadd_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_cadd_1dp_recv( sopalin_data, PastixLCoef, cblk, prio );
212  starpu_task_cadd_1dp_recv( sopalin_data, PastixUCoef, cblk, prio );
214  continue;
215  }
216 
217  starpu_task_cgetrfsp( 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  ******************************************************************************/
265 void
266 starpu_cgetrf_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_cadd_1dp_recv( sopalin_data, PastixLCoef, cblk, prio );
292  starpu_task_cadd_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_cadd_1dp_fanin( sopalin_data, PastixLCoef, fcblk, prio );
317  starpu_task_cadd_1dp_fanin( sopalin_data, PastixUCoef, fcblk, prio );
319  continue;
320  }
321 
322  starpu_task_cgetrfsp( 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  ******************************************************************************/
356 void
357 starpu_cgetrf_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_cadd_1dp_fanin( sopalin_data, PastixLCoef, cblk, prio );
384  starpu_task_cadd_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_cadd_1dp_recv( sopalin_data, PastixLCoef, cblk, prio );
392  starpu_task_cadd_1dp_recv( sopalin_data, PastixUCoef, cblk, prio );
394  continue;
395  }
396 
397  starpu_task_cgetrfsp( 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_cgemmsp( 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_cadd_2d_fanin( sopalin_data, PastixLCoef, cblk, prio );
430  starpu_task_cadd_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_cadd_2d_recv( sopalin_data, PastixLCoef, cblk, prio );
438  starpu_task_cadd_2d_recv( sopalin_data, PastixUCoef, cblk, prio );
440  continue;
441  }
442 
443  starpu_task_cgetrfsp( 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_cgemmsp( 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  ******************************************************************************/
491 void
492 starpu_cgetrf_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_cadd_recv( sopalin_data, PastixLCoef, cblk, prio );
527  starpu_task_cadd_recv( sopalin_data, PastixUCoef, cblk, prio );
529  continue;
530  }
531 
532  starpu_task_getrf_cgemmsp( 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_cadd_fanin( sopalin_data, PastixLCoef, fcblk, prio );
542  starpu_task_cadd_fanin( sopalin_data, PastixUCoef, fcblk, prio );
544  continue;
545  }
546 
547  starpu_task_cgetrfsp( 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  ******************************************************************************/
586 void
588  sopalin_data_t *sopalin_data )
589 {
590  starpu_sparse_matrix_desc_t *sdesc = sopalin_data->solvmtx->starpu_desc;
591  float sub = 0.;
592  float 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  PastixComplex32 );
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_cgetrf_sp2d_ll( sopalin_data, sdesc );
630  }
631  else {
632  starpu_cgetrf_sp2d_rl( sopalin_data, sdesc );
633  }
634  }
635  else
636  {
637  if ( pastix_data->iparm[IPARM_FACTO_LOOK_SIDE] == PastixFactLeftLooking ) {
638  starpu_cgetrf_sp1dplus_ll( sopalin_data, sdesc );
639  }
640  else {
641  starpu_cgetrf_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_sparse_matrix_getoncpu(starpu_sparse_matrix_desc_t *desc)
Submit asynchronous calls to retrieve the data on main memory.
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 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_cblk_cgetrfsp(sopalin_data_t *sopalin_data, SolverCblk *cblk, int prio)
TODO.
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_blok_cgetrf(sopalin_data_t *sopalin_data, SolverCblk *cblk, int prio)
TODO.
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.
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_cgetrf_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_task_cgetrfsp(sopalin_data_t *sopalin_data, SolverCblk *cblk, int prio)
Submits starpu getrfsp cblk or blok task.
Definition: starpu_cgetrf.c:49
void starpu_task_getrf_cgemmsp(sopalin_data_t *sopalin_data, SolverCblk *cblk, const SolverBlok *blokB, SolverCblk *fcblk, int prio)
Submits starpu cgemmsp cblk or blok task.
void starpu_cgetrf(pastix_data_t *pastix_data, sopalin_data_t *sopalin_data)
Perform a sparse LU factorization using StarPU runtime.
void starpu_cgetrf_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_cgetrf_sp1dplus_ll(sopalin_data_t *sopalin_data, starpu_sparse_matrix_desc_t *desc)
Perform a sparse LU factorization with 1D kernels.
void starpu_cgetrf_sp1dplus_rl(sopalin_data_t *sopalin_data, starpu_sparse_matrix_desc_t *desc)
Perform a sparse LU factorization with 1D kernels.
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
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