14 #ifndef _PLASMA_DESCRIPTOR_H_
15 #define _PLASMA_DESCRIPTOR_H_
68 PLASMA_desc plasma_desc_init(PLASMA_enum dtyp,
int mb,
int nb,
int bsiz,
69 int lm,
int ln,
int i,
int j,
int m,
int n);
73 static inline int plasma_element_size(
int type)
76 case PlasmaByte:
return 1;
77 case PlasmaInteger:
return sizeof(int);
78 case PlasmaRealFloat:
return sizeof(float);
79 case PlasmaRealDouble:
return sizeof(double);
80 case PlasmaComplexFloat:
return 2*
sizeof(float);
81 case PlasmaComplexDouble:
return 2*
sizeof(double);
83 fprintf(stderr,
"plasma_element_size: invalide type parameter\n");
91 inline static void *plasma_getaddr(
PLASMA_desc A,
int m,
int n)
93 size_t mm = m+A.
i/A.
mb;
94 size_t nn = n+A.
j/A.
nb;
95 size_t eltsize = plasma_element_size(A.
dtyp);
98 if (mm < (
size_t)(A.
lm1)) {
99 if (nn < (
size_t)(A.
ln1))
100 offset = A.
bsiz*(mm + (size_t)A.
lm1 * nn);
102 offset = A.
A12 + ((size_t)A.
mb * (A.
ln%A.
nb) * mm);
105 if (nn < (
size_t)(A.
ln1))
106 offset = A.
A21 + ((size_t)A.
nb * (A.
lm%A.
mb) * nn);
111 return (
void*)((
char*)A.
mat + (offset*eltsize) );
117 inline static void *plasma_geteltaddr(
const PLASMA_desc *A,
int m,
int n,
int eltsize)
123 if (mm < (
size_t)(A->
lm1)) {
124 if (nn < (
size_t)(A->
ln1))
125 offset = A->
bsiz*(mm+A->
lm1*nn) + m%A->
mb + A->
mb * (
size_t)(n%A->
nb);
127 offset = A->
A12 + (A->
mb*(A->
ln%A->
nb)*mm) + m%A->
mb + A->
mb * (size_t)(n%A->
nb);
130 if (nn < (
size_t)(A->
ln1))
131 offset = A->
A21 + ((A->
lm%A->
mb)*A->
nb*nn) + m%A->
mb + (A->
lm%A->
mb) * (
size_t)(n%A->
nb);
133 offset = A->
A22 + m%A->
mb + (A->
lm%A->
mb) * (
size_t)(n%A->
nb);
135 return (
void*)((
char*)A->
mat + (offset*eltsize) );
int nt
Definition: descriptor.h:61
size_t A21
Definition: descriptor.h:43
int m
Definition: descriptor.h:58
int mb
Definition: descriptor.h:47
int ln
Definition: descriptor.h:51
int j
Definition: descriptor.h:57
int lnt
Definition: descriptor.h:55
int bsiz
Definition: descriptor.h:49
int lmt
Definition: descriptor.h:54
PLASMA_enum dtyp
Definition: descriptor.h:46
int mt
Definition: descriptor.h:60
int n
Definition: descriptor.h:59
int lm1
Definition: descriptor.h:52
int ln1
Definition: descriptor.h:53
int nb
Definition: descriptor.h:48
size_t A12
Definition: descriptor.h:44
int i
Definition: descriptor.h:56
int lm
Definition: descriptor.h:50
size_t A22
Definition: descriptor.h:45
Definition: descriptor.h:41
void * mat
Definition: descriptor.h:42