#include <med.h>
#define MESGERR 1
#include "med_utils.h"
int *
const lastusedrank,
med_size *
const lastblocksize ) {
int _nusedproc = nproc;
int _lastusedrank = 0;
int _nblocks_pproc = 0;
for (; (_blocksize < 1) && ( _nusedproc > 1 ) ; ) {
--_nusedproc;
_blocksize = nentities/_nusedproc;
}
_lastusedrank = _nusedproc-1;
if ( myrank < _nusedproc)
_nblocks_pproc = 1;
else
_blocksize = 0;
*start = myrank*_nblocks_pproc*_blocksize;
*stride = _blocksize;
*count = _nblocks_pproc;
*lastblocksize = 0;
if ( myrank == _lastusedrank ) {
*blocksize = nentities+_blocksize*(1-_nusedproc);
} else {
*blocksize =_blocksize;
}
++(*start);
*lastusedrank=_lastusedrank;
printf("My rank %d , start %l , stride %l , blocksize %l , count %l , lastblocksize %l\n",
myrank,*start,*stride,*blocksize,*count,*lastblocksize);
return;
}
int *
const lastusedrank,
med_size *
const lastblocksize ) {
int _nusedproc = nproc;
int _lastusedrank = nproc-1;
int _nblocks_pproc = *io_count;
int _nblocks = _nblocks_pproc*nproc;
if (_nblocks) _blocksize=nentities/_nblocks;
for (; (_blocksize < 1) && ( _nblocks_pproc > 1 ) ; ) {
--_nblocks_pproc;
_nblocks = _nblocks_pproc*nproc;
_blocksize = nentities/_nblocks;
}
if ( _blocksize == 0 ) {
MESSAGE(
"Downcasting getCyclicBlocksOfEntities to getContinuousBlocksOfEntities");
start, stride, io_count, blocksize, lastusedrank, lastblocksize );
return;
}
*blocksize = _blocksize;
*stride = _blocksize*nproc;
*start = _blocksize*myrank;
*io_count = _nblocks_pproc;
if (myrank == _lastusedrank) {
*lastblocksize = nentities + _blocksize*(1-nproc*_nblocks_pproc);
if ( _nblocks_pproc == 1 ) {*blocksize=*lastblocksize;*lastblocksize=0;}
} else
*lastblocksize=0;
++(*start);
*lastusedrank=_lastusedrank;
return;
}
void getContinuousBlocksOfEntities(const int myrank, const int nproc, const int nentities, med_size *const start, med_size *const stride, med_size *const count, med_size *blocksize, int *const lastusedrank, med_size *const lastblocksize)
void getCyclicBlocksOfEntities(const int myrank, const int nproc, const int nentities, med_size *const start, med_size *const stride, med_size *const io_count, med_size *blocksize, int *const lastusedrank, med_size *const lastblocksize)