libflame  revision_anchor
Functions
bl1_symmize.c File Reference

(r)

Functions

void bl1_ssymmize (conj1_t conj, uplo1_t uplo, int m, float *a, int a_rs, int a_cs)
 
void bl1_dsymmize (conj1_t conj, uplo1_t uplo, int m, double *a, int a_rs, int a_cs)
 
void bl1_csymmize (conj1_t conj, uplo1_t uplo, int m, scomplex *a, int a_rs, int a_cs)
 
void bl1_zsymmize (conj1_t conj, uplo1_t uplo, int m, dcomplex *a, int a_rs, int a_cs)
 

Function Documentation

◆ bl1_csymmize()

void bl1_csymmize ( conj1_t  conj,
uplo1_t  uplo,
int  m,
scomplex a,
int  a_rs,
int  a_cs 
)
236 {
237  scomplex* a_src;
238  scomplex* a_dst;
239  scomplex* a_jj;
240  int rs_src, cs_src, inc_src;
241  int rs_dst, cs_dst, inc_dst;
242  int n_iter;
243  int j;
244 
245  // Return early if possible.
246  if ( bl1_zero_dim1( m ) ) return;
247 
248  // Assume A is square.
249  n_iter = m;
250 
251  // Initialize with appropriate values based on storage.
252  if ( bl1_is_col_storage( a_rs, a_cs ) && bl1_is_lower( uplo ) )
253  {
254  cs_src = 1;
255  rs_src = 0;
256  inc_src = a_cs;
257  cs_dst = a_cs;
258  rs_dst = 0;
259  inc_dst = 1;
260  }
261  else if ( bl1_is_col_storage( a_rs, a_cs ) && bl1_is_upper( uplo ) )
262  {
263  cs_src = a_cs;
264  rs_src = 0;
265  inc_src = 1;
266  cs_dst = 1;
267  rs_dst = 0;
268  inc_dst = a_cs;
269  }
270  else if ( bl1_is_row_storage( a_rs, a_cs ) && bl1_is_lower( uplo ) )
271  {
272  cs_src = 0;
273  rs_src = a_rs;
274  inc_src = 1;
275  cs_dst = 0;
276  rs_dst = 1;
277  inc_dst = a_rs;
278  }
279  else if ( bl1_is_row_storage( a_rs, a_cs ) && bl1_is_upper( uplo ) )
280  {
281  cs_src = 0;
282  rs_src = 1;
283  inc_src = a_rs;
284  cs_dst = 0;
285  rs_dst = a_rs;
286  inc_dst = 1;
287  }
288  else if ( bl1_is_gen_storage( a_rs, a_cs ) && bl1_is_lower( uplo ) )
289  {
290  // General stride with column-major tilt looks similar to column-major.
291  // General stride with row-major tilt looks similar to row-major.
292  if ( a_rs < a_cs )
293  {
294  cs_src = 1 * a_rs;
295  rs_src = 0;
296  inc_src = a_cs;
297  cs_dst = a_cs;
298  rs_dst = 0;
299  inc_dst = 1 * a_rs;
300  }
301  else // if ( a_rs > a_cs )
302  {
303  cs_src = 0;
304  rs_src = a_rs;
305  inc_src = 1 * a_cs;
306  cs_dst = 0;
307  rs_dst = 1 * a_cs;
308  inc_dst = a_rs;
309  }
310  }
311  else // if ( bl1_is_gen_storage( a_rs, a_cs ) && bl1_is_upper( uplo ) )
312  {
313  // General stride with column-major tilt looks similar to column-major.
314  // General stride with row-major tilt looks similar to row-major.
315  if ( a_rs < a_cs )
316  {
317  cs_src = a_cs;
318  rs_src = 0;
319  inc_src = 1 * a_rs;
320  cs_dst = 1 * a_rs;
321  rs_dst = 0;
322  inc_dst = a_cs;
323  }
324  else // if ( a_rs > a_cs )
325  {
326  cs_src = 0;
327  rs_src = 1 * a_cs;
328  inc_src = a_rs;
329  cs_dst = 0;
330  rs_dst = a_rs;
331  inc_dst = 1 * a_cs;
332  }
333  }
334 
335  for ( j = 0; j < n_iter; j++ )
336  {
337  a_src = a + j*cs_src + j*rs_src;
338  a_dst = a + j*cs_dst + j*rs_dst;
339 
340  bl1_ccopyv( conj,
341  j,
342  a_src, inc_src,
343  a_dst, inc_dst );
344 
345  if ( bl1_is_conj( conj ) )
346  {
347  a_jj = a + j*a_rs + j*a_cs;
348  a_jj->imag = bl1_s0();
349  }
350  }
351 }
void bl1_ccopyv(conj1_t conj, int m, scomplex *x, int incx, scomplex *y, int incy)
Definition: bl1_copyv.c:49
int bl1_is_row_storage(int rs, int cs)
Definition: bl1_is.c:95
int bl1_is_gen_storage(int rs, int cs)
Definition: bl1_is.c:100
int bl1_is_upper(uplo1_t uplo)
Definition: bl1_is.c:54
int bl1_is_lower(uplo1_t uplo)
Definition: bl1_is.c:49
int bl1_is_col_storage(int rs, int cs)
Definition: bl1_is.c:90
int bl1_zero_dim1(int m)
Definition: bl1_is.c:113
int bl1_is_conj(conj1_t conj)
Definition: bl1_is.c:42
float bl1_s0(void)
Definition: bl1_constants.c:111
Definition: blis_type_defs.h:133
float imag
Definition: blis_type_defs.h:134

