PLASMA  2.4.5
PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
auxiliary.c
Go to the documentation of this file.
1 #include <plasma.h>
2 #include <core_blas.h>
3 #include "auxiliary.h"
4 
6 int side[2] = { PlasmaLeft, PlasmaRight };
7 int uplo[2] = { PlasmaUpper, PlasmaLower };
10 
11 char *formatstr[6]= { "CM", "RM", "CCRB", "CRRB", "RCRB", "RRRB"};
12 char *sidestr[2] = { "Left ", "Right" };
13 char *uplostr[2] = { "Upper", "Lower" };
14 char *diagstr[2] = { "NonUnit", "Unit " };
15 char *transstr[3] = { "N", "T", "H" };
16 
17 /*-------------------------------------------------------------------
18  * Mapping for the different layouts
19  */
20 
21 #define map_cm(m, n, i, j) ((i) + (j) * (m))
22 #define map_rm(m, n, i, j) ((i) * (n) + (j))
23 
24 int map_CM( int m, int n, int mb, int nb, int i, int j) { return map_cm(m, n, i, j); }
25 int map_RM( int m, int n, int mb, int nb, int i, int j) { return map_rm(m, n, i, j); }
26 int map_CCRB(int m, int n, int mb, int nb, int i, int j) {
27  int m0 = m - m%mb;
28  int n0 = n - n%nb;
29  if ( j < n0 )
30  if (i < m0)
31  /* Case in A11 */
32  return ( map_cm( m/mb, n/nb, i/mb, j/nb )*mb*nb + map_cm( mb, nb, i%mb, j%nb) );
33  else
34  /* Case in A21 */
35  return ( m0*n0 + ( (j/nb) * (nb*(m%mb)) ) + map_cm( m%mb, nb, i%mb, j%nb) );
36  else
37  if (i < m0)
38  /* Case in A12 */
39  return ( m*n0 + ( (i/mb) * (mb*(n%nb)) ) + map_cm( mb, n%nb, i%mb, j%nb) );
40  else
41  /* Case in A22 */
42  return ( m*n0 + (n-n0)*m0 + map_cm( m%mb, n%nb, i%mb, j%nb) );
43 }
44 
45 int map_CRRB(int m, int n, int mb, int nb, int i, int j) {
46  int m0 = m - m%mb;
47  int n0 = n - n%nb;
48  if ( j < n0 )
49  if (i < m0)
50  /* Case in A11 */
51  return ( map_cm( m/mb, n/nb, i/mb, j/nb )*mb*nb + map_rm( mb, nb, i%mb, j%nb) );
52  else
53  /* Case in A21 */
54  return ( m0*n0 + ( (j/nb) * (nb*(m%mb)) ) + map_rm( m%mb, nb, i%mb, j%nb) );
55  else
56  if (i < m0)
57  /* Case in A12 */
58  return ( m*n0 + ( (i/mb) * (mb*(n%nb)) ) + map_rm( mb, n%nb, i%mb, j%nb) );
59  else
60  /* Case in A22 */
61  return ( m*n0 + (n-n0)*m0 + map_rm( m%mb, n%nb, i%mb, j%nb) );
62 }
63 
64 int map_RCRB(int m, int n, int mb, int nb, int i, int j) {
65  int m0 = m - m%mb;
66  int n0 = n - n%nb;
67  if ( j < n0 )
68  if (i < m0)
69  /* Case in A11 */
70  return ( map_rm( m/mb, n/nb, i/mb, j/nb )*mb*nb + map_cm( mb, nb, i%mb, j%nb) );
71  else
72  /* Case in A21 */
73  return ( m0*n + ( (j/nb) * (nb*(m%mb)) ) + map_cm( m%mb, nb, i%mb, j%nb) );
74  else
75  if (i < m0)
76  /* Case in A12 */
77  return ( m0*n0 + ( (i/mb) * (mb*(n%nb)) ) + map_cm( mb, n%nb, i%mb, j%nb) );
78  else
79  /* Case in A22 */
80  return ( m*n0 + (n-n0)*m0 + map_cm( m%mb, n%nb, i%mb, j%nb) );
81 }
82 
83 int map_RRRB(int m, int n, int mb, int nb, int i, int j) {
84  int m0 = m - m%mb;
85  int n0 = n - n%nb;
86  if ( j < n0 )
87  if (i < m0)
88  /* Case in A11 */
89  return ( map_rm( m/mb, n/nb, i/mb, j/nb )*mb*nb + map_rm( mb, nb, i%mb, j%nb) );
90  else
91  /* Case in A21 */
92  return ( m0*n + ( (j/nb) * (nb*(m%mb)) ) + map_rm( m%mb, nb, i%mb, j%nb) );
93  else
94  if (i < m0)
95  /* Case in A12 */
96  return ( m0*n0 + ( (i/mb) * (mb*(n%nb)) ) + map_rm( mb, n%nb, i%mb, j%nb) );
97  else
98  /* Case in A22 */
99  return ( m*n0 + (n-n0)*m0 + map_rm( m%mb, n%nb, i%mb, j%nb) );
100 }
101 
103