5 #ifndef FML_MPI_INTERNALS_BCUTILS_H
6 #define FML_MPI_INTERNALS_BCUTILS_H
44 inline void descinit(
int *desc,
const int ictxt,
const int m,
const int n,
const int mb,
const int nb,
const int lld)
47 desc[DESC_CTXT] = ictxt;
54 desc[DESC_LLD] = (lld<1?1:lld);
59 inline int numroc(
int n,
int nb,
int iproc,
int isrcproc,
int nprocs)
61 int mydist = (nprocs+iproc-isrcproc) % nprocs;
64 int ret = (nblocks/nprocs) * nb;
66 int extrablks = nblocks % nprocs;
67 if (mydist < extrablks)
69 else if (mydist == extrablks)
77 inline int l2g(
const int i,
const int nb,
const int nprocs,
const int myproc)
79 return nprocs*nb*(i/nb) + (i%nb) + ((nprocs+myproc)%nprocs)*nb;
84 inline int g2l(
const int gi,
const int nb,
const int nprocs)
86 return nb * (gi/(nb*nprocs)) + (gi%nb);
91 inline int g2p(
const int gi,
const int nb,
const int nprocs)
93 return (gi/nb) % nprocs;