]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - dense-linear-algebra-libraries/linalg.git/blob - blis/frame/base/bli_info.c
Consolidate all git repos of linalg into one.
[dense-linear-algebra-libraries/linalg.git] / blis / frame / base / bli_info.c
1 /*
3    BLIS    
4    An object-based framework for developing high-performance BLAS-like
5    libraries.
7    Copyright (C) 2014, The University of Texas at Austin
9    Redistribution and use in source and binary forms, with or without
10    modification, are permitted provided that the following conditions are
11    met:
12     - Redistributions of source code must retain the above copyright
13       notice, this list of conditions and the following disclaimer.
14     - Redistributions in binary form must reproduce the above copyright
15       notice, this list of conditions and the following disclaimer in the
16       documentation and/or other materials provided with the distribution.
17     - Neither the name of The University of Texas at Austin nor the names
18       of its contributors may be used to endorse or promote products
19       derived from this software without specific prior written permission.
21    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25    HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
35 #include "blis.h"
38 // NOTE: The values handled here may be queried even before bli_init()
39 // is called!
43 // -- General library information ----------------------------------------------
45 // This string gets defined via -D on the command line when BLIS is compiled.
46 // This string is (or rather, should be) only used here.
47 static char* bli_version_str       = BLIS_VERSION_STRING;
48 static char* bli_int_type_size_str = STRINGIFY_INT( BLIS_INT_TYPE_SIZE );
50 char* bli_info_get_version_str( void )              { return bli_version_str; }
51 char* bli_info_get_int_type_size_str( void )        { return bli_int_type_size_str; }
55 // -- bli_config.h -------------------------------------------------------------
57 gint_t bli_info_get_int_type_size( void )           { return BLIS_INT_TYPE_SIZE; }
58 gint_t bli_info_get_num_fp_types( void )            { return BLIS_NUM_FP_TYPES; }
59 gint_t bli_info_get_max_type_size( void )           { return BLIS_MAX_TYPE_SIZE; }
60 gint_t bli_info_get_max_num_threads( void )         { return BLIS_MAX_NUM_THREADS; }
61 gint_t bli_info_get_num_mc_x_kc_blocks( void )      { return BLIS_NUM_MC_X_KC_BLOCKS; }
62 gint_t bli_info_get_num_kc_x_nc_blocks( void )      { return BLIS_NUM_KC_X_NC_BLOCKS; }
63 gint_t bli_info_get_num_mc_x_nc_blocks( void )      { return BLIS_NUM_MC_X_NC_BLOCKS; }
64 gint_t bli_info_get_max_preload_byte_offset( void ) { return BLIS_MAX_PRELOAD_BYTE_OFFSET; }
65 gint_t bli_info_get_simd_align_size( void )         { return BLIS_SIMD_ALIGN_SIZE; }
66 gint_t bli_info_get_stack_buf_align_size( void )    { return BLIS_STACK_BUF_ALIGN_SIZE; }
67 gint_t bli_info_get_heap_addr_align_size( void )    { return BLIS_HEAP_ADDR_ALIGN_SIZE; }
68 gint_t bli_info_get_heap_stride_align_size( void )  { return BLIS_HEAP_STRIDE_ALIGN_SIZE; }
69 gint_t bli_info_get_contig_addr_align_size( void )  { return BLIS_CONTIG_ADDR_ALIGN_SIZE; }
70 gint_t bli_info_get_enable_stay_auto_init( void )
71 {
72 #ifdef BLIS_ENABLE_STAY_AUTO_INITIALIZED
73         return 1;
74 #else
75         return 0;
76 #endif
77 }
78 gint_t bli_info_get_enable_blas2blis( void )
79 {
80 #ifdef BLIS_ENABLE_BLAS2BLIS
81         return 1;
82 #else
83         return 0;
84 #endif
85 }
86 gint_t bli_info_get_blas2blis_int_type_size( void ) { return BLIS_BLAS2BLIS_INT_TYPE_SIZE; }
90 // -- bli_kernel.h -------------------------------------------------------------
92 extern blksz_t* gemm_mc;
93 extern blksz_t* gemm_nc;
94 extern blksz_t* gemm_kc;
96 extern blksz_t* gemm4m_mc;
97 extern blksz_t* gemm4m_nc;
98 extern blksz_t* gemm4m_kc;
100 // -- Default cache blocksizes --
102 // MC default blocksizes
104 gint_t bli_info_get_default_mc( num_t dt )
106         if      ( bli_is_float   ( dt ) ) return bli_info_get_default_mc_s();
107         else if ( bli_is_double  ( dt ) ) return bli_info_get_default_mc_d();
108         else if ( bli_is_scomplex( dt ) ) return bli_info_get_default_mc_c();
109         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_default_mc_z();
110         else                              return 0;
112 gint_t bli_info_get_default_mc_s( void ) { bli_init(); return bli_blksz_for_type( BLIS_FLOAT,    gemm_mc ); }
113 gint_t bli_info_get_default_mc_d( void ) { bli_init(); return bli_blksz_for_type( BLIS_DOUBLE,   gemm_mc ); }
114 gint_t bli_info_get_default_mc_c( void ) { bli_init(); return bli_blksz_for_type( BLIS_SCOMPLEX,
115                                                                        ( bli_4m_is_enabled_c() ? gemm4m_mc
116                                                                                                    : gemm_mc ) ); }
117 gint_t bli_info_get_default_mc_z( void ) { bli_init(); return bli_blksz_for_type( BLIS_DCOMPLEX,
118                                                                        ( bli_4m_is_enabled_z() ? gemm4m_mc
119                                                                                                    : gemm_mc ) ); }
121 // NC default blocksizes
123 gint_t bli_info_get_default_nc( num_t dt )
125         if      ( bli_is_float   ( dt ) ) return bli_info_get_default_nc_s();
126         else if ( bli_is_double  ( dt ) ) return bli_info_get_default_nc_d();
127         else if ( bli_is_scomplex( dt ) ) return bli_info_get_default_nc_c();
128         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_default_nc_z();
129         else                              return 0;
131 gint_t bli_info_get_default_nc_s( void ) { bli_init(); return bli_blksz_for_type( BLIS_FLOAT,    gemm_nc ); }
132 gint_t bli_info_get_default_nc_d( void ) { bli_init(); return bli_blksz_for_type( BLIS_DOUBLE,   gemm_nc ); }
133 gint_t bli_info_get_default_nc_c( void ) { bli_init(); return bli_blksz_for_type( BLIS_SCOMPLEX,
134                                                                        ( bli_4m_is_enabled_c() ? gemm4m_nc
135                                                                                                    : gemm_nc ) ); }
136 gint_t bli_info_get_default_nc_z( void ) { bli_init(); return bli_blksz_for_type( BLIS_DCOMPLEX,
137                                                                        ( bli_4m_is_enabled_z() ? gemm4m_nc
138                                                                                                    : gemm_nc ) ); }
140 // KC default blocksizes
142 gint_t bli_info_get_default_kc( num_t dt )
144         if      ( bli_is_float   ( dt ) ) return bli_info_get_default_kc_s();
145         else if ( bli_is_double  ( dt ) ) return bli_info_get_default_kc_d();
146         else if ( bli_is_scomplex( dt ) ) return bli_info_get_default_kc_c();
147         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_default_kc_z();
148         else                              return 0;
150 gint_t bli_info_get_default_kc_s( void ) { bli_init(); return bli_blksz_for_type( BLIS_FLOAT,    gemm_kc ); }
151 gint_t bli_info_get_default_kc_d( void ) { bli_init(); return bli_blksz_for_type( BLIS_DOUBLE,   gemm_kc ); }
152 gint_t bli_info_get_default_kc_c( void ) { bli_init(); return bli_blksz_for_type( BLIS_SCOMPLEX,
153                                                                        ( bli_4m_is_enabled_c() ? gemm4m_kc
154                                                                                                    : gemm_kc ) ); }
155 gint_t bli_info_get_default_kc_z( void ) { bli_init(); return bli_blksz_for_type( BLIS_DCOMPLEX,
156                                                                        ( bli_4m_is_enabled_z() ? gemm4m_kc
157                                                                                                    : gemm_kc ) ); }
160 // -- Maximum cache blocksizes --
162 // MC maximum blocksizes
164 gint_t bli_info_get_maximum_mc( num_t dt )
166         if      ( bli_is_float   ( dt ) ) return bli_info_get_maximum_mc_s();
167         else if ( bli_is_double  ( dt ) ) return bli_info_get_maximum_mc_d();
168         else if ( bli_is_scomplex( dt ) ) return bli_info_get_maximum_mc_c();
169         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_maximum_mc_z();
170         else                              return 0;
172 gint_t bli_info_get_maximum_mc_s( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_FLOAT,    gemm_mc ); }
173 gint_t bli_info_get_maximum_mc_d( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_DOUBLE,   gemm_mc ); }
174 gint_t bli_info_get_maximum_mc_c( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_SCOMPLEX,
175                                                                            ( bli_4m_is_enabled_c() ? gemm4m_mc
176                                                                                                        : gemm_mc ) ); }
177 gint_t bli_info_get_maximum_mc_z( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_DCOMPLEX,
178                                                                            ( bli_4m_is_enabled_z() ? gemm4m_mc
179                                                                                                        : gemm_mc ) ); }
181 // NC maximum blocksizes
183 gint_t bli_info_get_maximum_nc( num_t dt )
185         if      ( bli_is_float   ( dt ) ) return bli_info_get_maximum_nc_s();
186         else if ( bli_is_double  ( dt ) ) return bli_info_get_maximum_nc_d();
187         else if ( bli_is_scomplex( dt ) ) return bli_info_get_maximum_nc_c();
188         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_maximum_nc_z();
189         else                              return 0;
191 gint_t bli_info_get_maximum_nc_s( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_FLOAT,    gemm_nc ); }
192 gint_t bli_info_get_maximum_nc_d( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_DOUBLE,   gemm_nc ); }
193 gint_t bli_info_get_maximum_nc_c( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_SCOMPLEX,
194                                                                            ( bli_4m_is_enabled_c() ? gemm4m_nc
195                                                                                                        : gemm_nc ) ); }
196 gint_t bli_info_get_maximum_nc_z( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_DCOMPLEX,
197                                                                            ( bli_4m_is_enabled_z() ? gemm4m_nc
198                                                                                                        : gemm_nc ) ); }
200 // KC maximum blocksizes
202 gint_t bli_info_get_maximum_kc( num_t dt )
204         if      ( bli_is_float   ( dt ) ) return bli_info_get_maximum_kc_s();
205         else if ( bli_is_double  ( dt ) ) return bli_info_get_maximum_kc_d();
206         else if ( bli_is_scomplex( dt ) ) return bli_info_get_maximum_kc_c();
207         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_maximum_kc_z();
208         else                              return 0;
210 gint_t bli_info_get_maximum_kc_s( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_FLOAT,    gemm_kc ); }
211 gint_t bli_info_get_maximum_kc_d( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_DOUBLE,   gemm_kc ); }
212 gint_t bli_info_get_maximum_kc_c( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_SCOMPLEX,
213                                                                            ( bli_4m_is_enabled_c() ? gemm4m_kc
214                                                                                                        : gemm_kc ) ); }
215 gint_t bli_info_get_maximum_kc_z( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_DCOMPLEX,
216                                                                            ( bli_4m_is_enabled_z() ? gemm4m_kc
217                                                                                                        : gemm_kc ) ); }
220 // -- Default register blocksizes --
222 extern blksz_t* gemm_mr;
223 extern blksz_t* gemm_nr;
224 extern blksz_t* gemm_kr;
226 extern blksz_t* gemm4m_mr;
227 extern blksz_t* gemm4m_nr;
228 extern blksz_t* gemm4m_kr;
230 // MR default blocksizes
232 gint_t bli_info_get_default_mr( num_t dt )
234         if      ( bli_is_float   ( dt ) ) return bli_info_get_default_mr_s();
235         else if ( bli_is_double  ( dt ) ) return bli_info_get_default_mr_d();
236         else if ( bli_is_scomplex( dt ) ) return bli_info_get_default_mr_c();
237         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_default_mr_z();
238         else                              return 0;
240 gint_t bli_info_get_default_mr_s( void ) { bli_init(); return bli_blksz_for_type( BLIS_FLOAT,    gemm_mr ); }
241 gint_t bli_info_get_default_mr_d( void ) { bli_init(); return bli_blksz_for_type( BLIS_DOUBLE,   gemm_mr ); }
242 gint_t bli_info_get_default_mr_c( void ) { bli_init(); return bli_blksz_for_type( BLIS_SCOMPLEX,
243                                                                        ( bli_4m_is_enabled_c() ? gemm4m_mr
244                                                                                                    : gemm_mr ) ); }
245 gint_t bli_info_get_default_mr_z( void ) { bli_init(); return bli_blksz_for_type( BLIS_DCOMPLEX,
246                                                                        ( bli_4m_is_enabled_z() ? gemm4m_mr
247                                                                                                    : gemm_mr ) ); }
249 // NR default blocksizes
251 gint_t bli_info_get_default_nr( num_t dt )
253         if      ( bli_is_float   ( dt ) ) return bli_info_get_default_nr_s();
254         else if ( bli_is_double  ( dt ) ) return bli_info_get_default_nr_d();
255         else if ( bli_is_scomplex( dt ) ) return bli_info_get_default_nr_c();
256         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_default_nr_z();
257         else                              return 0;
259 gint_t bli_info_get_default_nr_s( void ) { bli_init(); return bli_blksz_for_type( BLIS_FLOAT,    gemm_nr ); }
260 gint_t bli_info_get_default_nr_d( void ) { bli_init(); return bli_blksz_for_type( BLIS_DOUBLE,   gemm_nr ); }
261 gint_t bli_info_get_default_nr_c( void ) { bli_init(); return bli_blksz_for_type( BLIS_SCOMPLEX,
262                                                                        ( bli_4m_is_enabled_c() ? gemm4m_nr
263                                                                                                    : gemm_nr ) ); }
264 gint_t bli_info_get_default_nr_z( void ) { bli_init(); return bli_blksz_for_type( BLIS_DCOMPLEX,
265                                                                        ( bli_4m_is_enabled_z() ? gemm4m_nr
266                                                                                                    : gemm_nr ) ); }
268 // KR default blocksizes
270 gint_t bli_info_get_default_kr( num_t dt )
272         if      ( bli_is_float   ( dt ) ) return bli_info_get_default_kr_s();
273         else if ( bli_is_double  ( dt ) ) return bli_info_get_default_kr_d();
274         else if ( bli_is_scomplex( dt ) ) return bli_info_get_default_kr_c();
275         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_default_kr_z();
276         else                              return 0;
278 gint_t bli_info_get_default_kr_s( void ) { bli_init(); return bli_blksz_for_type( BLIS_FLOAT,    gemm_kr ); }
279 gint_t bli_info_get_default_kr_d( void ) { bli_init(); return bli_blksz_for_type( BLIS_DOUBLE,   gemm_kr ); }
280 gint_t bli_info_get_default_kr_c( void ) { bli_init(); return bli_blksz_for_type( BLIS_SCOMPLEX,
281                                                                        ( bli_4m_is_enabled_c() ? gemm4m_kr
282                                                                                                    : gemm_kr ) ); }
283 gint_t bli_info_get_default_kr_z( void ) { bli_init(); return bli_blksz_for_type( BLIS_DCOMPLEX,
284                                                                        ( bli_4m_is_enabled_z() ? gemm4m_kr
285                                                                                                    : gemm_kr ) ); }
288 // -- Packing register blocksizes --
290 // MR packing blocksize
292 gint_t bli_info_get_packdim_mr( num_t dt )
294         if      ( bli_is_float   ( dt ) ) return bli_info_get_packdim_mr_s();
295         else if ( bli_is_double  ( dt ) ) return bli_info_get_packdim_mr_d();
296         else if ( bli_is_scomplex( dt ) ) return bli_info_get_packdim_mr_c();
297         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_packdim_mr_z();
298         else                              return 0;
300 gint_t bli_info_get_packdim_mr_s( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_FLOAT,    gemm_mr ); }
301 gint_t bli_info_get_packdim_mr_d( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_DOUBLE,   gemm_mr ); }
302 gint_t bli_info_get_packdim_mr_c( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_SCOMPLEX,
303                                                                            ( bli_4m_is_enabled_c() ? gemm4m_mr
304                                                                                                        : gemm_mr ) ); }
305 gint_t bli_info_get_packdim_mr_z( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_DCOMPLEX,
306                                                                            ( bli_4m_is_enabled_z() ? gemm4m_mr
307                                                                                                        : gemm_mr ) ); }
309 // NR packing blocksize
311 gint_t bli_info_get_packdim_nr( num_t dt )
313         if      ( bli_is_float   ( dt ) ) return bli_info_get_packdim_nr_s();
314         else if ( bli_is_double  ( dt ) ) return bli_info_get_packdim_nr_d();
315         else if ( bli_is_scomplex( dt ) ) return bli_info_get_packdim_nr_c();
316         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_packdim_nr_z();
317         else                              return 0;
319 gint_t bli_info_get_packdim_nr_s( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_FLOAT,    gemm_nr ); }
320 gint_t bli_info_get_packdim_nr_d( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_DOUBLE,   gemm_nr ); }
321 gint_t bli_info_get_packdim_nr_c( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_SCOMPLEX,
322                                                                            ( bli_4m_is_enabled_c() ? gemm4m_nr
323                                                                                                        : gemm_nr ) ); }
324 gint_t bli_info_get_packdim_nr_z( void ) { bli_init(); return bli_blksz_max_for_type( BLIS_DCOMPLEX,
325                                                                            ( bli_4m_is_enabled_z() ? gemm4m_nr
326                                                                                                        : gemm_nr ) ); }
328 // -- Micro-panel alignment --
330 extern blksz_t* gemm_upanel_a_align;
331 extern blksz_t* gemm_upanel_b_align;
333 // Micro-panel alignment of A
335 gint_t bli_info_get_upanel_a_align_size( num_t dt )
337         if      ( bli_is_float   ( dt ) ) return bli_info_get_upanel_a_align_size_s();
338         else if ( bli_is_double  ( dt ) ) return bli_info_get_upanel_a_align_size_d();
339         else if ( bli_is_scomplex( dt ) ) return bli_info_get_upanel_a_align_size_c();
340         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_upanel_a_align_size_z();
341         else                              return 0;
343 gint_t bli_info_get_upanel_a_align_size_s( void ) { bli_init(); return bli_blksz_for_type( BLIS_FLOAT,    gemm_upanel_a_align ); }
344 gint_t bli_info_get_upanel_a_align_size_d( void ) { bli_init(); return bli_blksz_for_type( BLIS_DOUBLE,   gemm_upanel_a_align ); }
345 gint_t bli_info_get_upanel_a_align_size_c( void ) { bli_init(); return bli_blksz_for_type( BLIS_SCOMPLEX, gemm_upanel_a_align ); }
346 gint_t bli_info_get_upanel_a_align_size_z( void ) { bli_init(); return bli_blksz_for_type( BLIS_DCOMPLEX, gemm_upanel_a_align ); }
348 // Micro-panel alignment of B
350 gint_t bli_info_get_upanel_b_align_size( num_t dt )
352         if      ( bli_is_float   ( dt ) ) return bli_info_get_upanel_b_align_size_s();
353         else if ( bli_is_double  ( dt ) ) return bli_info_get_upanel_b_align_size_d();
354         else if ( bli_is_scomplex( dt ) ) return bli_info_get_upanel_b_align_size_c();
355         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_upanel_b_align_size_z();
356         else                              return 0;
358 gint_t bli_info_get_upanel_b_align_size_s( void ) { bli_init(); return bli_blksz_for_type( BLIS_FLOAT,    gemm_upanel_b_align ); }
359 gint_t bli_info_get_upanel_b_align_size_d( void ) { bli_init(); return bli_blksz_for_type( BLIS_DOUBLE,   gemm_upanel_b_align ); }
360 gint_t bli_info_get_upanel_b_align_size_c( void ) { bli_init(); return bli_blksz_for_type( BLIS_SCOMPLEX, gemm_upanel_b_align ); }
361 gint_t bli_info_get_upanel_b_align_size_z( void ) { bli_init(); return bli_blksz_for_type( BLIS_DCOMPLEX, gemm_upanel_b_align ); }
364 // -- Level-2 cache blocksizes --
366 extern blksz_t* gemv_mc;
367 extern blksz_t* gemv_nc;
369 // m dimension default blocksizes
371 gint_t bli_info_get_default_l2_mc( num_t dt )
373         if      ( bli_is_float   ( dt ) ) return bli_info_get_default_l2_mc_s();
374         else if ( bli_is_double  ( dt ) ) return bli_info_get_default_l2_mc_d();
375         else if ( bli_is_scomplex( dt ) ) return bli_info_get_default_l2_mc_c();
376         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_default_l2_mc_z();
377         else                              return 0;
379 gint_t bli_info_get_default_l2_mc_s( void ) { bli_init(); return bli_blksz_for_type( BLIS_FLOAT,    gemv_mc ); }
380 gint_t bli_info_get_default_l2_mc_d( void ) { bli_init(); return bli_blksz_for_type( BLIS_DOUBLE,   gemv_mc ); }
381 gint_t bli_info_get_default_l2_mc_c( void ) { bli_init(); return bli_blksz_for_type( BLIS_SCOMPLEX, gemv_mc ); }
382 gint_t bli_info_get_default_l2_mc_z( void ) { bli_init(); return bli_blksz_for_type( BLIS_DCOMPLEX, gemv_mc ); }
385 // n dimension default blocksizes
387 gint_t bli_info_get_default_l2_nc( num_t dt )
389         if      ( bli_is_float   ( dt ) ) return bli_info_get_default_l2_nc_s();
390         else if ( bli_is_double  ( dt ) ) return bli_info_get_default_l2_nc_d();
391         else if ( bli_is_scomplex( dt ) ) return bli_info_get_default_l2_nc_c();
392         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_default_l2_nc_z();
393         else                              return 0;
395 gint_t bli_info_get_default_l2_nc_s( void ) { bli_init(); return bli_blksz_for_type( BLIS_FLOAT,    gemv_nc ); }
396 gint_t bli_info_get_default_l2_nc_d( void ) { bli_init(); return bli_blksz_for_type( BLIS_DOUBLE,   gemv_nc ); }
397 gint_t bli_info_get_default_l2_nc_c( void ) { bli_init(); return bli_blksz_for_type( BLIS_SCOMPLEX, gemv_nc ); }
398 gint_t bli_info_get_default_l2_nc_z( void ) { bli_init(); return bli_blksz_for_type( BLIS_DCOMPLEX, gemv_nc ); }
401 // -- Level-1f fusing factors --
403 // default
405 gint_t bli_info_get_default_l1f_fuse_fac( num_t dt )
407         if      ( bli_is_float   ( dt ) ) return bli_info_get_default_l1f_fuse_fac_s();
408         else if ( bli_is_double  ( dt ) ) return bli_info_get_default_l1f_fuse_fac_d();
409         else if ( bli_is_scomplex( dt ) ) return bli_info_get_default_l1f_fuse_fac_c();
410         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_default_l1f_fuse_fac_z();
411         else                              return 0;
413 gint_t bli_info_get_default_l1f_fuse_fac_s( void ) { return BLIS_L1F_FUSE_FAC_S; }
414 gint_t bli_info_get_default_l1f_fuse_fac_d( void ) { return BLIS_L1F_FUSE_FAC_D; }
415 gint_t bli_info_get_default_l1f_fuse_fac_c( void ) { return BLIS_L1F_FUSE_FAC_C; }
416 gint_t bli_info_get_default_l1f_fuse_fac_z( void ) { return BLIS_L1F_FUSE_FAC_Z; }
419 // axpyf
421 gint_t bli_info_get_axpyf_fuse_fac( num_t dt )
423         if      ( bli_is_float   ( dt ) ) return bli_info_get_axpyf_fuse_fac_s();
424         else if ( bli_is_double  ( dt ) ) return bli_info_get_axpyf_fuse_fac_d();
425         else if ( bli_is_scomplex( dt ) ) return bli_info_get_axpyf_fuse_fac_c();
426         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_axpyf_fuse_fac_z();
427         else                              return 0;
429 gint_t bli_info_get_axpyf_fuse_fac_s( void ) { return BLIS_AXPYF_FUSE_FAC_S; }
430 gint_t bli_info_get_axpyf_fuse_fac_d( void ) { return BLIS_AXPYF_FUSE_FAC_D; }
431 gint_t bli_info_get_axpyf_fuse_fac_c( void ) { return BLIS_AXPYF_FUSE_FAC_C; }
432 gint_t bli_info_get_axpyf_fuse_fac_z( void ) { return BLIS_AXPYF_FUSE_FAC_Z; }
435 // dotxf
437 gint_t bli_info_get_dotxf_fuse_fac( num_t dt )
439         if      ( bli_is_float   ( dt ) ) return bli_info_get_dotxf_fuse_fac_s();
440         else if ( bli_is_double  ( dt ) ) return bli_info_get_dotxf_fuse_fac_d();
441         else if ( bli_is_scomplex( dt ) ) return bli_info_get_dotxf_fuse_fac_c();
442         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_dotxf_fuse_fac_z();
443         else                              return 0;
445 gint_t bli_info_get_dotxf_fuse_fac_s( void ) { return BLIS_DOTXF_FUSE_FAC_S; }
446 gint_t bli_info_get_dotxf_fuse_fac_d( void ) { return BLIS_DOTXF_FUSE_FAC_D; }
447 gint_t bli_info_get_dotxf_fuse_fac_c( void ) { return BLIS_DOTXF_FUSE_FAC_C; }
448 gint_t bli_info_get_dotxf_fuse_fac_z( void ) { return BLIS_DOTXF_FUSE_FAC_Z; }
451 // dotxaxpyf
453 gint_t bli_info_get_dotxaxpyf_fuse_fac( num_t dt )
455         if      ( bli_is_float   ( dt ) ) return bli_info_get_dotxaxpyf_fuse_fac_s();
456         else if ( bli_is_double  ( dt ) ) return bli_info_get_dotxaxpyf_fuse_fac_d();
457         else if ( bli_is_scomplex( dt ) ) return bli_info_get_dotxaxpyf_fuse_fac_c();
458         else if ( bli_is_dcomplex( dt ) ) return bli_info_get_dotxaxpyf_fuse_fac_z();
459         else                              return 0;
461 gint_t bli_info_get_dotxaxpyf_fuse_fac_s( void ) { return BLIS_DOTXAXPYF_FUSE_FAC_S; }
462 gint_t bli_info_get_dotxaxpyf_fuse_fac_d( void ) { return BLIS_DOTXAXPYF_FUSE_FAC_D; }
463 gint_t bli_info_get_dotxaxpyf_fuse_fac_c( void ) { return BLIS_DOTXAXPYF_FUSE_FAC_C; }
464 gint_t bli_info_get_dotxaxpyf_fuse_fac_z( void ) { return BLIS_DOTXAXPYF_FUSE_FAC_Z; }
467 // -- Level-3 kernel definitions --
469 static char* ukr_type_str[4] = { "refnce",
470                                  "virt4m",
471                                  "virt3m",
472                                  "optmzd" };
474 char* bli_info_get_gemm_ukr_type_string( num_t dt )
476         return ukr_type_str[ bli_gemm_ukernel_impl_type( dt ) ];
479 char* bli_info_get_gemmtrsm_l_ukr_type_string( num_t dt )
481         return ukr_type_str[ bli_gemmtrsm_l_ukernel_impl_type( dt ) ];
484 char* bli_info_get_gemmtrsm_u_ukr_type_string( num_t dt )
486         return ukr_type_str[ bli_gemmtrsm_u_ukernel_impl_type( dt ) ];
489 char* bli_info_get_trsm_l_ukr_type_string( num_t dt )
491         return ukr_type_str[ bli_trsm_l_ukernel_impl_type( dt ) ];
494 char* bli_info_get_trsm_u_ukr_type_string( num_t dt )
496         return ukr_type_str[ bli_trsm_u_ukernel_impl_type( dt ) ];
501 // -- bli_mem_pool_macro_defs.h ------------------------------------------------
503 gint_t bli_info_get_mk_pool_size( void ) { return BLIS_MK_POOL_SIZE; }
504 gint_t bli_info_get_kn_pool_size( void ) { return BLIS_KN_POOL_SIZE; }
505 gint_t bli_info_get_mn_pool_size( void ) { return BLIS_MN_POOL_SIZE; }
509 // -- BLIS implementation query (level-3) --------------------------------------
511 char* bli_info_get_gemm_impl_string( num_t dt )  { bli_init(); return bli_gemm_query_impl_string( dt ); }
512 char* bli_info_get_hemm_impl_string( num_t dt )  { bli_init(); return bli_gemm_query_impl_string( dt ); }
513 char* bli_info_get_herk_impl_string( num_t dt )  { bli_init(); return bli_gemm_query_impl_string( dt ); }
514 char* bli_info_get_her2k_impl_string( num_t dt ) { bli_init(); return bli_gemm_query_impl_string( dt ); }
515 char* bli_info_get_symm_impl_string( num_t dt )  { bli_init(); return bli_gemm_query_impl_string( dt ); }
516 char* bli_info_get_syrk_impl_string( num_t dt )  { bli_init(); return bli_gemm_query_impl_string( dt ); }
517 char* bli_info_get_syr2k_impl_string( num_t dt ) { bli_init(); return bli_gemm_query_impl_string( dt ); }
518 char* bli_info_get_trmm_impl_string( num_t dt )  { bli_init(); return bli_trmm_query_impl_string( dt ); }
519 char* bli_info_get_trmm3_impl_string( num_t dt ) { bli_init(); return bli_gemm_query_impl_string( dt ); }
520 char* bli_info_get_trsm_impl_string( num_t dt )  { bli_init(); return bli_trsm_query_impl_string( dt ); }