PaCO++
0.05
|
#include <Controlled.h>
Public Member Functions | |
virtual void | clientFree () |
virtual PieceToSend * | computePiecesToSend (unsigned &size) |
Controlled () | |
virtual bool | freeComId (long id) |
virtual void * | getClientData (void *pid, int server_node, long &size, long &length, bool &end) |
virtual void * | getDescr () |
virtual PaCO::PacoTopology_t | getDestTopology () |
long | getMaxLen () |
virtual long | getNodeRank () |
virtual void * | getServerData (long &length) |
virtual PaCO::PacoTopology_t | getSourceTopology () |
virtual bool | insertData (void *rcptBuf, unsigned long element_nb) |
void | readFromFile (char *filename) |
virtual void | serverFree () |
virtual bool | setComId (long id) |
virtual void | setCommunicator (void *group) |
virtual void | setDataPtr (void *dataPtr) |
virtual void | setDescr (void *descr) |
virtual void | setDestTopology (PaCO::PacoTopology_t topo) |
void | setEltSize (unsigned long size) |
void | setMaxLocalLen (unsigned long elt_nb) |
virtual void | setNodeRank (long Rank) |
virtual void | setSourceTopology (PaCO::PacoTopology_t topo) |
virtual | ~Controlled () |
Protected Member Functions | |
void | _setDestTopology (unsigned long total) |
void | _setLocalLen (unsigned long elt_nb) |
void | _setSourceTopology (unsigned long total) |
Private Attributes | |
char * | _clientBuffer |
ControlledLib::ControlledDescr | _clientDescr |
CommMatrix * | _cm |
unsigned | _config |
PaCO::PacoTopology_t | _dTopo |
unsigned | _llen |
unsigned | _maxllen |
unsigned | _nodeRank |
CommMatrix * | _remaining_cm |
char * | _serverBuffer |
ControlledLib::ControlledDescr * | _serverDescr |
unsigned long | _serverToReceived |
PaCO::PacoTopology_t | _sTopo |
unsigned | _unitsize |
Definition at line 15 of file Controlled.h.
Definition at line 19 of file Controlled.cc.
References _clientBuffer, _clientDescr, _cm, _config, _dTopo, _maxllen, _nodeRank, _remaining_cm, _serverBuffer, _serverDescr, _sTopo, ControlledLib::ControlledDescr::lens, and PaCO::PacoTopology_s::total.
{ #ifdef DEBUG_INTERNAL std::cerr<<"[new] Controlled"<<std::endl; #endif // Common _config = 0; // By default 1->1 :) _sTopo.total=1; _dTopo.total=1; _nodeRank=0; // Client side _clientBuffer=NULL; _cm = new CommMatrix(_sTopo.total,_dTopo.total); _maxllen=0; _remaining_cm = NULL; _clientDescr.lens.length(0); // Server side _serverDescr=NULL; _serverBuffer=NULL; #ifdef DEBUG_INTERNAL std::cerr<<"[new] Controlled done"<<std::endl; #endif }
Controlled::~Controlled | ( | ) | [virtual] |
Definition at line 50 of file Controlled.cc.
References _cm.
{ #ifdef DEBUG_INTERNAL std::cerr<<"[del] Controlled"<<std::endl; #endif delete _cm; }
void Controlled::_setDestTopology | ( | unsigned long | total | ) | [protected] |
Definition at line 93 of file Controlled.cc.
References setDestTopology(), and PaCO::PacoTopology_s::total.
Referenced by readFromFile().
{ PaCO::PacoTopology_t topo; topo.total = total; setDestTopology(topo); }
void Controlled::_setLocalLen | ( | unsigned long | elt_nb | ) | [protected] |
Definition at line 150 of file Controlled.cc.
References _llen.
Referenced by setDescr().
{ #ifdef DEBUG_INTERNAL std::cerr << "-- setLotalNbElt: " << elt_nb << std::endl; #endif _llen = elt_nb; }
void Controlled::_setSourceTopology | ( | unsigned long | total | ) | [protected] |
Definition at line 60 of file Controlled.cc.
References setSourceTopology(), and PaCO::PacoTopology_s::total.
Referenced by readFromFile().
{ PaCO::PacoTopology_t topo; topo.total = total; setSourceTopology(topo); }
void Controlled::clientFree | ( | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 333 of file Controlled.cc.
References _remaining_cm.
{ #ifdef DEBUG_INTERNAL std::cerr << "-- clientFree\n"; #endif delete _remaining_cm; _remaining_cm=NULL; }
PieceToSend * Controlled::computePiecesToSend | ( | unsigned & | size | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 236 of file Controlled.cc.
References _cm, _config, _nodeRank, _unitsize, CORRECT_CONFIG, PieceToSend::destNode, CommMatrix::get(), CommMatrix::getReceiverSize(), CommMatrix::getSenderSize(), PieceToSend::id, PieceToSend::size, and PieceToSend::sourceNode.
{ PieceToSend * sched; #ifdef DEBUG_INTERNAL std::cerr << "computePiecesToSend-------------------- in\n"; std::cerr << " config = "<<_config<<endl; std::cerr << " #sender: "<<_cm->getSenderSize()<<std::endl; std::cerr << " #recv: "<<_cm->getReceiverSize()<<std::endl; #endif if (_config != CORRECT_CONFIG) { std::cerr << "Controlled: incorrect configuration state "<< _config<<"/"<<CORRECT_CONFIG<<endl; abort(); } sched = new PieceToSend[_cm->getSenderSize()*_cm->getReceiverSize()]; unsigned count=0; for(unsigned j=0;j<_cm->getReceiverSize();j++) { if (_cm->get(_nodeRank,j)>0) { #ifdef DEBUG_INTERNAL std::cerr << " "<<_nodeRank<<" -> "<<j<<" : "<<_cm->get(_nodeRank,j)<<std::endl; #endif sched[count].sourceNode = _nodeRank; sched[count].destNode = j; sched[count].size = _cm->get(_nodeRank,j)*_unitsize; sched[count].id = (void*) -1; /* not used */ count++; } } size_out = count; #ifdef DEBUG_INTERNAL std::cerr << "computePiecesToSend-------------------- done\n"; #endif return sched; }
virtual bool DistributionLibrary::freeComId | ( | long | id | ) | [inline, virtual, inherited] |
Reimplemented in BasicBC, and GaBro.
Definition at line 41 of file DistributionLibrairie.h.
{ return false;}
void * Controlled::getClientData | ( | void * | pid, |
int | server_node, | ||
long & | size, | ||
long & | length, | ||
bool & | end | ||
) | [virtual] |
Implements DistributionLibrary.
Definition at line 288 of file Controlled.cc.
References _clientBuffer, _clientDescr, _cm, _nodeRank, _remaining_cm, _unitsize, CommMatrix::get(), CommMatrix::getSenderSize(), ControlledLib::ControlledDescr::lens, ControlledLib::ControlledDescr::llen, and CommMatrix::sub().
{ if (!_remaining_cm) _remaining_cm = new CommMatrix(_cm); long rgsz = _remaining_cm->get(_nodeRank, dnode)*_unitsize; unsigned rglen; if (rgsz > remaining_size_octet) { rglen = remaining_size_octet/_unitsize; end=false; } else { rglen = _remaining_cm->get(_nodeRank, dnode); end=true; } if (rglen>0) { returned_length_element=rglen; remaining_size_octet-=(returned_length_element*_unitsize); _remaining_cm->sub(_nodeRank, dnode, rglen); unsigned descr_len = _clientDescr.lens.length(); _clientDescr.lens.length(descr_len+1); _clientDescr.lens[descr_len]=rglen; unsigned total=0; for(unsigned i=0;i<_cm->getSenderSize();i++) { total+=_cm->get(i, dnode); } _clientDescr.llen = total; } #ifdef DEBUG_INTERNAL std::cerr << __FUNCTION__ << ": getClientData returns #elt: "<<rglen<<endl; #endif // int dummy; // fscanf(stdin, "%d", &dummy); return _clientBuffer; }
void * Controlled::getDescr | ( | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 344 of file Controlled.cc.
References _clientDescr, ControlledLib::ControlledDescr::lens, and ControlledLib::ControlledDescr::llen.
{ #ifdef DEBUG_INTERNAL std::cerr << "-- descr:llen: "<<_clientDescr.llen<<std::endl; #endif _clientDescr.lens.length(0); return &_clientDescr; }
PaCO::PacoTopology_t Controlled::getDestTopology | ( | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 117 of file Controlled.cc.
References _dTopo.
{ std::cerr << "****** Why is the method " << __FUNCTION__ << "called?\n"; abort(); return _dTopo; }
long Controlled::getMaxLen | ( | ) |
long Controlled::getNodeRank | ( | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 134 of file Controlled.cc.
References _nodeRank.
{ return _nodeRank; }
void * Controlled::getServerData | ( | long & | length | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 377 of file Controlled.cc.
References _llen, and _serverBuffer.
{ length= _llen; #ifdef DEBUG_INTERNAL std::cerr << "-- getServerData: ptr : "<<(void*)_serverBuffer<<" #element:"<<length<<std::endl; #endif return (void*) _serverBuffer; }
PaCO::PacoTopology_t Controlled::getSourceTopology | ( | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 84 of file Controlled.cc.
References _sTopo.
{ std::cerr << "****** Why is the method " << __FUNCTION__ << "called?\n"; abort(); return _sTopo; }
bool Controlled::insertData | ( | void * | rcptBuf, |
unsigned long | element_nb | ||
) | [virtual] |
Implements DistributionLibrary.
Definition at line 356 of file Controlled.cc.
References _serverBuffer, _serverToReceived, and _unitsize.
{ // cp from recpBuf to _serverBuffer #ifdef DEBUG_INTERNAL std::cerr << "-- insertData:"<<element_nb<<std::endl; #endif unsigned long llen = element_nb*_unitsize; _serverToReceived -= llen; memcpy(_serverBuffer+_serverToReceived, rcptBuf, llen); #ifdef DEBUG_INTERNAL std::cerr << "-- insertData: "<<_serverToReceived<<" octects"<<std::endl; #endif return (_serverToReceived==0); }
void Controlled::readFromFile | ( | char * | filename | ) |
Definition at line 175 of file Controlled.cc.
References _cm, _maxllen, _setDestTopology(), _setSourceTopology(), CommMatrix::dump(), CommMatrix::set(), and setMaxLocalLen().
{ #ifdef DEBUG_INTERNAL std::cerr << "readFromFile-------------------- done\n"; #endif //open comms file FILE *comms_file = fopen(filename, "r"); if (comms_file == NULL) { perror("unable to open comms file"); throw -1; } unsigned int senders, receivers; fscanf(comms_file, "%dx%d\n", &senders, &receivers); std::cerr<<" #s: "<<senders<<" #r:"<<receivers<<std::endl; _setSourceTopology(senders); _setDestTopology(receivers); unsigned maxs[senders]; for(unsigned int i = 0 ; i < senders ; i++) maxs[i]=0; //read edges in file, and add edges for(unsigned int i = 0 ; i < senders * receivers ; i++) { unsigned int value; fscanf(comms_file, "%d", &value); unsigned int node2 = i % receivers; unsigned int node1 = (i - node2) / receivers; if (value != 0) { _cm->set(node1, node2, value); #ifdef DEBUG_INTERNAL std::cerr << " "<<node1<<" -> "<<node2<<" : "<<value<<endl; #endif maxs[node1]+=value; } } fclose(comms_file); unsigned long max=0; for(unsigned int i = 0 ; i < senders ; i++) if (maxs[i]>max) max=maxs[i]; if (_maxllen && (max>_maxllen)) { std::cerr << "MaxLocalLen was set to small: "<<_maxllen<<" vs "<<max<<" (0: not set)"<<std::endl; abort(); } setMaxLocalLen(max); _cm->dump(); }
void Controlled::serverFree | ( | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 415 of file Controlled.cc.
References _serverBuffer.
{ #ifdef DEBUG_INTERNAL std::cerr << "-- serverFree: "<<(void*)_serverBuffer<<endl; #endif free(_serverBuffer); _serverBuffer=NULL; // the orb (or the user) need to free the memory! }
virtual bool DistributionLibrary::setComId | ( | long | id | ) | [inline, virtual, inherited] |
Reimplemented in BasicBC, and GaBro.
Definition at line 40 of file DistributionLibrairie.h.
{ return false;}
virtual void Controlled::setCommunicator | ( | void * | group | ) | [inline, virtual] |
void Controlled::setDataPtr | ( | void * | dataPtr | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 279 of file Controlled.cc.
References _clientBuffer.
{ _clientBuffer = (char *) dataPtr; #ifdef DEBUG_INTERNAL cerr << "-- _clientBuffer set to "<<dataPtr<<endl; #endif }
void Controlled::setDescr | ( | void * | descr | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 387 of file Controlled.cc.
References _dTopo, _llen, _serverBuffer, _serverDescr, _serverToReceived, _setLocalLen(), _sTopo, _unitsize, ControlledLib::ControlledDescr::llen, and PaCO::PacoTopology_s::total.
{ std::cerr << "-- setDescr "<<endl; _serverDescr = (ControlledLib::ControlledDescr*) descr; // Descr already received if ( _serverBuffer == NULL) { // 1st time -> allocate memory & init //this->setEltSize(_descr->usz); BUG: usz can be different in client and server (32bit vs 64bit) unsigned long len = _serverDescr->llen*_unitsize; this->_setLocalLen(_serverDescr->llen); #ifdef DEBUG_INTERNAL fprintf(stderr, "-- setDescr: stopo: %ld\tdtopo: %ld\n",_sTopo.total, _dTopo.total); fprintf(stderr, " setDescr: local len: %ld\n", _serverDescr->llen); #endif _serverBuffer = (char*) malloc(len*_unitsize); #ifdef DEBUG_INTERNAL std::cerr << "-- serverMalloc: "<<(void*)_serverBuffer<<" - "<<_llen<<endl; #endif _serverToReceived = len; } }
void Controlled::setDestTopology | ( | PaCO::PacoTopology_t | topo | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 101 of file Controlled.cc.
References _cm, _config, _dTopo, _sTopo, DST_TOPOLOGY, and PaCO::PacoTopology_s::total.
Referenced by _setDestTopology().
void Controlled::setEltSize | ( | unsigned long | size | ) |
Definition at line 140 of file Controlled.cc.
References _config, _unitsize, and ELEMENT_SIZE.
{ #ifdef DEBUG_INTERNAL std::cerr << "-- setEltSize: " << size << std::endl; #endif _config |= ELEMENT_SIZE; _unitsize = size; }
void Controlled::setMaxLocalLen | ( | unsigned long | elt_nb | ) |
Definition at line 159 of file Controlled.cc.
References _config, _maxllen, and LOCAL_SIZE.
Referenced by readFromFile().
{ #ifdef DEBUG_INTERNAL std::cerr << "-- setMaxLocalNbElt: " << elt_nb << std::endl; #endif _config |= LOCAL_SIZE; _maxllen = elt_nb; }
void Controlled::setNodeRank | ( | long | Rank | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 125 of file Controlled.cc.
References _nodeRank.
{ #ifdef DEBUG_INTERNAL std::cerr << "-- setNodeRank: " << Rank << std::endl; #endif _nodeRank = Rank; }
void Controlled::setSourceTopology | ( | PaCO::PacoTopology_t | topo | ) | [virtual] |
Implements DistributionLibrary.
Definition at line 68 of file Controlled.cc.
References _cm, _config, _dTopo, _sTopo, SRC_TOPOLOGY, and PaCO::PacoTopology_s::total.
Referenced by _setSourceTopology().
char* Controlled::_clientBuffer [private] |
Definition at line 31 of file Controlled.h.
Referenced by Controlled(), getClientData(), and setDataPtr().
Definition at line 32 of file Controlled.h.
Referenced by Controlled(), getClientData(), and getDescr().
CommMatrix* Controlled::_cm [private] |
Definition at line 34 of file Controlled.h.
Referenced by computePiecesToSend(), Controlled(), getClientData(), readFromFile(), setDestTopology(), setSourceTopology(), and ~Controlled().
unsigned Controlled::_config [private] |
Definition at line 21 of file Controlled.h.
Referenced by computePiecesToSend(), Controlled(), setDestTopology(), setEltSize(), setMaxLocalLen(), and setSourceTopology().
PaCO::PacoTopology_t Controlled::_dTopo [private] |
Definition at line 24 of file Controlled.h.
Referenced by Controlled(), getDestTopology(), setDescr(), setDestTopology(), and setSourceTopology().
unsigned Controlled::_llen [private] |
Definition at line 41 of file Controlled.h.
Referenced by _setLocalLen(), getServerData(), and setDescr().
unsigned Controlled::_maxllen [private] |
Definition at line 37 of file Controlled.h.
Referenced by Controlled(), getMaxLen(), readFromFile(), and setMaxLocalLen().
unsigned Controlled::_nodeRank [private] |
Definition at line 26 of file Controlled.h.
Referenced by computePiecesToSend(), Controlled(), getClientData(), getNodeRank(), and setNodeRank().
CommMatrix* Controlled::_remaining_cm [private] |
Definition at line 35 of file Controlled.h.
Referenced by clientFree(), Controlled(), and getClientData().
char* Controlled::_serverBuffer [private] |
Definition at line 43 of file Controlled.h.
Referenced by Controlled(), getServerData(), insertData(), serverFree(), and setDescr().
Definition at line 45 of file Controlled.h.
Referenced by Controlled(), and setDescr().
unsigned long Controlled::_serverToReceived [private] |
Definition at line 42 of file Controlled.h.
Referenced by insertData(), and setDescr().
PaCO::PacoTopology_t Controlled::_sTopo [private] |
Definition at line 23 of file Controlled.h.
Referenced by Controlled(), getSourceTopology(), setDescr(), setDestTopology(), and setSourceTopology().
unsigned Controlled::_unitsize [private] |
Definition at line 27 of file Controlled.h.
Referenced by computePiecesToSend(), getClientData(), insertData(), setDescr(), and setEltSize().