libflame  revision_anchor
Functions
bl1_symv.c File Reference

(r)

Functions

void bl1_ssymv (uplo1_t uplo, int m, float *alpha, float *a, int a_rs, int a_cs, float *x, int incx, float *beta, float *y, int incy)
 
void bl1_dsymv (uplo1_t uplo, int m, double *alpha, double *a, int a_rs, int a_cs, double *x, int incx, double *beta, double *y, int incy)
 
void bl1_csymv (uplo1_t uplo, int m, scomplex *alpha, scomplex *a, int a_rs, int a_cs, scomplex *x, int incx, scomplex *beta, scomplex *y, int incy)
 
void bl1_zsymv (uplo1_t uplo, int m, dcomplex *alpha, dcomplex *a, int a_rs, int a_cs, dcomplex *x, int incx, dcomplex *beta, dcomplex *y, int incy)
 
void bl1_ssymv_blas (uplo1_t uplo, int m, float *alpha, float *a, int lda, float *x, int incx, float *beta, float *y, int incy)
 
void bl1_dsymv_blas (uplo1_t uplo, int m, double *alpha, double *a, int lda, double *x, int incx, double *beta, double *y, int incy)
 
void bl1_csymv_blas (uplo1_t uplo, int m, scomplex *alpha, scomplex *a, int lda, scomplex *x, int incx, scomplex *beta, scomplex *y, int incy)
 
void bl1_zsymv_blas (uplo1_t uplo, int m, dcomplex *alpha, dcomplex *a, int lda, dcomplex *x, int incx, dcomplex *beta, dcomplex *y, int incy)
 

Function Documentation

◆ bl1_csymv()

void bl1_csymv ( uplo1_t  uplo,
int  m,
scomplex alpha,
scomplex a,
int  a_rs,
int  a_cs,
scomplex x,
int  incx,
scomplex beta,
scomplex y,
int  incy 
)
100 {
101  scomplex* a_save = a;
102  int a_rs_save = a_rs;
103  int a_cs_save = a_cs;
104  int lda, inca;
105 
106  // Return early if possible.
107  if ( bl1_zero_dim1( m ) ) return;
108 
109  // If necessary, allocate, initialize, and use a temporary contiguous
110  // copy of the matrix rather than the original matrix.
111  bl1_ccreate_contigmr( uplo,
112  m,
113  m,
114  a_save, a_rs_save, a_cs_save,
115  &a, &a_rs, &a_cs );
116 
117  // Initialize with values assuming column-major storage.
118  lda = a_cs;
119  inca = a_rs;
120 
121  // If A is a row-major matrix, then we can use the underlying column-major
122  // BLAS implementation by fiddling with the parameters.
123  if ( bl1_is_row_storage( a_rs, a_cs ) )
124  {
125  bl1_swap_ints( lda, inca );
126  bl1_toggle_uplo( uplo );
127  }
128 
129  bl1_csymv_blas( uplo,
130  m,
131  alpha,
132  a, lda,
133  x, incx,
134  beta,
135  y, incy );
136 
137  // Free the temporary contiguous matrix.
138  bl1_cfree_contigm( a_save, a_rs_save, a_cs_save,
139  &a, &a_rs, &a_cs );
140 }
void bl1_csymv_blas(uplo1_t uplo, int m, scomplex *alpha, scomplex *a, int lda, scomplex *x, int incx, scomplex *beta, scomplex *y, int incy)
Definition: bl1_symv.c:249
int bl1_is_row_storage(int rs, int cs)
Definition: bl1_is.c:95
int bl1_zero_dim1(int m)
Definition: bl1_is.c:113
void bl1_cfree_contigm(scomplex *a_save, int a_rs_save, int a_cs_save, scomplex **a, int *a_rs, int *a_cs)
Definition: bl1_free_contigm.c:45
void bl1_ccreate_contigmr(uplo1_t uplo, int m, int n, scomplex *a_save, int a_rs_save, int a_cs_save, scomplex **a, int *a_rs, int *a_cs)
Definition: bl1_create_contigmr.c:77
Definition: blis_type_defs.h:133

References bl1_ccreate_contigmr(), bl1_cfree_contigm(), bl1_csymv_blas(), bl1_is_row_storage(), and bl1_zero_dim1().

Referenced by FLA_Symv_external().

◆ bl1_csymv_blas()