References bl1_ccopyv(), bl1_is_col_storage(), bl1_is_conj(), bl1_is_gen_storage(), bl1_is_lower(), bl1_is_row_storage(), bl1_is_upper(), bl1_s0(), bl1_zero_dim1(), and scomplex::imag.

Referenced by FLA_Hermitianize(), and FLA_Symmetrize().

◆ bl1_dsymmize()

void bl1_dsymmize ( conj1_t  conj,
uplo1_t  uplo,
int  m,
double *  a,
int  a_rs,
int  a_cs 
)
125 {
126  double* a_src;
127  double* a_dst;
128  int rs_src, cs_src, inc_src;
129  int rs_dst, cs_dst, inc_dst;
130  int n_iter;
131  int j;
132 
133  // Return early if possible.
134  if ( bl1_zero_dim1( m ) ) return;
135 
136  // Assume A is square.
137  n_iter = m;
138 
139  // Initialize with appropriate values based on storage.
140  if ( bl1_is_col_storage( a_rs, a_cs ) && bl1_is_lower( uplo ) )
141  {
142  cs_src = 1;
143  rs_src = 0;
144  inc_src = a_cs;
145  cs_dst = a_cs;
146  rs_dst = 0;
147  inc_dst = 1;
148  }
149  else if ( bl1_is_col_storage( a_rs, a_cs ) && bl1_is_upper( uplo ) )
150  {
151  cs_src = a_cs;
152  rs_src = 0;
153  inc_src = 1;
154  cs_dst = 1;
155  rs_dst = 0;
156  inc_dst = a_cs;
157  }
158  else if ( bl1_is_row_storage( a_rs, a_cs ) && bl1_is_lower( uplo ) )
159  {
160  cs_src = 0;
161  rs_src = a_rs;
162  inc_src = 1;
163  cs_dst = 0;
164  rs_dst = 1;
165  inc_dst = a_rs;
166  }
167  else if ( bl1_is_row_storage( a_rs, a_cs ) && bl1_is_upper( uplo ) )
168  {
169  cs_src = 0;
170  rs_src = 1;
171  inc_src = a_rs;
172  cs_dst = 0;
173  rs_dst = a_rs;
174  inc_dst = 1;
175  }
176  else if ( bl1_is_gen_storage( a_rs, a_cs ) && bl1_is_lower( uplo ) )
177  {
178  // General stride with column-major tilt looks similar to column-major.
179  // General stride with row-major tilt looks similar to row-major.
180  if ( a_rs < a_cs )
181  {
182  cs_src = 1 * a_rs;
183  rs_src = 0;
184  inc_src = a_cs;
185  cs_dst = a_cs;
186  rs_dst = 0;
187  inc_dst = 1 * a_rs;
188  }
189  else // if ( a_rs > a_cs )
190  {
191  cs_src = 0;
192  rs_src = a_rs;
193  inc_src = 1 * a_cs;
194  cs_dst = 0;
195  rs_dst = 1 * a_cs;
196  inc_dst = a_rs;
197  }
198  }
199  else // if ( bl1_is_gen_storage( a_rs, a_cs ) && bl1_is_upper( uplo ) )
200  {
201  // General stride with column-major tilt looks similar to column-major.
202  // General stride with row-major tilt looks similar to row-major.
203  if ( a_rs < a_cs )
204  {
205  cs_src = a_cs;
206  rs_src = 0;
207  inc_src = 1 * a_rs;
208  cs_dst = 1 * a_rs;
209  rs_dst = 0;
210  inc_dst = a_cs;
211  }
212  else // if ( a_rs > a_cs )
213  {
214  cs_src = 0;
215  rs_src = 1 * a_cs;
216  inc_src = a_rs;
217  cs_dst = 0;
218  rs_dst = a_rs;
219  inc_dst = 1 * a_cs;
220  }
221  }
222 
223  for ( j = 0; j < n_iter; j++ )
224  {
225  a_src = a + j*cs_src + j*rs_src;
226  a_dst = a + j*cs_dst + j*rs_dst;
227 
228  bl1_dcopyv( conj,
229  j,
230  a_src, inc_src,
231  a_dst, inc_dst );
232  }
233 }
void bl1_dcopyv(conj1_t conj, int m, double *x, int incx, double *y, int incy)
Definition: bl1_copyv.c:42

