22 #ifndef DOXYGEN_SHOULD_SKIP_THIS
27 #include "sopalin/sopalin_data.h"
33 #if defined( PASTIX_STARPU_PROFILING )
37 starpu_profile_t solve_blok_strsm_profile = {
39 .name =
"solve_blok_strsm"
45 void solve_blok_strsm_profile_register(
void ) __attribute__( ( constructor ) );
47 solve_blok_strsm_profile_register(
void )
49 profiling_register_cl( &solve_blok_strsm_profile );
53 #ifndef DOXYGEN_SHOULD_SKIP_THIS
54 struct cl_solve_blok_strsm_args_s {
63 static struct starpu_perfmodel starpu_solve_blok_strsm_model = {
64 .type = STARPU_HISTORY_BASED,
65 .symbol =
"solve_blok_strsm",
68 #if !defined(PASTIX_STARPU_SIMULATION)
70 fct_solve_blok_strsm_cpu(
void *descr[],
void *cl_arg )
72 struct cl_solve_blok_strsm_args_s *args = (
struct cl_solve_blok_strsm_args_s *) cl_arg;
77 A = pastix_starpu_cblk_get_ptr( descr[0] );
78 B = (
float *)STARPU_MATRIX_GET_PTR( descr[1] );
83 args->trans, args->diag, args->cblk,
143 struct cl_solve_blok_strsm_args_s *cl_arg;
144 starpu_data_handle_t handle = cblk->
handler[coef];
147 #if defined(PASTIX_DEBUG_STARPU)
154 #if defined(PASTIX_WITH_MPI)
157 if ( cblk->
ownerid == sopalin_data->solvmtx->clustnum ) {
160 if ( starpu_mpi_cached_receive( rhsb->starpu_desc->handletab[cblknum] ) ) {
163 if ( !need_submit ) {
172 cl_arg = malloc(
sizeof(
struct cl_solve_blok_strsm_args_s) );
173 #if defined(PASTIX_STARPU_PROFILING)
174 cl_arg->profile_data.measures = solve_blok_strsm_profile.measures;
175 cl_arg->profile_data.flops = NAN;
178 cl_arg->trans = trans;
183 #if defined(PASTIX_DEBUG_STARPU)
184 asprintf( &task_name,
"%s( %ld )",
185 cl_solve_blok_strsm_cpu.name,
189 pastix_starpu_insert_task(
190 &cl_solve_blok_strsm_cpu,
191 STARPU_CL_ARGS, cl_arg,
sizeof(
struct cl_solve_blok_strsm_args_s ),
192 #
if defined(PASTIX_STARPU_PROFILING)
193 STARPU_CALLBACK_WITH_ARG_NFREE, cl_profiling_callback, cl_arg,
196 STARPU_RW, rhsb->starpu_desc->handletab[cblknum],
197 #
if defined(PASTIX_DEBUG_STARPU)
198 STARPU_NAME, task_name,
200 #
if defined(PASTIX_STARPU_HETEROPRIO)
201 STARPU_PRIORITY, BucketSolveTRSM,
BEGIN_C_DECLS typedef int pastix_int_t
void solve_blok_strsm(pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, int nrhs, const void *dataA, float *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.
Main PaStiX RHS structure.
void starpu_stask_blok_strsm(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.
SolverCblk *restrict cblktab
Solver column block structure.
Solver column block structure.