libflame  revision_anchor
Functions
FLASH_SA_LU.c File Reference

(r)

Functions

FLA_Error FLASH_SA_LU (FLA_Obj B, FLA_Obj C, FLA_Obj D, FLA_Obj E, FLA_Obj p, FLA_Obj L, dim_t nb_alg, fla_lu_t *cntl)
 

Function Documentation

◆ FLASH_SA_LU()

FLA_Error FLASH_SA_LU ( FLA_Obj  B,
FLA_Obj  C,
FLA_Obj  D,
FLA_Obj  E,
FLA_Obj  p,
FLA_Obj  L,
dim_t  nb_alg,
fla_lu_t cntl 
)
15 {
16  FLA_Obj DT, D0,
17  DB, D1,
18  D2;
19 
20  FLA_Obj ET, E0,
21  EB, E1,
22  E2;
23 
24  FLA_Obj pT, p0,
25  pB, p1,
26  p2;
27 
28  FLA_Obj LT, L0,
29  LB, L1,
30  L2;
31 
32  FLA_Part_2x1( D, &DT,
33  &DB, 0, FLA_TOP );
34 
35  FLA_Part_2x1( E, &ET,
36  &EB, 0, FLA_TOP );
37 
38  FLA_Part_2x1( p, &pT,
39  &pB, 0, FLA_TOP );
40 
41  FLA_Part_2x1( L, &LT,
42  &LB, 0, FLA_TOP );
43 
44  while ( FLA_Obj_length( DT ) < FLA_Obj_length( D ) )
45  {
46  FLA_Repart_2x1_to_3x1( DT, &D0,
47  /* ** */ /* ** */
48  &D1,
49  DB, &D2, 1, FLA_BOTTOM );
50 
51  FLA_Repart_2x1_to_3x1( ET, &E0,
52  /* ** */ /* ** */
53  &E1,
54  EB, &E2, 1, FLA_BOTTOM );
55 
56  FLA_Repart_2x1_to_3x1( pT, &p0,
57  /* ** */ /* ** */
58  &p1,
59  pB, &p2, 1, FLA_BOTTOM );
60 
61  FLA_Repart_2x1_to_3x1( LT, &L0,
62  /* ** */ /* ** */
63  &L1,
64  LB, &L2, 1, FLA_BOTTOM );
65 
66  /*------------------------------------------------------------*/
67 
68  if ( FLASH_Queue_get_enabled( ) )
69  {
70  // Enqueue
71  ENQUEUE_FLASH_SA_LU( *FLASH_OBJ_PTR_AT( B ),
72  *FLASH_OBJ_PTR_AT( D1 ),
73  *FLASH_OBJ_PTR_AT( p1 ),
74  *FLASH_OBJ_PTR_AT( L1 ),
75  nb_alg,
76  FLA_Cntl_sub_lu( cntl ) );
77  }
78  else
79  {
80  // Execute leaf
81  FLA_SA_LU_task( *FLASH_OBJ_PTR_AT( B ),
82  *FLASH_OBJ_PTR_AT( D1 ),
83  *FLASH_OBJ_PTR_AT( p1 ),
84  *FLASH_OBJ_PTR_AT( L1 ),
85  nb_alg,
86  FLA_Cntl_sub_lu( cntl ) );
87  }
88 
89  FLASH_SA_FS( L1,
90  D1, p1, C,
91  E1, nb_alg, FLA_Cntl_sub_gemm1( cntl ) );
92 
93  /*------------------------------------------------------------*/
94 
95  FLA_Cont_with_3x1_to_2x1( &DT, D0,
96  D1,
97  /* ** */ /* ** */
98  &DB, D2, FLA_TOP );
99 
100  FLA_Cont_with_3x1_to_2x1( &ET, E0,
101  E1,
102  /* ** */ /* ** */
103  &EB, E2, FLA_TOP );
104 
105  FLA_Cont_with_3x1_to_2x1( &pT, p0,
106  p1,
107  /* ** */ /* ** */
108  &pB, p2, FLA_TOP );
109 
110  FLA_Cont_with_3x1_to_2x1( &LT, L0,
111  L1,
112  /* ** */ /* ** */
113  &LB, L2, FLA_TOP );
114  }
115 
116  return FLA_SUCCESS;
117 }
FLA_Bool FLASH_Queue_get_enabled(void)
Definition: FLASH_Queue.c:171
FLA_Error FLASH_SA_FS(FLA_Obj L, FLA_Obj D, FLA_Obj p, FLA_Obj C, FLA_Obj E, dim_t nb_alg, fla_gemm_t *cntl)
Definition: FLASH_SA_FS.c:13
FLA_Error FLA_SA_LU_task(FLA_Obj U, FLA_Obj D, FLA_Obj p, FLA_Obj L, dim_t nb_alg, fla_lu_t *cntl)
Definition: FLA_SA_LU_task.c:13
FLA_Error FLA_Cont_with_3x1_to_2x1(FLA_Obj *AT, FLA_Obj A0, FLA_Obj A1, FLA_Obj *AB, FLA_Obj A2, FLA_Side side)
Definition: FLA_View.c:428
FLA_Error FLA_Repart_2x1_to_3x1(FLA_Obj AT, FLA_Obj *A0, FLA_Obj *A1, FLA_Obj AB, FLA_Obj *A2, dim_t mb, FLA_Side side)
Definition: FLA_View.c:226
FLA_Error FLA_Part_2x1(FLA_Obj A, FLA_Obj *A1, FLA_Obj *A2, dim_t mb, FLA_Side side)
Definition: FLA_View.c:76
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
Definition: FLA_type_defs.h:159

References FLA_Cont_with_3x1_to_2x1(), FLA_Obj_length(), FLA_Part_2x1(), FLA_Repart_2x1_to_3x1(), FLA_SA_LU_task(), FLASH_Queue_get_enabled(), and FLASH_SA_FS().

Referenced by FLASH_LU_incpiv_var1(), and FLASH_LU_incpiv_var2().