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,
271#if defined(PASTIX_WITH_MPI)
277 if ( enums->solve_step == PastixSolveBackward ) {
278 cblknbr = (enums->mode == PastixSolvModeLocal) ? datacode->
cblkschur : datacode->
cblknbr;
279 cblk = datacode->
cblktab + cblknbr - 1;
281 for ( i = cblknbr-1; i >= 0; i--, cblk-- ) {
284#if defined(PASTIX_WITH_MPI)
289 starpu_mpi_data_migrate( datacode->solv_comm,
290 rhsb->starpu_desc->handletab[i],
296 if ( cblk->
cblktype & CBLK_FANIN ) {
297 starpu_mpi_data_migrate( datacode->solv_comm,
298 rhsb->starpu_desc->handletab[i],
299 datacode->clustnum );
307 cblknbr = (enums->mode == PastixSolvModeSchur) ? datacode->
cblknbr : datacode->
cblkschur;
310 for ( i = 0; i < cblknbr; i++, cblk++ ) {
313#if defined(PASTIX_WITH_MPI)
315 if ( cblk->
cblktype & CBLK_FANIN ) {
316 starpu_mpi_data_migrate( datacode->solv_comm,
317 rhsb->starpu_desc->handletab[i],
324 starpu_mpi_data_migrate( datacode->solv_comm,
325 rhsb->starpu_desc->handletab[i],
326 datacode->clustnum );
336 for ( i = 0; i < cblknbr; i++ ) {
337 starpu_data_wont_use( rhsb->starpu_desc->handletab[i] );
367 sopalin_data_t *sopalin_data,
376 if (pastix_data->
starpu == NULL) {
381 if ( sdesc == NULL ) {
388 sdesc = sopalin_data->
solvmtx->starpu_desc;
391 if ( ddesc == NULL ) {
397 ddesc = rhsb->starpu_desc;
400#if defined(STARPU_USE_FXT)
402 starpu_fxt_start_profiling();
410 starpu_task_wait_for_all();
411#if defined(PASTIX_WITH_MPI)
412 starpu_mpi_wait_for_all( pastix_data->
pastix_comm );
416#if defined(STARPU_USE_FXT)
418 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.