void FLASH_LU_piv_cntl_init()
{
	// Set blocksize for hierarchical storage.
	flash_lu_piv_bsize       = FLA_Blocksize_create( 1, 1, 1, 1 );

	// Create a control tree that assumes A is a b x b block.
	flash_lu_piv_cntl_leaf   = FLA_Cntl_lu_obj_create( FLA_HIER,
	                                                   FLA_SUBPROBLEM,
	                                                   NULL,
	                                                   NULL,
	                                                   NULL,
	                                                   NULL,
	                                                   NULL,
	                                                   NULL,
	                                                   NULL,
	                                                   NULL,
	                                                   NULL );

	// Create a control tree that assumes A is large.
	flash_lu_piv_cntl        = FLA_Cntl_lu_obj_create( FLA_HIER,
	                                                   FLA_BLOCKED_VARIANT5,
	                                                   flash_lu_piv_bsize,
	                                                   flash_lu_piv_cntl_leaf,
	                                                   flash_gemm_cntl_op_bp,
	                                                   NULL,
	                                                   NULL,
	                                                   flash_trsm_cntl_bp,
	                                                   flash_trsm_cntl_bp,
	                                                   flash_appiv_cntl_bp,
	                                                   NULL );
}
Exemple #2
0
void libfla_test_lu_piv_cntl_create( unsigned int var,
                                     dim_t        b_alg_flat )
{
	int var_unb = FLA_UNB_VAR_OFFSET + var;
	int var_opt = FLA_OPT_VAR_OFFSET + var;
	int var_blk = FLA_BLK_VAR_OFFSET + var;

	lu_piv_cntl_bsize = FLA_Blocksize_create( b_alg_flat, b_alg_flat, b_alg_flat, b_alg_flat );

	lu_piv_cntl_unb   = FLA_Cntl_lu_obj_create( FLA_FLAT,
                                                var_unb,
                                                NULL,
                                                NULL,
                                                NULL,
                                                NULL,
                                                NULL,
                                                NULL,
                                                NULL,
                                                NULL,
                                                NULL );

	lu_piv_cntl_opt   = FLA_Cntl_lu_obj_create( FLA_FLAT,
                                                var_opt,
                                                NULL,
                                                NULL,
                                                NULL,
                                                NULL,
                                                NULL,
                                                NULL,
                                                NULL,
                                                NULL,
                                                NULL );

	lu_piv_cntl_blk   = FLA_Cntl_lu_obj_create( FLA_FLAT,
                                                var_blk,
                                                lu_piv_cntl_bsize,
                                                lu_piv_cntl_opt,
                                                fla_gemm_cntl_blas,
                                                fla_gemm_cntl_blas,
                                                fla_gemm_cntl_blas,
                                                fla_trsm_cntl_blas,
                                                fla_trsm_cntl_blas,
                                                fla_appiv_cntl_leaf,
                                                fla_appiv_cntl_leaf );
}
void FLA_LU_piv_cntl_init()
{
	// Set blocksizes with default values for conventional storage.
	fla_lu_piv_var5_bsize    = FLA_Query_blocksizes( FLA_DIMENSION_MIN );
	fla_lu_piv_var5_bsize_in = FLA_Blocksize_create_copy( fla_lu_piv_var5_bsize );
	FLA_Blocksize_scale( fla_lu_piv_var5_bsize_in, fla_lu_piv_var5_in_to_ou_bsize_ratio );

	// Create a control tree to invoke LAPACK.
	fla_lu_piv_cntl_leaf   = FLA_Cntl_lu_obj_create( FLA_FLAT,
#ifdef FLA_ENABLE_EXTERNAL_LAPACK_FOR_SUBPROBLEMS
	                                                 FLA_BLOCKED_EXTERN,
#else
	                                                 FLA_UNB_OPT_VARIANT4,
#endif
	                                                 NULL,
	                                                 NULL,
	                                                 NULL,
	                                                 NULL,
	                                                 NULL,
	                                                 NULL,
	                                                 NULL,
	                                                 NULL,
	                                                 NULL );

	// Create a control tree for small subproblems.
	fla_lu_piv_cntl_in     = FLA_Cntl_lu_obj_create( FLA_FLAT, 
	                                                 FLA_BLOCKED_VARIANT5,
	                                                 fla_lu_piv_var5_bsize_in,
	                                                 fla_lu_piv_cntl_leaf,
	                                                 fla_gemm_cntl_blas,
	                                                 fla_gemm_cntl_blas,
	                                                 fla_gemm_cntl_blas,
	                                                 fla_trsm_cntl_blas,
	                                                 fla_trsm_cntl_blas,
	                                                 fla_appiv_cntl_leaf,
	                                                 fla_appiv_cntl_leaf );

	// Create a control tree for larger problems with one level of recursion.
	fla_lu_piv_cntl2       = FLA_Cntl_lu_obj_create( FLA_FLAT, 
	                                                 FLA_BLOCKED_VARIANT5,
	                                                 fla_lu_piv_var5_bsize,
	                                                 fla_lu_piv_cntl_in,
	                                                 fla_gemm_cntl_blas,
	                                                 fla_gemm_cntl_blas,
	                                                 fla_gemm_cntl_blas,
	                                                 fla_trsm_cntl_blas,
	                                                 fla_trsm_cntl_blas,
	                                                 fla_appiv_cntl_leaf,
	                                                 fla_appiv_cntl_leaf );

	// Create a control tree for large problems with no extra recursion.
	fla_lu_piv_cntl        = FLA_Cntl_lu_obj_create( FLA_FLAT, 
	                                                 FLA_BLOCKED_VARIANT5,
	                                                 fla_lu_piv_var5_bsize,
	                                                 fla_lu_piv_cntl_leaf,
	                                                 fla_gemm_cntl_blas,
	                                                 fla_gemm_cntl_blas,
	                                                 fla_gemm_cntl_blas,
	                                                 fla_trsm_cntl_blas,
	                                                 fla_trsm_cntl_blas,
	                                                 fla_appiv_cntl_leaf,
	                                                 fla_appiv_cntl_leaf );
}