14 #ifndef _PLASMA_DESCRIPTOR_H_
15 #define _PLASMA_DESCRIPTOR_H_
24 inline static void *plasma_geteltaddr(
const PLASMA_desc *A,
int m,
int n,
int eltsize);
25 inline static void *plasma_getaddr(
PLASMA_desc A,
int m,
int n);
26 PLASMA_desc plasma_desc_init(PLASMA_enum dtyp,
int mb,
int nb,
int bsiz,
int lm,
int ln,
int i,
int j,
int m,
int n);
35 inline static void *plasma_getaddr(
PLASMA_desc A,
int m,
int n)
37 size_t mm = m+A.i/A.mb;
38 size_t nn = n+A.j/A.nb;
39 size_t eltsize = plasma_element_size(A.dtyp);
44 offset = A.bsiz*(mm+A.lm1*nn);
46 offset = A.A12 + (A.mb*(A.ln%A.nb)*mm);
50 offset = A.A21 + ((A.lm%A.mb)*A.nb*nn);
55 return (
void*)((intptr_t)A.mat + (offset*eltsize) );
61 inline static void *plasma_geteltaddr(
const PLASMA_desc *A,
int m,
int n,
int eltsize)
69 offset = A->bsiz*(mm+A->lm1*nn) + m%A->mb + A->mb*(n%A->nb);
71 offset = A->A12 + (A->mb*(A->ln%A->nb)*mm) + m%A->mb + A->mb*(n%A->nb);
75 offset = A->A21 + ((A->lm%A->mb)*A->nb*nn) + m%A->mb + (A->lm%A->mb)*(n%A->nb);
77 offset = A->A22 + m%A->mb + (A->lm%A->mb)*(n%A->nb);
79 return (
void*)((intptr_t)A->mat + (offset*eltsize) );
85 int PLASMA_Desc_Create(
PLASMA_desc **desc,
void *mat, PLASMA_enum dtyp,
int mb,
int nb,
int bsiz,
int lm,
int ln,
int i,
int j,
int m,
int n);