25 #ifndef DOXYGEN_SHOULD_SKIP_THIS
30 #include "sopalin/sopalin_data.h"
36 #if defined( PASTIX_STARPU_PROFILING )
40 starpu_profile_t solve_cblk_ddiag_profile = {
42 .name =
"solve_cblk_ddiag"
48 void solve_cblk_ddiag_profile_register(
void ) __attribute__( ( constructor ) );
50 solve_cblk_ddiag_profile_register(
void )
52 profiling_register_cl( &solve_cblk_ddiag_profile );
56 #ifndef DOXYGEN_SHOULD_SKIP_THIS
57 struct cl_solve_cblk_ddiag_args_s {
62 static struct starpu_perfmodel starpu_solve_cblk_ddiag_model = {
63 .type = STARPU_HISTORY_BASED,
64 .symbol =
"solve_cblk_ddiag",
67 #if !defined(PASTIX_STARPU_SIMULATION)
69 fct_solve_cblk_ddiag_cpu(
void *descr[],
void *cl_arg )
71 struct cl_solve_cblk_ddiag_args_s *args = (
struct cl_solve_cblk_ddiag_args_s *) cl_arg;
77 A = pastix_starpu_cblk_get_ptr( descr[0] );
78 b = (
double *)STARPU_MATRIX_GET_PTR( descr[1] );
79 ldb = (int)STARPU_MATRIX_GET_LD( descr[1] );
80 nrhs = (int)STARPU_MATRIX_GET_NY( descr[1] );
117 struct cl_solve_cblk_ddiag_args_s *cl_arg;
118 starpu_data_handle_t handle;
121 #if defined(PASTIX_DEBUG_STARPU)
128 #if defined(PASTIX_WITH_MPI)
131 if ( cblk->
ownerid == sopalin_data->solvmtx->clustnum ) {
134 if ( starpu_mpi_cached_receive( rhsb->starpu_desc->handletab[cblknum] ) ) {
137 if ( !need_submit ) {
146 cl_arg = malloc(
sizeof(
struct cl_solve_cblk_ddiag_args_s) );
147 #if defined(PASTIX_STARPU_PROFILING)
148 cl_arg->profile_data.measures = solve_cblk_ddiag_profile.measures;
149 cl_arg->profile_data.flops = NAN;
153 #if defined(PASTIX_DEBUG_STARPU)
154 asprintf( &task_name,
"%s( %ld )",
155 cl_solve_cblk_ddiag_cpu.name,
161 pastix_starpu_insert_task(
162 &cl_solve_cblk_ddiag_cpu,
163 STARPU_CL_ARGS, cl_arg,
sizeof(
struct cl_solve_cblk_ddiag_args_s ),
164 #
if defined(PASTIX_STARPU_PROFILING)
165 STARPU_CALLBACK_WITH_ARG_NFREE, cl_profiling_callback, cl_arg,
168 STARPU_RW, rhsb->starpu_desc->handletab[cblknum],
169 #
if defined(PASTIX_DEBUG_STARPU)
170 STARPU_NAME, task_name,
172 #
if defined(PASTIX_STARPU_HETEROPRIO)
173 STARPU_PRIORITY, BucketSolveDiag,
BEGIN_C_DECLS typedef int pastix_int_t
void solve_cblk_ddiag(const SolverCblk *cblk, const void *dataA, int nrhs, double *b, int ldb, double *work)
Apply the diagonal solve related to one cblk to all the right hand side.
Base structure to all codelet arguments that include the profiling data.
Main PaStiX RHS structure.
void starpu_stask_cblk_ddiag(sopalin_data_t *sopalin_data, pastix_rhs_t rhsb, SolverCblk *cblk, int prio)
Submit a task to perform a diagonal solve related to one cblk to all the right hand side.
SolverCblk *restrict cblktab
Solver column block structure.
Solver column block structure.