11 #define DEBUG_INTERNAL 21 cerr <<
"In computeReceiveDataBlock1DServer...\n";
23 vector<LocalData_t> sched_send;
24 vector<LocalData_t> sched_recv;
30 GlobalData_t& gd = (*vdarray)[0]->gd();
31 Topology_t& stopo= (*vdarray)[0]->topo();
38 cerr <<
"In computeReceiveDataBlock1DServer...computing what to send\n";
39 for (
unsigned it=0; it<vdarray->size(); it++) {
40 if ((*vdarray)[it]->dist().length()==0) {
41 cerr <<
"Dist data empty: nothing to send\n";
43 cerr <<
"it = " << it << endl;
49 sd.base = (*vdarray)[it]->getDataBuffer(0,
false);
59 cerr <<
"In computeReceiveDataBlock1DServer...computing what to receive\n";
65 unsigned dbsz =
blockSize(gd.len, dtopo.total);
67 vd.rank = varray->dist()[0].rank;
68 vd.start = vd.rank * dbsz;
72 cerr <<
"Allocating a sequence of length " << vd.len << endl;
74 varray->setSeqLength(1);
75 varray->setDataLength(0, vd.len);
77 vd.base = varray->getDataBuffer(0,
false);
82 cerr <<
"Cannot allocate memory for #elements" << vd.len << endl;
85 fprintf(stderr,
"dd.base = %p\n", vd.base);
96 fprintf(stderr,
"In computeReceiveDataBlock1DServer...Doing local communications with ctopo: %ld\n", dtopo.total);
97 doSchedule(gd, vd, dtopo, sched_send, sched_recv, comm);
99 cerr <<
"In computeReceiveDataBlock1DServer...ok\n";
107 case PaCO::none: cerr <<
"INTERNAL ERROR: " << __FILE__ <<
" " << __FUNCTION__ << endl;
return 0;
111 unsigned int nvdarray = stotal/dtotal;
112 unsigned int remaining = (nvdarray*dtotal + drank < stotal)?1:0;
113 nvdarray += remaining;
114 if ( nvdarray == 0 )
return 1;
117 case PaCO::CommSide: cerr <<
"INTERNAL ERROR: not yet implemented in " << __FILE__ <<
" " << __FUNCTION__ << endl;
return 0;
124 case PaCO::none: cerr <<
"INTERNAL ERROR: " << __FILE__ <<
" " << __FUNCTION__ << endl;
return 0;
127 case PaCO::CommSide: cerr <<
"INTERNAL ERROR: not yet implemented in " << __FILE__ <<
" " << __FUNCTION__ << endl;
return 0;
136 const unsigned dtotal,
const unsigned drank,
137 Abstrait* varray,
void* comm) {
139 cerr <<
"In computeReceiveDataBlock1D...\n";
143 cerr <<
"INTERNAL ERROR: " << __FILE__ <<
" " << __FUNCTION__ << endl;
146 cerr <<
"Client Side case" <<endl;
147 varray->CopyAndGetSequenceOwner((*vdarray)[0]);
148 cerr <<
"Return true" << endl;
156 cerr <<
" vdaray size: " << vdarray->size() << endl;
168 cerr <<
"DOING LOCAL REDISTRIBUTION width drank: "<< drank << endl;
170 dtopo.total = dtotal;
172 varray->topo() = (*vdarray)[0]->topo();
173 varray->gd() = (*vdarray)[0]->gd();
174 varray->dist().length(1);
175 varray->dist()[0].rank = drank;
unsigned nbofPart(const PaCO::distLoc_t &mode, const unsigned stotal, const unsigned dtotal, const unsigned drank)
void computeSendBlock1D(const GlobalData_t &gd, const LocalData_t &sd, const Topology_t &stopo, const Topology_t &dtopo, const ParisBlock_param_t *param, vector< LocalData_t > &vOut)
unsigned posofPart(const PaCO::distLoc_t &mode, const unsigned dtotal, const unsigned srank)
bool computeReceiveDataBlock1D(vAbstrait *vdarray, const PaCO::distLoc_t &mode, const unsigned dtotal, const unsigned drank, Abstrait *varray, void *comm)
void doSchedule(const GlobalData_t &gd, const LocalData_t &ld, const Topology_t &ctopo, vector< LocalData_t > &sched_send, vector< LocalData_t > &sched_recv, void *comm)
static unsigned blockSize(const unsigned glen, const unsigned nbprocs, const ParisBlock_param_t *param)
void computeReceiveDataBlock1DServer(vAbstrait *vdarray, const Topology_t &dtopo, Abstrait *varray, void *comm)
varray must contain the rank of the caller
static unsigned localBlockLengthO(unsigned glen, unsigned rank, unsigned total, unsigned bsz)
void computeReceiveBlock1D(const GlobalData_t &gd, const LocalData_t &dd, const Topology_t &stopo, const Topology_t &dtopo, const ParisBlock_param_t *param, vector< LocalData_t > &vOut)