void bl1_csymv_blas ( uplo1_t  uplo,
int  m,
scomplex alpha,
scomplex a,
int  lda,
scomplex x,
int  incx,
scomplex beta,
scomplex y,
int  incy 
)
250 {
251  scomplex* x_copy;
252  scomplex* y_copy;
253  int n = 1;
254  int ldx = m;
255  int ldy = m;
256 
257 #ifdef BLIS1_ENABLE_CBLAS_INTERFACES
258  enum CBLAS_ORDER cblas_order = CblasColMajor;
259  enum CBLAS_SIDE cblas_side;
260  enum CBLAS_UPLO cblas_uplo;
261 
263  bl1_param_map_to_netlib_uplo( uplo, &cblas_uplo );
264 
265  x_copy = bl1_callocv( m );
266  y_copy = bl1_callocv( m );
267 
269  m,
270  x, incx,
271  x_copy, 1 );
272 
274  m,
275  y, incy,
276  y_copy, 1 );
277 
278  cblas_csymm( cblas_order,
279  cblas_side,
280  cblas_uplo,
281  m,
282  n,
283  alpha,
284  a, lda,
285  x_copy, ldx,
286  beta,
287  y_copy, ldy );
288 
290  m,
291  y_copy, 1,
292  y, incy );
293 
294  bl1_cfree( x_copy );
295  bl1_cfree( y_copy );
296 
297 #else
298  char blas_side;
299  char blas_uplo;
300 
302  bl1_param_map_to_netlib_uplo( uplo, &blas_uplo );
303 
304  x_copy = bl1_callocv( m );
305  y_copy = bl1_callocv( m );
306 
308  m,
309  x, incx,
310  x_copy, 1 );
311 
313  m,
314  y, incy,
315  y_copy, 1 );
316 
317  F77_csymm ( &blas_side,
318  &blas_uplo,
319  &m,
320  &n,
321  alpha,
322  a, &lda,
323  x_copy, &ldx,
324  beta,
325  y_copy, &ldy );
326 
328  m,
329  y_copy, 1,
330  y, incy );
331 
332  bl1_cfree( x_copy );
333  bl1_cfree( y_copy );
334 #endif
335 }
void bl1_ccopyv(conj1_t conj, int m, scomplex *x, int incx, scomplex *y, int incy)
Definition: bl1_copyv.c:49
void F77_csymm(char *side, char *uplo, int *m, int *n, scomplex *alpha, scomplex *a, int *lda, scomplex *b, int *ldb, scomplex *beta, scomplex *c, int *ldc)
CBLAS_ORDER
Definition: blis_prototypes_cblas.h:17
@ CblasColMajor
Definition: blis_prototypes_cblas.h:17
CBLAS_UPLO
Definition: blis_prototypes_cblas.h:19
CBLAS_SIDE
Definition: blis_prototypes_cblas.h:21
void cblas_csymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc)
void bl1_param_map_to_netlib_side(side1_t blis_side, void *blas_side)
Definition: bl1_param_map.c:71
void bl1_param_map_to_netlib_uplo(uplo1_t blis_uplo, void *blas_uplo)
Definition: bl1_param_map.c:47
void bl1_cfree(scomplex *p)
Definition: bl1_free.c:40
scomplex * bl1_callocv(unsigned int n_elem)
Definition: bl1_allocv.c:40
@ BLIS1_NO_CONJUGATE
Definition: blis_type_defs.h:81
@ BLIS1_LEFT
Definition: blis_type_defs.h:68

References bl1_callocv(), bl1_ccopyv(), bl1_cfree(), bl1_param_map_to_netlib_side(), bl1_param_map_to_netlib_uplo(), BLIS1_LEFT, BLIS1_NO_CONJUGATE, cblas_csymm(), CblasColMajor, and F77_csymm().

Referenced by bl1_csymv().

◆ bl1_dsymv()

