27 #include "sopalin/sopalin_data.h"
62 sopalin_data_t *sopalin_data,
78 if ( (cblk->
cblktype & CBLK_IN_SCHUR) && (mode != PastixSolvModeSchur) ) {
117 tA, diag, cblk, prio );
120 for (blok = cblk[0].fblokptr+1; blok < cblk[1].
fblokptr; blok++ ) {
123 if ( (fcbk->
cblktype & CBLK_IN_SCHUR) && (mode == PastixSolvModeLocal) ) {
128 cblk, blok, fcbk, prio );
162 sopalin_data_t *sopalin_data,
214 assert( !(cblk->
cblktype & CBLK_RECV) );
216 if ( ( !(cblk->
cblktype & CBLK_IN_SCHUR) || (mode == PastixSolvModeSchur) ) &&
217 ( !(cblk->
cblktype & CBLK_FANIN) ) )
221 tA, diag, cblk, prio );
225 for (j = cblk[1].brownum-1; j>=cblk[0].
brownum; j-- ) {
229 if ( (fcbk->
cblktype & CBLK_IN_SCHUR) && (mode == PastixSolvModeInterface) ) {
237 cblk, blok, fcbk, prio );
265 sopalin_data_t *sopalin_data,
274 if ( enums->solve_step == PastixSolveBackward ) {
275 cblknbr = (enums->mode == PastixSolvModeLocal) ? datacode->
cblkschur : datacode->
cblknbr;
276 cblk = datacode->
cblktab + cblknbr - 1;
278 for ( i = cblknbr-1; i >= 0; i--, cblk-- ) {
281 #if defined(PASTIX_WITH_MPI)
286 starpu_mpi_data_migrate( datacode->solv_comm,
287 rhsb->starpu_desc->handletab[i],
293 if ( cblk->
cblktype & CBLK_FANIN ) {
294 starpu_mpi_data_migrate( datacode->solv_comm,
295 rhsb->starpu_desc->handletab[i],
296 datacode->clustnum );
304 cblknbr = (enums->mode == PastixSolvModeSchur) ? datacode->
cblknbr : datacode->
cblkschur;
307 for ( i = 0; i < cblknbr; i++, cblk++ ) {
310 #if defined(PASTIX_WITH_MPI)
312 if ( cblk->
cblktype & CBLK_FANIN ) {
313 starpu_mpi_data_migrate( datacode->solv_comm,
314 rhsb->starpu_desc->handletab[i],
321 starpu_mpi_data_migrate( datacode->solv_comm,
322 rhsb->starpu_desc->handletab[i],
323 datacode->clustnum );
333 for ( i = 0; i < cblknbr; i++ ) {
334 starpu_data_wont_use( rhsb->starpu_desc->handletab[i] );
364 sopalin_data_t *sopalin_data,
373 if (pastix_data->
starpu == NULL) {
378 if ( sdesc == NULL ) {
385 sdesc = sopalin_data->
solvmtx->starpu_desc;
388 if ( ddesc == NULL ) {
394 ddesc = rhsb->starpu_desc;
397 #if defined(STARPU_USE_FXT)
399 starpu_fxt_start_profiling();
407 starpu_task_wait_for_all();
408 #if defined(PASTIX_WITH_MPI)
409 starpu_mpi_wait_for_all( pastix_data->
pastix_comm );
413 #if defined(STARPU_USE_FXT)
415 starpu_fxt_stop_profiling();
BEGIN_C_DECLS typedef int pastix_int_t
enum pastix_diag_e pastix_diag_t
Diagonal.
enum pastix_solv_mode_e pastix_solv_mode_t
Solve Schur modes.
enum pastix_uplo_e pastix_uplo_t
Upper/Lower part.
enum pastix_side_e pastix_side_t
Side of the operation.
enum pastix_trans_e pastix_trans_t
Transpostion.
enum pastix_coefside_e pastix_coefside_t
Data blocks used in the kernel.
void starpu_sparse_matrix_getoncpu(starpu_sparse_matrix_desc_t *desc)
Submit asynchronous calls to retrieve the data on main memory.
void starpu_rhs_getoncpu(starpu_rhs_desc_t *desc)
Submit asynchronous calls to retrieve the data on main memory.
void starpu_rhs_init(SolverMatrix *solvmtx, pastix_rhs_t rhsb, int typesze, int nodes, int myrank)
Generate the StarPU descriptor of the dense matrix.
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.
void starpu_stask_blok_zgemm(sopalin_data_t *sopalin_data, pastix_rhs_t rhsb, pastix_coefside_t coef, pastix_side_t side, pastix_trans_t trans, const SolverCblk *cblk, const SolverBlok *blok, SolverCblk *fcbk, pastix_int_t prio)
Submit a task to perform a gemm.
void starpu_stask_blok_zcpy_bwd_recv(sopalin_data_t *sopalin_data, pastix_rhs_t rhsb, SolverCblk *cblk, const SolverCblk *fcblk, int prio)
Insert the task to add a fanin cblk on the receiver side (The fanin is seen on this side as the RECV ...
void starpu_stask_blok_zadd_fwd_recv(sopalin_data_t *sopalin_data, pastix_rhs_t rhsb, const SolverCblk *cblk, SolverCblk *fcblk, int prio)
Insert the task to add a fanin cblk on the receiver side (The fanin is seen on this side as the RECV ...
StarPU descriptor for the vectors linked to a given sparse matrix.
StarPU descriptor stucture for the sparse matrix.
PASTIX_Comm inter_node_comm
Main PaStiX data structure.
Main PaStiX RHS structure.
void starpu_cblk_ztrsmsp_forward(const args_solve_t *enums, sopalin_data_t *sopalin_data, pastix_rhs_t rhsb, const SolverCblk *cblk, pastix_int_t prio)
Apply a forward solve related to one cblk to all the right hand side. (StarPU version)
void starpu_stask_blok_ztrsm(sopalin_data_t *sopalin_data, pastix_rhs_t rhsb, pastix_coefside_t coef, pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, pastix_int_t prio)
Submit a task to do a trsm related to a diagonal block of the matrix A.
void starpu_ztrsm(pastix_data_t *pastix_data, const args_solve_t *enums, sopalin_data_t *sopalin_data, pastix_rhs_t rhsb)
Apply the TRSM solve (StarPU version).
void starpu_ztrsm_sp1dplus(pastix_data_t *pastix_data, sopalin_data_t *sopalin_data, pastix_rhs_t rhsb, const args_solve_t *enums)
Apply a TRSM on a problem with 1 dimension (StarPU version)
void starpu_cblk_ztrsmsp_backward(const args_solve_t *enums, sopalin_data_t *sopalin_data, pastix_rhs_t rhsb, const SolverCblk *cblk, pastix_int_t prio)
Apply a backward solve related to one cblk to all the right hand side. (StarPU version)
SolverBlok *restrict bloktab
pastix_int_t *restrict browtab
SolverCblk *restrict cblktab
Solver column block structure.
Solver column block structure.