13 #undef STANDALONE_FILE 19 inline char* mymalloc(
unsigned sz) {
20 static unsigned base=0x1000000;
27 #ifdef STANDALONE_FILE 30 #include "../Generated/Concret.h" 31 #include "../Generated/XServiceType.h" 40 const Topology_t &stopo,
const Topology_t &dtopo,
41 vAbstrait& vdarray, vector<unsigned>& destid,
void* comm)
44 cerr <<
"In computeSendDataBlock1DClient...\n";
46 vector<LocalData_t> sched_send;
47 vector<LocalData_t> sched_recv;
57 cerr <<
"In computeSendDataBlock1DClient...computing what to send\n";
65 cerr <<
"In computeSendDataBlock1DClient...computing what to receive\n";
68 unsigned int nvdarray = dtopo.total/stopo.total;
69 unsigned int remaining = (nvdarray*stopo.total + sd.rank < dtopo.total)?1:0;
70 nvdarray += remaining;
74 vdarray.resize(nvdarray);
76 destid.resize(nvdarray);
79 unsigned dbsz =
blockSize(gd.len, dtopo.total);
81 for (
unsigned it=0; it<nvdarray; it++) {
83 cerr <<
"computeSendDataBlock1DClient: it = " << it << endl;
85 Abstrait* out = vdarray[it];
87 out->topo().total = dtopo.total;
88 out->gd().len = gd.len;
89 out->gd().unit_size = gd.unit_size;
94 out->dist().length(1);
99 pld.
rank = dd.rank = sd.rank + it * stopo.total;
100 pld.
start = dd.start = dd.rank * dbsz;
103 #ifdef DEBUG_INTERNAL 104 fprintf(stderr,
"%d: -- r:%d gl:%d ll:%d start:%d bz:%d dt:%d\n", pid,
105 dd.rank, gd.len, dd.len, dd.start, dbsz, dtopo.total);
108 destid[it] = dd.rank;
114 dd.base = (
char*) mymalloc(pld.
len * gd.unit_size);
115 out->setDataLength(0, pld.
len);
117 #ifdef DEBUG_INTERNAL 118 cerr <<
"Allocating a sequence of length " << pld.
len << endl;
120 out->setDataLength(0, pld.
len);
122 dd.base = out->getDataBuffer(0,
false);
128 cerr <<
"Cannot allocate memory for #elements" << pld.
len << endl;
130 #ifdef DEBUG_INTERNAL 131 fprintf(stderr,
"dd.base = %p\n", dd.base);
143 fprintf(stderr,
"In computeSendDataBlock1DClient...Doing local communications with ctopo: %ld\n", dtopo.total);
144 doSchedule(gd, sd, stopo, sched_send, sched_recv, comm);
146 cerr <<
"In computeSendDataBlock1DClient...ok\n";
158 const Topology_t &stopo,
const Topology_t &dtopo,
159 vAbstrait& vdarray, vector<unsigned>& destid)
167 unsigned int nvdarray = dtopo.total/stopo.total;
168 unsigned int remaining = (nvdarray*stopo.total + sd.rank < dtopo.total)?1:0;
169 nvdarray += remaining;
172 if ( nvdarray == 0 ) nvdarray=1;
176 vdarray.resize(nvdarray);
178 destid.resize(nvdarray);
180 for (
unsigned it=0; it<nvdarray; it++) {
182 Abstrait* out = vdarray[it];
184 out->topo().total = stopo.total;
185 out->gd().len = gd.len;
186 out->gd().unit_size = gd.unit_size;
192 out->dist().length(1);
193 out->setSeqLength(1);
195 out->dist()[0].rank = sd.rank;
196 out->dist()[0].start = sd.start;
197 out->dist()[0].len = sd.len;
198 out->DataReplace(0, sd.len, sd.base,
false);
200 out->dist().length(0);
201 out->setSeqLength(0);
203 destid[it] = ( sd.rank + it * stopo.total ) % dtopo.total;
218 const Topology_t &stopo,
const Topology_t &dtopo,
219 vAbstrait& vdarray, vector<unsigned>& destid,
223 case PaCO::none: cerr <<
"INTERNAL ERROR: " << __FILE__ <<
" " << __FUNCTION__ << endl;
void computeSendDataBlock1D(const GlobalData_t &gd, const LocalData_t &sd, const Topology_t &stopo, const Topology_t &dtopo, vAbstrait &vdarray, vector< unsigned > &destid, const PaCO::distLoc_t &mode, void *comm)
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 computeSendDataBlock1DServer(const GlobalData_t &gd, const LocalData_t &sd, const Topology_t &stopo, const Topology_t &dtopo, vAbstrait &vdarray, vector< unsigned > &destid)
void computeSendDataBlock1DComm()
void computeSendDataBlock1DClient(const GlobalData_t &gd, const LocalData_t &sd, const Topology_t &stopo, const Topology_t &dtopo, vAbstrait &vdarray, vector< unsigned > &destid, 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)
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)