References bl1_dcopyv(), bl1_is_col_storage(), bl1_is_gen_storage(), bl1_is_lower(), bl1_is_row_storage(), bl1_is_upper(), and bl1_zero_dim1().

Referenced by FLA_Hermitianize(), and FLA_Symmetrize().

◆ bl1_ssymmize()

void bl1_ssymmize ( conj1_t  conj,
uplo1_t  uplo,
int  m,
float *  a,
int  a_rs,
int  a_cs 
)
14 {
15  float* a_src;
16  float* a_dst;
17  int rs_src, cs_src, inc_src;
18  int rs_dst, cs_dst, inc_dst;
19  int n_iter;
20  int j;
21 
22  // Return early if possible.
23  if ( bl1_zero_dim1( m ) ) return;
24 
25  // Assume A is square.
26  n_iter = m;
27 
28  // Initialize with appropriate values based on storage.
29  if ( bl1_is_col_storage( a_rs, a_cs ) && bl1_is_lower( uplo ) )
30  {
31  cs_src = 1;
32  rs_src = 0;
33  inc_src = a_cs;
34  cs_dst = a_cs;
35  rs_dst = 0;
36  inc_dst = 1;
37  }
38  else if ( bl1_is_col_storage( a_rs, a_cs ) && bl1_is_upper( uplo ) )
39  {
40  cs_src = a_cs;
41  rs_src = 0;
42  inc_src = 1;
43  cs_dst = 1;
44  rs_dst = 0;
45  inc_dst = a_cs;
46  }
47  else if ( bl1_is_row_storage( a_rs, a_cs ) && bl1_is_lower( uplo ) )
48  {
49  cs_src = 0;
50  rs_src = a_rs;
51  inc_src = 1;
52  cs_dst = 0;
53  rs_dst = 1;
54  inc_dst = a_rs;
55  }
56  else if ( bl1_is_row_storage( a_rs, a_cs ) && bl1_is_upper( uplo ) )
57  {
58  cs_src = 0;
59  rs_src = 1;
60  inc_src = a_rs;
61  cs_dst = 0;
62  rs_dst = a_rs;
63  inc_dst = 1;
64  }
65  else if ( bl1_is_gen_storage( a_rs, a_cs ) && bl1_is_lower( uplo ) )
66  {
67  // General stride with column-major tilt looks similar to column-major.
68  // General stride with row-major tilt looks similar to row-major.
69  if ( a_rs < a_cs )
70  {
71  cs_src = 1 * a_rs;
72  rs_src = 0;
73  inc_src = a_cs;
74  cs_dst = a_cs;
75  rs_dst = 0;
76  inc_dst = 1 * a_rs;
77  }
78  else // if ( a_rs > a_cs )
79  {
80  cs_src = 0;
81  rs_src = a_rs;
82  inc_src = 1 * a_cs;
83  cs_dst = 0;
84  rs_dst = 1 * a_cs;
85  inc_dst = a_rs;
86  }
87  }
88  else // if ( bl1_is_gen_storage( a_rs, a_cs ) && bl1_is_upper( uplo ) )
89  {
90  // General stride with column-major tilt looks similar to column-major.
91  // General stride with row-major tilt looks similar to row-major.
92  if ( a_rs < a_cs )
93  {
94  cs_src = a_cs;
95  rs_src = 0;
96  inc_src = 1 * a_rs;
97  cs_dst = 1 * a_rs;
98  rs_dst = 0;
99  inc_dst = a_cs;
100  }
101  else // if ( a_rs > a_cs )
102  {
103  cs_src = 0;
104  rs_src = 1 * a_cs;
105  inc_src = a_rs;
106  cs_dst = 0;
107  rs_dst = a_rs;
108  inc_dst = 1 * a_cs;
109  }
110  }
111 
112  for ( j = 0; j < n_iter; j++ )
113  {
114  a_src = a + j*cs_src + j*rs_src;
115  a_dst = a + j*cs_dst + j*rs_dst;
116 
117  bl1_scopyv( conj,
118  j,
119  a_src, inc_src,
120  a_dst, inc_dst );
121  }
122 }
void bl1_scopyv(conj1_t conj, int m, float *x, int incx, float *y, int incy)
Definition: bl1_copyv.c:35

References bl1_is_col_storage(), bl1_is_gen_storage(), bl1_is_lower(), bl1_is_row_storage(), bl1_is_upper(), bl1_scopyv(), and bl1_zero_dim1().

