20 Abstrait* varray,
void* comm)
24 cerr <<
"In computeReceiveDataBlock1DServer...\n";
27 vector<LocalData_t> sched_send;
28 vector<LocalData_t> sched_recv;
34 GlobalData_t& gd = (*vdarray)[0]->gd();
35 Topology_t& stopo= (*vdarray)[0]->topo();
44 cerr <<
"In computeReceiveDataBlock1DServer...computing what to send\n";
47 for (
unsigned it=0; it<vdarray->size(); it++) {
48 if ((*vdarray)[it]->dist().length()==0) {
50 cerr <<
"Dist data empty: nothing to send\n";
54 cerr <<
"it = " << it << endl;
61 sd.base = (*vdarray)[it]->getDataBuffer(0,
false);
72 cerr <<
"In computeReceiveDataBlock1DServer...computing what to receive\n";
78 unsigned dlbsz =
blockSize(gd.len, dtopo.total, param);
80 vd.rank = varray->dist()[0].rank;
81 vd.start = vd.rank * dlbsz;
85 cerr <<
"Allocating a sequence of length " << vd.len << endl;
87 varray->setSeqLength(1);
88 varray->setDataLength(0, vd.len);
90 vd.base = varray->getDataBuffer(0,
false);
95 cerr <<
"Cannot allocate memory for #elements" << vd.len << endl;
98 fprintf(stderr,
"dd.base = %p\n", vd.base);
110 doSchedule(gd, vd, dtopo, sched_send, sched_recv, comm);
112 cerr <<
"In computeReceiveDataBlock1DServer...ok\n";
122 case PaCO::none: cerr <<
"INTERNAL ERROR: " << __FILE__ <<
" " << __FUNCTION__ << endl;
return 0;
126 unsigned int nvdarray = stotal/dtotal;
127 unsigned int remaining = (nvdarray*dtotal + drank < stotal)?1:0;
128 nvdarray += remaining;
129 if ( nvdarray == 0 )
return 1;
132 case PaCO::CommSide: cerr <<
"INTERNAL ERROR: not yet implemented in " << __FILE__ <<
" " << __FUNCTION__ << endl;
return 0;
140 case PaCO::none: cerr <<
"INTERNAL ERROR: " << __FILE__ <<
" " << __FUNCTION__ << endl;
return 0;
143 case PaCO::CommSide: cerr <<
"INTERNAL ERROR: not yet implemented in " << __FILE__ <<
" " << __FUNCTION__ << endl;
return 0;
153 Abstrait* varray,
void* comm) {
155 #ifdef DEBUG_INTERNAL 156 cerr <<
"In computeReceiveDataBlock1D...\n";
160 cerr <<
"INTERNAL ERROR: " << __FILE__ <<
" " << __FUNCTION__ << endl;
163 #ifdef DEBUG_INTERNAL 164 cerr <<
"Client Side case" <<endl;
166 varray->CopyAndGetSequenceOwner((*vdarray)[0]);
167 #ifdef DEBUG_INTERNAL 168 cerr <<
"Return true" << endl;
177 cerr <<
" vdaray size: " << vdarray->size() << endl;
189 #ifdef DEBUG_INTERNAL 190 cerr <<
"DOING LOCAL REDISTRIBUTION width drank: "<< drank << endl;
193 dtopo.total = dtotal;
195 varray->topo() = (*vdarray)[0]->topo();
196 varray->gd() = (*vdarray)[0]->gd();
197 varray->dist().length(1);
198 varray->dist()[0].rank = drank;
bool computeReceiveDataBlock1D(vAbstrait *vdarray, const PaCO::distLoc_t &mode, const unsigned dtotal, const unsigned drank, const ParisBlock_param_t *param, Abstrait *varray, void *comm)
static unsigned TotalNumberOfElementProc(const unsigned glen, const unsigned rank, const unsigned nbprocs, const unsigned bsz)
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)
void computeReceiveDataBlock1DServer(vAbstrait *vdarray, const Topology_t &dtopo, const ParisBlock_param_t *param, 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)
unsigned posofPart(const PaCO::distLoc_t &mode, const unsigned dtotal, const unsigned srank)
unsigned nbofPart(const PaCO::distLoc_t &mode, const unsigned stotal, const unsigned dtotal, const unsigned drank)
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)