PaCO++  0.05
ParisBlock.cc
Go to the documentation of this file.
1 #include "ParisBlock.h"
2 
3 #include "Schedule.h"
4 
5 ParisBlock::ParisBlock(Fabrique* f ) {
6  setFabric(f);
7  _darray = f->creer();
8  _vdarray = f->vcreer();
9  _vdarray->clear();
10 
11  _clttopo.total = 123; // debug
12  _srvtopo.total = 123; // debug
13 
14  // param
15  _param.type = PARISBLOCK_BLOCK; // default is bloc
16  _param.blocksize = 1; // default is cyclic(1)
17  _param.unitblocksize = 1; // by default
18 
19 }
20 
22  delete _fab; delete _darray; delete _vdarray;
23 }
24 
25 void ParisBlock::setFabric(Fabrique* f) { _fab = f; }
26 
27 void ParisBlock::reset() { _vdarray->clear(); }
28 
29 const PaCO::distLoc_t& ParisBlock::getMode() const { return _mode; }
30 
31 bool ParisBlock::setMode(const PaCO::distLoc_t mode) { _mode = mode; return true; } // true if ok
32 
33 bool ParisBlock::setClientConfiguration(const PaCO::PacoTopology_t & ctopo) { _clttopo = ctopo; return true; }
34 bool ParisBlock::setServerConfiguration(const PaCO::PacoTopology_t & stopo) { _srvtopo = stopo; return true; }
35 
38  _ld.rank = ld.rank;
39  _ld.start = ld.start;
40  _ld.len = ld.len;
41  return true;
42 }
43 
44 int ParisBlock::setConfig(void * config) {
45  _param = * ( ParisBlock_param_t*) config;
46  return 0;
47 }
48 
50  return (void*) &_param;
51 }
52 
53 void ParisBlock::computeSend(const void* data, vAbstrait& vdarray, vector<unsigned>& destid) {
54  _ld.base = (char*) data;
55 
57 }
58 
59 bool ParisBlock::computeReceive(Abstrait* darray) {
60 
61  this->setClientConfiguration(darray->topo());
62 
63  // Get the mode of the client
64  this->setMode(darray->mode());
65 
66  unsigned nb = nbofPart(_mode, _clttopo.total, _srvtopo.total, _ld.rank);
67 
68  unsigned pos;
69 
70  // In server side redistribution, empty dist for server nodes whose id > max client node
71  if (darray->dist().length() != 0 ) {
72  pos = posofPart(_mode, _srvtopo.total, darray->dist()[0].rank);
73  } else {
74  pos = 0;
75  }
76 
77  // Initialize _vdarray & remaining (assumed clean)
78  if (_vdarray->size() == 0) {
79  // _vdarray is empty: so let's define its size
80  _vdarray->size(nb);
81  _remaining = nb;
82  }
83 
84 
85  // fprintf(stderr, "computeReceive: Node %d : set entry %d/%d to %p\n", _ld.rank, pos, nb, darray);
86  _vdarray->setAbstrait(pos, darray);
87  _remaining--;
88 
89  // fprintf(stderr, "computeReceive: Node %d : got %d of %d data\n", _ld.rank, _vdarray->size() - _remaining, _vdarray->size());
90 
91  if (_remaining == 0) {
93  return true;
94  } else {
95  return false;
96  }
97 }
98 
99 Abstrait* ParisBlock::getResult() const { return _darray; }
int setConfig(void *config)
Definition: ParisBlock.cc:44
bool setLocalDataConfiguration(const PaCO::PacoLocalData_t &ld)
Definition: ParisBlock.cc:37
void computeSend(const void *data, vAbstrait &vdarray, vector< unsigned > &destid)
Compute communication schedule on the client side.
Definition: ParisBlock.cc:53
void * getConfig()
Definition: ParisBlock.cc:49
bool setGlobalDataConfiguration(const PaCO::PacoGlobalData_t &gd)
Definition: ParisBlock.cc:36
Abstrait * _darray
Definition: ParisBlock.h:23
void setFabric(Fabrique *f)
Definition: ParisBlock.cc:25
bool computeReceive(Abstrait *darray)
Compute communication schedule on the server side.
Definition: ParisBlock.cc:59
vAbstrait * _vdarray
Definition: ParisBlock.h:24
bool computeReceiveDataBlock1D(vAbstrait *sdata, const PaCO::distLoc_t &mode, const unsigned total, const unsigned rank, const ParisBlock_param_t *param, Abstrait *varray, void *comm)
Definition: ServerSide.cc:151
const PaCO::distLoc_t & getMode() const
Definition: ParisBlock.cc:29
PaCO::PacoGlobalData_t _gd
Definition: ParisBlock.h:15
void * _comm
Definition: ParisBlock.h:20
LocalData_t _ld
Definition: ParisBlock.h:18
virtual ~ParisBlock()
Definition: ParisBlock.cc:21
unsigned nbofPart(const PaCO::distLoc_t &mode, const unsigned stotal, const unsigned dtotal, const unsigned drank)
Definition: ServerSide.cc:120
distLoc_t
Definition: PaCO++.idl:12
void reset()
Definition: ParisBlock.cc:27
void computeSendDataBlock1D(const GlobalData_t &gd, const LocalData_t &sd, const Topology_t &stopo, const Topology_t &dtopo, const ParisBlock_param_t *param, vAbstrait &vdarray, vector< unsigned > &destid, const PaCO::distLoc_t &mode, void *comm)
Definition: ClientSide.cc:215
PaCO::PacoTopology_t _clttopo
Definition: ParisBlock.h:13
unsigned long total
Definition: PaCO++.idl:35
int _remaining
Definition: ParisBlock.h:25
ParisBlock(Fabrique *f)
Definition: ParisBlock.cc:5
PaCO::PacoTopology_t _srvtopo
Definition: ParisBlock.h:14
PaCO::distLoc_t _mode
Definition: ParisBlock.h:12
unsigned posofPart(const PaCO::distLoc_t &mode, const unsigned dtotal, const unsigned srank)
Definition: ServerSide.cc:138
unsigned long start
Definition: PaCO++.idl:27
Fabrique * _fab
Definition: ParisBlock.h:22
unsigned long rank
Definition: PaCO++.idl:26
ParisBlock_param_t _param
Definition: ParisBlock.h:28
bool setClientConfiguration(const PaCO::PacoTopology_t &ctopo)
Definition: ParisBlock.cc:33
bool setMode(const PaCO::distLoc_t mode)
Definition: ParisBlock.cc:31
unsigned int blocksize
Definition: Type.h:13
Abstrait * getResult() const
If computeReceive returns ok, get the data.
Definition: ParisBlock.cc:99
unsigned int unitblocksize
Definition: Type.h:15
ParisBlock_distri_type_t type
Definition: Type.h:12
unsigned long len
Definition: PaCO++.idl:28
bool setServerConfiguration(const PaCO::PacoTopology_t &stopo)
Definition: ParisBlock.cc:34