1 /*
2 
3     Copyright (C) 2014, The University of Texas at Austin
4 
5     This file is part of libflame and is available under the 3-Clause
6     BSD license, which can be found in the LICENSE file at the top-level
7     directory, or at http://opensource.org/licenses/BSD-3-Clause
8 
9 */
10 
11 #include "FLAME.h"
12 
13 extern fla_herk_t* fla_herk_cntl_blas;
14 extern fla_trsm_t* fla_trsm_cntl_blas;
15 
16 fla_chol_t*        fla_chol_cntl = NULL;
17 fla_chol_t*        fla_chol_cntl2 = NULL;
18 
19 fla_chol_t*        fla_chol_cntl_in = NULL;
20 fla_chol_t*        fla_chol_cntl_leaf = NULL;
21 fla_blocksize_t*   fla_chol_var3_bsize = NULL;
22 fla_blocksize_t*   fla_chol_var3_bsize_in = NULL;
23 double             fla_chol_var3_in_to_ou_bsize_ratio = 0.25;
24 
FLA_Chol_cntl_init()25 void FLA_Chol_cntl_init()
26 {
27 	// Set blocksize with default values for conventional storage.
28 	fla_chol_var3_bsize  = FLA_Query_blocksizes( FLA_DIMENSION_MIN );
29 	fla_chol_var3_bsize_in = FLA_Blocksize_create_copy( fla_chol_var3_bsize );
30 	FLA_Blocksize_scale( fla_chol_var3_bsize_in, fla_chol_var3_in_to_ou_bsize_ratio );
31 
32 	// Create a control tree to invoke LAPACK.
33 	fla_chol_cntl_leaf    = FLA_Cntl_chol_obj_create( FLA_FLAT,
34 #ifdef FLA_ENABLE_EXTERNAL_LAPACK_FOR_SUBPROBLEMS
35 	                                                  FLA_BLOCKED_EXTERN,
36 #else
37                                                       FLA_UNB_OPT_VARIANT2,
38 #endif
39                                                       NULL,
40                                                       NULL,
41                                                       NULL,
42                                                       NULL,
43                                                       NULL );
44 
45 	// Create a control tree for small subproblems.
46 	fla_chol_cntl_in     = FLA_Cntl_chol_obj_create( FLA_FLAT,
47 	                                                 FLA_BLOCKED_VARIANT3,
48 	                                                 fla_chol_var3_bsize_in,
49 	                                                 fla_chol_cntl_leaf,
50 	                                                 fla_herk_cntl_blas,
51 	                                                 fla_trsm_cntl_blas,
52 	                                                 NULL );
53 
54 	// Create a control tree for larger problems with one level of recursion.
55 	fla_chol_cntl2       = FLA_Cntl_chol_obj_create( FLA_FLAT,
56 	                                                 FLA_BLOCKED_VARIANT3,
57 	                                                 fla_chol_var3_bsize,
58 	                                                 fla_chol_cntl_in,
59 	                                                 fla_herk_cntl_blas,
60 	                                                 fla_trsm_cntl_blas,
61 	                                                 NULL );
62 
63 	// Create a control tree for large problems with no extra recursion.
64 	fla_chol_cntl        = FLA_Cntl_chol_obj_create( FLA_FLAT,
65 	                                                 FLA_BLOCKED_VARIANT3,
66 	                                                 fla_chol_var3_bsize,
67 	                                                 fla_chol_cntl_leaf,
68 	                                                 fla_herk_cntl_blas,
69 	                                                 fla_trsm_cntl_blas,
70 	                                                 NULL );
71 }
72 
FLA_Chol_cntl_finalize()73 void FLA_Chol_cntl_finalize()
74 {
75 	FLA_Cntl_obj_free( fla_chol_cntl );
76 	FLA_Cntl_obj_free( fla_chol_cntl2 );
77 	FLA_Cntl_obj_free( fla_chol_cntl_leaf );
78 	FLA_Cntl_obj_free( fla_chol_cntl_in );
79 
80 	FLA_Blocksize_free( fla_chol_var3_bsize );
81 	FLA_Blocksize_free( fla_chol_var3_bsize_in );
82 }
83 
84