Referenced by FLA_Hermitianize(), and FLA_Symmetrize().

◆ bl1_zsymmize()

void bl1_zsymmize ( conj1_t  conj,
uplo1_t  uplo,
int  m,
dcomplex a,
int  a_rs,
int  a_cs 
)
354 {
355  dcomplex* a_src;
356  dcomplex* a_dst;
357  dcomplex* a_jj;
358  int rs_src, cs_src, inc_src;
359  int rs_dst, cs_dst, inc_dst;
360  int n_iter;
361  int j;
362 
363  // Return early if possible.
364  if ( bl1_zero_dim1( m ) ) return;
365 
366  // Assume A is square.
367  n_iter = m;
368 
369  // Initialize with appropriate values based on storage.
370  if ( bl1_is_col_storage( a_rs, a_cs ) && bl1_is_lower( uplo ) )
371  {
372  cs_src = 1;
373  rs_src = 0;
374  inc_src = a_cs;
375  cs_dst = a_cs;
376  rs_dst = 0;
377  inc_dst = 1;
378  }
379  else if ( bl1_is_col_storage( a_rs, a_cs ) && bl1_is_upper( uplo ) )
380  {
381  cs_src = a_cs;
382  rs_src = 0;
383  inc_src = 1;
384  cs_dst = 1;
385  rs_dst = 0;
386  inc_dst = a_cs;
387  }
388  else if ( bl1_is_row_storage( a_rs, a_cs ) && bl1_is_lower( uplo ) )
389  {
390  cs_src = 0;
391  rs_src = a_rs;
392  inc_src = 1;
393  cs_dst = 0;
394  rs_dst = 1;
395  inc_dst = a_rs;
396  }
397  else if ( bl1_is_row_storage( a_rs, a_cs ) && bl1_is_upper( uplo ) )
398  {
399  cs_src = 0;
400  rs_src = 1;
401  inc_src = a_rs;
402  cs_dst = 0;
403  rs_dst = a_rs;
404  inc_dst = 1;
405  }
406  else if ( bl1_is_gen_storage( a_rs, a_cs ) && bl1_is_lower( uplo ) )
407  {
408  // General stride with column-major tilt looks similar to column-major.
409  // General stride with row-major tilt looks similar to row-major.
410  if ( a_rs < a_cs )
411  {
412  cs_src = 1 * a_rs;
413  rs_src = 0;
414  inc_src = a_cs;
415  cs_dst = a_cs;
416  rs_dst = 0;
417  inc_dst = 1 * a_rs;
418  }
419  else // if ( a_rs > a_cs )
420  {
421  cs_src = 0;
422  rs_src = a_rs;
423  inc_src = 1 * a_cs;
424  cs_dst = 0;
425  rs_dst = 1 * a_cs;
426  inc_dst = a_rs;
427  }
428  }
429  else // if ( bl1_is_gen_storage( a_rs, a_cs ) && bl1_is_upper( uplo ) )
430  {
431  // General stride with column-major tilt looks similar to column-major.
432  // General stride with row-major tilt looks similar to row-major.
433  if ( a_rs < a_cs )
434  {
435  cs_src = a_cs;
436  rs_src = 0;
437  inc_src = 1 * a_rs;
438  cs_dst = 1 * a_rs;
439  rs_dst = 0;
440  inc_dst = a_cs;
441  }
442  else // if ( a_rs > a_cs )
443  {
444  cs_src = 0;
445  rs_src = 1 * a_cs;
446  inc_src = a_rs;
447  cs_dst = 0;
448  rs_dst = a_rs;
449  inc_dst = 1 * a_cs;
450  }
451  }
452 
453  for ( j = 0; j < n_iter; j++ )
454  {
455  a_src = a + j*cs_src + j*rs_src;
456  a_dst = a + j*cs_dst + j*rs_dst;
457 
458  bl1_zcopyv( conj,
459  j,
460  a_src, inc_src,
461  a_dst, inc_dst );
462 
463  if ( bl1_is_conj( conj ) )
464  {
465  a_jj = a + j*a_rs + j*a_cs;
466  a_jj->imag = bl1_d0();
467  }
468  }
469 }
void bl1_zcopyv(conj1_t conj, int m, dcomplex *x, int incx, dcomplex *y, int incy)
Definition: bl1_copyv.c:63
double bl1_d0(void)
Definition: bl1_constants.c:118
Definition: blis_type_defs.h:138
double imag
Definition: blis_type_defs.h:139

References bl1_d0(), bl1_is_col_storage(), bl1_is_conj(), bl1_is_gen_storage(), bl1_is_lower(), bl1_is_row_storage(), bl1_is_upper(), bl1_zcopyv(), bl1_zero_dim1(), and dcomplex::imag.

Referenced by FLA_Hermitianize(), and FLA_Symmetrize().