22 #ifndef DOXYGEN_SHOULD_SKIP_THIS
27 #include "sopalin/sopalin_data.h"
33 #if defined( PASTIX_STARPU_PROFILING )
37 starpu_profile_t solve_blok_ctrsm_profile = {
39 .name =
"solve_blok_ctrsm"
45 void solve_blok_ctrsm_profile_register(
void ) __attribute__( ( constructor ) );
47 solve_blok_ctrsm_profile_register(
void )
49 profiling_register_cl( &solve_blok_ctrsm_profile );
53 #ifndef DOXYGEN_SHOULD_SKIP_THIS
54 struct cl_solve_blok_ctrsm_args_s {
63 static struct starpu_perfmodel starpu_solve_blok_ctrsm_model = {
64 .type = STARPU_HISTORY_BASED,
65 .symbol =
"solve_blok_ctrsm",
68 #if !defined(PASTIX_STARPU_SIMULATION)
70 fct_solve_blok_ctrsm_cpu(
void *descr[],
void *cl_arg )
72 struct cl_solve_blok_ctrsm_args_s *args = (
struct cl_solve_blok_ctrsm_args_s *) cl_arg;
77 A = pastix_starpu_cblk_get_ptr( descr[0] );
83 args->trans, args->diag, args->cblk,
138 struct cl_solve_blok_ctrsm_args_s *cl_arg;
139 starpu_data_handle_t handle = cblk->
handler[coef];
142 #if defined(PASTIX_DEBUG_STARPU)
149 #if defined(PASTIX_WITH_MPI)
152 if ( cblk->
ownerid == sopalin_data->solvmtx->clustnum ) {
155 if ( starpu_mpi_cached_receive( solvmtx->starpu_desc_rhs->handletab[cblknum] ) ) {
158 if ( !need_submit ) {
167 cl_arg = malloc(
sizeof(
struct cl_solve_blok_ctrsm_args_s) );
168 #if defined(PASTIX_STARPU_PROFILING)
169 cl_arg->profile_data.measures = solve_blok_ctrsm_profile.measures;
170 cl_arg->profile_data.flops = NAN;
173 cl_arg->trans = trans;
178 #if defined(PASTIX_DEBUG_STARPU)
179 asprintf( &task_name,
"%s( %ld )",
180 cl_solve_blok_ctrsm_cpu.name,
184 pastix_starpu_insert_task(
185 &cl_solve_blok_ctrsm_cpu,
186 STARPU_CL_ARGS, cl_arg,
sizeof(
struct cl_solve_blok_ctrsm_args_s ),
187 #
if defined(PASTIX_STARPU_PROFILING)
188 STARPU_CALLBACK_WITH_ARG_NFREE, cl_profiling_callback, cl_arg,
191 STARPU_RW, solvmtx->starpu_desc_rhs->handletab[cblknum],
192 #
if defined(PASTIX_DEBUG_STARPU)
193 STARPU_NAME, task_name,
195 #
if defined(PASTIX_STARPU_HETEROPRIO)
196 STARPU_PRIORITY, BucketSolveTRSM,
BEGIN_C_DECLS typedef int pastix_int_t
float _Complex pastix_complex32_t
void solve_blok_ctrsm(pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, int nrhs, const void *dataA, pastix_complex32_t *b, int ldb)
Apply a solve trsm update related to a diagonal block of the matrix A.
enum pastix_diag_e pastix_diag_t
Diagonal.
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.
Base structure to all codelet arguments that include the profiling data.
void starpu_stask_blok_ctrsm(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, pastix_int_t prio)
Submit a task to do a trsm related to a diagonal block of the matrix A.
SolverCblk *restrict cblktab
Solver column block structure.
Solver column block structure.