void bl1_dsymv ( uplo1_t  uplo,
int  m,
double *  alpha,
double *  a,
int  a_rs,
int  a_cs,
double *  x,
int  incx,
double *  beta,
double *  y,
int  incy 
)
57 {
58  double* a_save = a;
59  int a_rs_save = a_rs;
60  int a_cs_save = a_cs;
61  int lda, inca;
62 
63  // Return early if possible.
64  if ( bl1_zero_dim1( m ) ) return;
65 
66  // If necessary, allocate, initialize, and use a temporary contiguous
67  // copy of the matrix rather than the original matrix.
69  m,
70  m,
71  a_save, a_rs_save, a_cs_save,
72  &a, &a_rs, &a_cs );
73 
74  // Initialize with values assuming column-major storage.
75  lda = a_cs;
76  inca = a_rs;
77 
78  // If A is a row-major matrix, then we can use the underlying column-major
79  // BLAS implementation by fiddling with the parameters.
80  if ( bl1_is_row_storage( a_rs, a_cs ) )
81  {
82  bl1_swap_ints( lda, inca );
83  bl1_toggle_uplo( uplo );
84  }
85 
86  bl1_dsymv_blas( uplo,
87  m,
88  alpha,
89  a, lda,
90  x, incx,
91  beta,
92  y, incy );
93 
94  // Free the temporary contiguous matrix.
95  bl1_dfree_contigm( a_save, a_rs_save, a_cs_save,
96  &a, &a_rs, &a_cs );
97 }
void bl1_dsymv_blas(uplo1_t uplo, int m, double *alpha, double *a, int lda, double *x, int incx, double *beta, double *y, int incy)
Definition: bl1_symv.c:218
void bl1_dfree_contigm(double *a_save, int a_rs_save, int a_cs_save, double **a, int *a_rs, int *a_cs)
Definition: bl1_free_contigm.c:29
void bl1_dcreate_contigmr(uplo1_t uplo, int m, int n, double *a_save, int a_rs_save, int a_cs_save, double **a, int *a_rs, int *a_cs)
Definition: bl1_create_contigmr.c:45

References bl1_dcreate_contigmr(), bl1_dfree_contigm(), bl1_dsymv_blas(), bl1_is_row_storage(), and bl1_zero_dim1().

Referenced by bl1_dhemv(), FLA_Hemv_external(), FLA_Hemvc_external(), FLA_Symv_external(), FLA_Tridiag_UT_l_step_ofd_var2(), FLA_Tridiag_UT_l_step_ofd_var3(), FLA_Tridiag_UT_l_step_opd_var1(), FLA_Tridiag_UT_l_step_opd_var2(), and FLA_Tridiag_UT_l_step_opd_var3().

◆ bl1_dsymv_blas()

void bl1_dsymv_blas ( uplo1_t  uplo,
int  m,
double *  alpha,
double *  a,
int  lda,
double *  x,
int  incx,
double *  beta,
double *  y,
int  incy 
)
219 {
220 #ifdef BLIS1_ENABLE_CBLAS_INTERFACES
221  enum CBLAS_ORDER cblas_order = CblasColMajor;
222  enum CBLAS_UPLO cblas_uplo;
223 
224  bl1_param_map_to_netlib_uplo( uplo, &cblas_uplo );
225 
226  cblas_dsymv( cblas_order,
227  cblas_uplo,
228  m,
229  *alpha,
230  a, lda,
231  x, incx,
232  *beta,
233  y, incy );
234 #else
235  char blas_uplo;
236 
237  bl1_param_map_to_netlib_uplo( uplo, &blas_uplo );
238 
239  F77_dsymv( &blas_uplo,
240  &m,
241  alpha,
242  a, &lda,
243  x, &incx,
244  beta,
245  y, &incy );
246 #endif
247 }
void F77_dsymv(char *uplo, int *n, double *alpha, double *a, int *lda, double *x, int *incx, double *beta, double *y, int *incy)
void cblas_dsymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY)

References bl1_param_map_to_netlib_uplo(), cblas_dsymv(), CblasColMajor, and F77_dsymv().

Referenced by bl1_dsymv().

◆ bl1_ssymv()

void bl1_ssymv ( uplo1_t  uplo,
int  m,
float *  alpha,
float *  a,
int  a_rs,
int  a_cs,
float *  x,
int  incx,
float *  beta,
float *  y,
int  incy 
)
14 {
15  float* a_save = a;
16  int a_rs_save = a_rs;
17  int a_cs_save = a_cs;
18  int lda, inca;
19 
20  // Return early if possible.
21  if ( bl1_zero_dim1( m ) ) return;
22 
23  // If necessary, allocate, initialize, and use a temporary contiguous
24  // copy of the matrix rather than the original matrix.
26  m,
27  m,
28  a_save, a_rs_save, a_cs_save,
29  &a, &a_rs, &a_cs );
30 
31  // Initialize with values assuming column-major storage.
32  lda = a_cs;
33  inca = a_rs;
34 
35  // If A is a row-major matrix, then we can use the underlying column-major
36  // BLAS implementation by fiddling with the parameters.
37  if ( bl1_is_row_storage( a_rs, a_cs ) )
38  {
39  bl1_swap_ints( lda, inca );
40  bl1_toggle_uplo( uplo );
41  }
42 
43  bl1_ssymv_blas( uplo,
44  m,
45  alpha,
46  a, lda,
47  x, incx,
48  beta,
49  y, incy );
50 
51  // Free the temporary contiguous matrix.
52  bl1_sfree_contigm( a_save, a_rs_save, a_cs_save,
53  &a, &a_rs, &a_cs );
54 }
void bl1_ssymv_blas(uplo1_t uplo, int m, float *alpha, float *a, int lda, float *x, int incx, float *beta, float *y, int incy)
Definition: bl1_symv.c:187
void bl1_sfree_contigm(float *a_save, int a_rs_save, int a_cs_save, float **a, int *a_rs, int *a_cs)
Definition: bl1_free_contigm.c:13
void bl1_screate_contigmr(uplo1_t uplo, int m, int n, float *a_save, int a_rs_save, int a_cs_save, float **a, int *a_rs, int *a_cs)
Definition: bl1_create_contigmr.c:13

References bl1_is_row_storage(), bl1_screate_contigmr(), bl1_sfree_contigm(), bl1_ssymv_blas(), and bl1_zero_dim1().

Referenced by bl1_shemv(), FLA_Hemv_external(), FLA_Hemvc_external(), FLA_Symv_external(), FLA_Tridiag_UT_l_step_ofs_var2(), FLA_Tridiag_UT_l_step_ofs_var3(), FLA_Tridiag_UT_l_step_ops_var1(), FLA_Tridiag_UT_l_step_ops_var2(), and FLA_Tridiag_UT_l_step_ops_var3().

◆ bl1_ssymv_blas()

void bl1_ssymv_blas ( uplo1_t  uplo,
int  m,
float *  alpha,
float *  a,
int  lda,
float *  x,
int  incx,
float *  beta,
float *  y,
int  incy 
)
188 {
189 #ifdef BLIS1_ENABLE_CBLAS_INTERFACES
190  enum CBLAS_ORDER cblas_order = CblasColMajor;
191  enum CBLAS_UPLO cblas_uplo;
192 
193  bl1_param_map_to_netlib_uplo( uplo, &cblas_uplo );
194 
195  cblas_ssymv( cblas_order,
196  cblas_uplo,
197  m,
198  *alpha,
199  a, lda,
200  x, incx,
201  *beta,
202  y, incy );
203 #else
204  char blas_uplo;
205 
206  bl1_param_map_to_netlib_uplo( uplo, &blas_uplo );
207 
208  F77_ssymv( &blas_uplo,
209  &m,
210  alpha,
211  a, &lda,
212  x, &incx,
213  beta,
214  y, &incy );
215 #endif
216 }
void F77_ssymv(char *uplo, int *n, float *alpha, float *a, int *lda, float *x, int *incx, float *beta, float *y, int *incy)
void cblas_ssymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY)

References bl1_param_map_to_netlib_uplo(), cblas_ssymv(), CblasColMajor, and F77_ssymv().

Referenced by bl1_ssymv().

◆ bl1_zsymv()

void bl1_zsymv ( uplo1_t  uplo,
int  m,
dcomplex alpha,
dcomplex a,
int  a_rs,
int  a_cs,
dcomplex x,
int  incx,
dcomplex beta,
dcomplex y,
int  incy 
)
143 {
144  dcomplex* a_save = a;
145  int a_rs_save = a_rs;
146  int a_cs_save = a_cs;
147  int lda, inca;
148 
149  // Return early if possible.
150  if ( bl1_zero_dim1( m ) ) return;
151 
152  // If necessary, allocate, initialize, and use a temporary contiguous
153  // copy of the matrix rather than the original matrix.
154  bl1_zcreate_contigmr( uplo,
155  m,
156  m,
157  a_save, a_rs_save, a_cs_save,
158  &a, &a_rs, &a_cs );
159 
160  // Initialize with values assuming column-major storage.
161  lda = a_cs;
162  inca = a_rs;
163 
164  // If A is a row-major matrix, then we can use the underlying column-major
165  // BLAS implementation by fiddling with the parameters.
166  if ( bl1_is_row_storage( a_rs, a_cs ) )
167  {
168  bl1_swap_ints( lda, inca );
169  bl1_toggle_uplo( uplo );
170  }
171 
172  bl1_zsymv_blas( uplo,
173  m,
174  alpha,
175  a, lda,
176  x, incx,
177  beta,
178  y, incy );
179 
180  // Free the temporary contiguous matrix.
181  bl1_zfree_contigm( a_save, a_rs_save, a_cs_save,
182  &a, &a_rs, &a_cs );
183 }
void bl1_zsymv_blas(uplo1_t uplo, int m, dcomplex *alpha, dcomplex *a, int lda, dcomplex *x, int incx, dcomplex *beta, dcomplex *y, int incy)
Definition: bl1_symv.c:337
void bl1_zcreate_contigmr(uplo1_t uplo, int m, int n, dcomplex *a_save, int a_rs_save, int a_cs_save, dcomplex **a, int *a_rs, int *a_cs)
Definition: bl1_create_contigmr.c:109
void bl1_zfree_contigm(dcomplex *a_save, int a_rs_save, int a_cs_save, dcomplex **a, int *a_rs, int *a_cs)
Definition: bl1_free_contigm.c:61
Definition: blis_type_defs.h:138

References bl1_is_row_storage(), bl1_zcreate_contigmr(), bl1_zero_dim1(), bl1_zfree_contigm(), and bl1_zsymv_blas().

Referenced by FLA_Symv_external().

◆ bl1_zsymv_blas()

void bl1_zsymv_blas ( uplo1_t  uplo,
int  m,
dcomplex alpha,
dcomplex a,
int  lda,
dcomplex x,
int  incx,
dcomplex beta,
dcomplex y,
int  incy 
)
338 {
339  dcomplex* x_copy;
340  dcomplex* y_copy;
341  int n = 1;
342  int ldx = m;
343  int ldy = m;
344 
345 #ifdef BLIS1_ENABLE_CBLAS_INTERFACES
346  enum CBLAS_ORDER cblas_order = CblasColMajor;
347  enum CBLAS_SIDE cblas_side;
348  enum CBLAS_UPLO cblas_uplo;
349 
351  bl1_param_map_to_netlib_uplo( uplo, &cblas_uplo );
352 
353  x_copy = bl1_zallocv( m );
354  y_copy = bl1_zallocv( m );
355 
357  m,
358  x, incx,
359  x_copy, 1 );
360 
362  m,
363  y, incy,
364  y_copy, 1 );
365 
366  cblas_zsymm( cblas_order,
367  cblas_side,
368  cblas_uplo,
369  m,
370  n,
371  alpha,
372  a, lda,
373  x_copy, ldx,
374  beta,
375  y_copy, ldy );
376 
378  m,
379  y_copy, 1,
380  y, incy );
381 
382  bl1_zfree( x_copy );
383  bl1_zfree( y_copy );
384 
385 #else
386  char blas_side;
387  char blas_uplo;
388 
390  bl1_param_map_to_netlib_uplo( uplo, &blas_uplo );
391 
392  x_copy = bl1_zallocv( m );
393  y_copy = bl1_zallocv( m );
394 
396  m,
397  x, incx,
398  x_copy, 1 );
399 
401  m,
402  y, incy,
403  y_copy, 1 );
404 
405  F77_zsymm ( &blas_side,
406  &blas_uplo,
407  &m,
408  &n,
409  alpha,
410  a, &lda,
411  x_copy, &ldx,
412  beta,
413  y_copy, &ldy );
414 
416  m,
417  y_copy, 1,
418  y, incy );
419 
420  bl1_zfree( x_copy );
421  bl1_zfree( y_copy );
422 #endif
423 }
void bl1_zcopyv(conj1_t conj, int m, dcomplex *x, int incx, dcomplex *y, int incy)
Definition: bl1_copyv.c:63
void F77_zsymm(char *side, char *uplo, int *m, int *n, dcomplex *alpha, dcomplex *a, int *lda, dcomplex *b, int *ldb, dcomplex *beta, dcomplex *c, int *ldc)
void cblas_zsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc)
dcomplex * bl1_zallocv(unsigned int n_elem)
Definition: bl1_allocv.c:45
void bl1_zfree(dcomplex *p)
Definition: bl1_free.c:45

References bl1_param_map_to_netlib_side(), bl1_param_map_to_netlib_uplo(), bl1_zallocv(), bl1_zcopyv(), bl1_zfree(), BLIS1_LEFT, BLIS1_NO_CONJUGATE, cblas_zsymm(), CblasColMajor, and F77_zsymm().

Referenced by bl1_zsymv().