PaCO++  0.05
BasicBC Class Reference

#include <BasicBC.h>

Inheritance diagram for BasicBC:
Inheritance graph
Collaboration diagram for BasicBC:
Collaboration graph

Classes

struct  info_t
 

Public Member Functions

 BasicBC ()
 
virtual void clientFree ()
 
virtual PieceToSendcomputePiecesToSend (unsigned &size)
 
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 ()
 
virtual long getNodeRank ()
 
virtual void * getServerData (long &length)
 
virtual PaCO::PacoTopology_t getSourceTopology ()
 
virtual bool insertData (void *rcptBuf, unsigned long element_nb)
 
virtual void serverFree ()
 
void setBlocSize (unsigned long bsz)
 
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)
 
virtual void setNodeRank (long Rank)
 
virtual void setSourceTopology (PaCO::PacoTopology_t topo)
 
void setTotalNbElt (unsigned long elt_nb)
 
virtual ~BasicBC ()
 

Private Types

typedef map< long, info_list_t ** > info_list_map_t
 
typedef list< info_t * > info_list_t
 

Private Member Functions

void allocate_new_info_list ()
 
void clear_info_list ()
 
void internalFreeComId (info_list_map_t::iterator &it)
 
void internalSetComId (long id)
 
void reset_info_list ()
 

Private Attributes

char * _clientBuffer
 
BasicBCLib::BasicBCDescr _clientDescr
 
unsigned _config
 
long _cur_id
 
unsigned _dbsz
 
unsigned _descr_ids_counter
 
bool _descr_to_be_cleaned
 
PaCO::PacoTopology_t _dTopo
 
unsigned _glen
 
info_list_map_t _info_list_map
 
info_list_t ** _infolists
 
unsigned _llen
 
unsigned _lstart
 
unsigned _nodeRank
 
BasicBC_param_t _param
 
unsigned _sbsz
 
char * _serverBuffer
 
BasicBCLib::BasicBCDescr_serverDescr
 
unsigned long _serverToReceived
 
PaCO::PacoTopology_t _sTopo
 

Detailed Description

Definition at line 36 of file BasicBC.h.

Member Typedef Documentation

◆ info_list_map_t

typedef map<long, info_list_t**> BasicBC::info_list_map_t
private

Definition at line 71 of file BasicBC.h.

◆ info_list_t

typedef list<info_t*> BasicBC::info_list_t
private

Definition at line 69 of file BasicBC.h.

Constructor & Destructor Documentation

◆ BasicBC()

BasicBC::BasicBC ( )

Definition at line 117 of file BasicBC.cc.

References _clientBuffer, _config, _descr_to_be_cleaned, _dTopo, _nodeRank, _param, _serverBuffer, _serverDescr, _sTopo, BASICBC_BLOC, internalSetComId(), PaCO::PacoTopology_s::total, and BasicBC_param_t::type.

118 {
119  // Common
120  _config = 0;
121 
122  // By default 1->1 :)
123  _sTopo.total=1;
124  _dTopo.total=1;
126  _nodeRank=0;
127 
128  // Client side
129  _clientBuffer=NULL;
131 
132  this->internalSetComId(-1); // set anonymous & init iterator, infolists & _cur_id
133 
134  // Server side
135  _serverDescr=NULL;
136  _serverBuffer=NULL;
137 }
PaCO::PacoTopology_t _dTopo
Definition: BasicBC.h:45
unsigned _nodeRank
Definition: BasicBC.h:48
BasicBC_param_t _param
Definition: BasicBC.h:47
char * _clientBuffer
Definition: BasicBC.h:78
bool _descr_to_be_cleaned
Definition: BasicBC.h:77
BasicBC_distri_type_t type
Definition: BasicBC.h:26
unsigned long total
Definition: PaCO++.idl:35
unsigned _config
Definition: BasicBC.h:42
PaCO::PacoTopology_t _sTopo
Definition: BasicBC.h:44
BasicBCLib::BasicBCDescr * _serverDescr
Definition: BasicBC.h:87
char * _serverBuffer
Definition: BasicBC.h:85
void internalSetComId(long id)
Definition: BasicBC.cc:666
Here is the call graph for this function:

◆ ~BasicBC()

BasicBC::~BasicBC ( )
virtual

Definition at line 139 of file BasicBC.cc.

References _info_list_map, and internalFreeComId().

140 {
141  for(info_list_map_t::iterator it=_info_list_map.begin(); it!=_info_list_map.end(); ++it)
142  this->internalFreeComId(it);
143  _info_list_map.clear();
144 }
info_list_map_t _info_list_map
Definition: BasicBC.h:72
void internalFreeComId(info_list_map_t::iterator &it)
Definition: BasicBC.cc:702
Here is the call graph for this function:

Member Function Documentation

◆ allocate_new_info_list()

void BasicBC::allocate_new_info_list ( )
private

Definition at line 754 of file BasicBC.cc.

References _dTopo, _infolists, and PaCO::PacoTopology_s::total.

Referenced by internalSetComId().

755 {
757  for(unsigned i=0;i<_dTopo.total;i++)
758  _infolists[i]=new info_list_t();
759 }
PaCO::PacoTopology_t _dTopo
Definition: BasicBC.h:45
info_list_t ** _infolists
Definition: BasicBC.h:75
unsigned long total
Definition: PaCO++.idl:35
list< info_t * > info_list_t
Definition: BasicBC.h:69

◆ clear_info_list()

void BasicBC::clear_info_list ( )
private

Definition at line 777 of file BasicBC.cc.

References _dTopo, _infolists, and PaCO::PacoTopology_s::total.

Referenced by clientFree().

778 {
779 #ifdef DEBUG_INTERNAL
780  std::cerr << "-- clear info list\n";
781 #endif
782  // for each destNode
783  for(unsigned i=0; i< _dTopo.total; i++) {
784  // for each element of the list
785  info_list_t *ilp = _infolists[i];
786  for(info_list_t::const_iterator ci=ilp->begin(); ci!=ilp->end(); ++ci)
787  delete (*ci);
788  _infolists[i] -> clear();
789  }
790 }
PaCO::PacoTopology_t _dTopo
Definition: BasicBC.h:45
info_list_t ** _infolists
Definition: BasicBC.h:75
unsigned long total
Definition: PaCO++.idl:35
list< info_t * > info_list_t
Definition: BasicBC.h:69

◆ clientFree()

void BasicBC::clientFree ( )
virtual

Implements DistributionLibrary.

Definition at line 558 of file BasicBC.cc.

References _cur_id, clear_info_list(), and reset_info_list().

559 {
560 
561 #ifdef DEBUG_INTERNAL
562  std::cerr << "-- clientFree\n";
563 #endif
564  if (_cur_id == -1) {
565  this->clear_info_list();
566  } else {
567  this->reset_info_list();
568  }
569 }
long _cur_id
Definition: BasicBC.h:74
void clear_info_list()
Definition: BasicBC.cc:777
void reset_info_list()
Definition: BasicBC.cc:762
Here is the call graph for this function:

◆ computePiecesToSend()

PieceToSend * BasicBC::computePiecesToSend ( unsigned &  size)
virtual

Implements DistributionLibrary.

Definition at line 265 of file BasicBC.cc.

References _dTopo, _glen, _infolists, _llen, _lstart, _nodeRank, _param, _sbsz, _sTopo, BASICBC_BLOC, BlocNumberOfElementProc(), blocSize(), computeBlocBounds(), PieceToSend::destNode, getProcRangeInf(), getProcRangeSup(), BasicBC::info_t::gstart, PieceToSend::id, BasicBC::info_t::lstart, BasicBC::info_t::msg_size, NumberOfBlocProc(), OwnerBloc(), BasicBC::info_t::sent_size, PieceToSend::size, PieceToSend::sourceNode, PaCO::PacoTopology_s::total, TotalNumberOfElementProc(), BasicBC_param_t::type, and BasicBC_param_t::unitsize.

266 {
267  /*
268  * store src/dst/sz/start
269  *
270  * where start is a local offset to apply to the vector
271  *
272  */
273 
274  PieceToSend * sched;
275  unsigned long golen = _glen*_param.unitsize;
276 
277  // We need to compute _lstart and _llen
278  _sbsz = blocSize( golen, _sTopo.total, _param);
280  _lstart = (_lstart < golen ? _lstart:golen);
282 
283 #ifdef DEBUG_INTERNAL
284  // std::cerr << "In computePiecesToSend-------------------- all in octet !\n";
285 
286  fprintf(stderr, "-- stopo: %ld\tdtopo: %ld\n", _sTopo.total, _dTopo.total);
287  fprintf(stderr, "-- golen: %ld\ttype: %d\tsd.start %d\tllen: %d\n", golen,
289 #endif
290 
291  if (_sTopo.total == _dTopo.total) {
292 #ifdef DEBUG_INTERNAL
293  fprintf(stderr, "-- easy: n<->n case !\n");
294 #endif
295  size_out = 1;
296  sched = new PieceToSend[1];
297  sched[0].sourceNode = _nodeRank; // my self :)
298  sched[0].destNode = _nodeRank; // the corresponding node
299  sched[0].size = _llen; // msg size
300 
301  info_t* inf = new info_t();
302 
303  inf->gstart = _lstart/_param.unitsize; // used start as id -> same at server side
304  inf->lstart = 0; // do not apply any offset to local ptr
305  inf->msg_size = _llen;
306  inf->sent_size = 0;
307 
308  // add inf to the list
309  _infolists[_nodeRank]->push_back(inf);
310  // sched points to the list
311  sched[0].id = (void*) _infolists[_nodeRank];
312 
313 #ifdef DEBUG_INTERNAL
314  fprintf(stderr, "-- %2d -> %2d : gstart:%2u lstart:%2u len:%2d\n",
315  sched[0].sourceNode, sched[0].destNode, inf->gstart, inf->lstart, inf->msg_size);
316 #endif
317 
318  } else {
319  if (_param.type == BASICBC_BLOC ) {
320  // that's a standard bloc redistribution
321 #ifdef DEBUG_INTERNAL
322  fprintf(stderr, "-- medium: n<->m bloc redistribution case !\n");
323 #endif
324 
325  unsigned long slow;
326  unsigned long shigh;
327  computeBlocBounds(&slow, &shigh, golen, _nodeRank, _sTopo.total, _sbsz, 0);
328 
329 #ifdef DEBUG_INTERNAL
330  std::cerr << "-- sbsz: "<<_sbsz<<" sbounds: "<<slow<<" - "<<shigh<<endl;
331 #endif
332 
333  unsigned dbsz = blocSize(golen, _dTopo.total, _param);
334 
335 #ifdef DEBUG_INTERNAL
336  std::cerr << "-- dbsz: "<<dbsz<<endl;
337 #endif
338 
339  unsigned fpid, lpid;
340  fpid = getProcRangeInf(slow, dbsz);
341  lpid = getProcRangeSup(shigh, dbsz);
342 
343 #ifdef DEBUG_INTERNAL
344  fprintf(stderr, "-- loop from %d to %d width dtotal: %ld\n", fpid, lpid, _dTopo.total);
345 #endif
346 
347  // for each dest bloc
348  size_out = lpid-fpid+1;
349  sched = new PieceToSend[size_out];
350  for(unsigned i=fpid; i <= lpid; i++) {
351  PieceToSend& s = sched[i-fpid];
352  s.sourceNode = _nodeRank;
353  s.destNode = i;
354 
355  info_t* inf = new info_t();
356 
357  unsigned tmp = i*dbsz;
358  unsigned tmp2;
359  tmp2 = ( slow >= tmp)?slow:tmp; // max : global offset in octet as ID
360  inf->gstart = tmp2 / _param.unitsize;
361  inf->lstart = tmp2 - _lstart;
362 
363  tmp += dbsz;
364  unsigned end = ( shigh <= tmp)?shigh:tmp; // min
365 
366  inf->msg_size = s.size = end - tmp2;
367  inf->sent_size = 0;
368 
369  // add inf to the list
370  _infolists[i-fpid]->push_back(inf);
371  // sched points to the list
372  s.id = (void*) _infolists[i-fpid];
373 
374 #ifdef DEBUG_INTERNAL
375  fprintf(stderr, "-- %2d -> %2d : gstart:%2u lstart:%2u len:%2d\n",
376  s.sourceNode, s.destNode, inf->gstart, inf->lstart, inf->msg_size);
377 #endif
378  }
379  } else {
380  // it is a bloccyclic distribution
381 
382 #ifdef DEBUG_INTERNAL
383  fprintf(stderr, "-- hard: n<->m bloccyclic redistribution case !\n");
384 #endif
385 
386  unsigned stbsz = _sbsz * _sTopo.total;
387  unsigned nbbloc = NumberOfBlocProc(golen, _sTopo.total, _sbsz, _nodeRank);
388 
389 #ifdef DEBUG_INTERNAL
390  std::cerr << "-- sbsz: "<<_sbsz<<" nbbloc: "<<nbbloc<<endl;
391 #endif
392 
393  // for each src bloc, find a dst node
394  // But only one struct for each dst -> pre-count
395 
396  // should be equal to the number of real dest !
397  size_out = 0;
398  unsigned *tmp_dnb = (unsigned*) calloc(_dTopo.total, sizeof(unsigned)); // zeroed array
399  PieceToSend **tmp_dor = (PieceToSend**) calloc(_dTopo.total, sizeof(PieceToSend*)); // zeroed array
400  for(unsigned b=0; b<nbbloc; b++) {
401  unsigned gb = b * _sTopo.total + _nodeRank; // global bloc id
402  unsigned drank = OwnerBloc(gb, _dTopo.total);
403  if (tmp_dnb[drank]++ == 0) // detect if it is the 1st time
404  size_out++;
405  }
406  // Allocating output
407  sched = new PieceToSend[size_out];
408  unsigned cur=0;
409  for(unsigned i=0; i<_dTopo.total; i++) {
410  sched[cur].sourceNode = _nodeRank;
411  sched[cur].destNode = i;
412  sched[cur].size = 0;
413  sched[cur].id = (void*) _infolists[i];
414  tmp_dor[i] = &sched[cur]; // an index if valid only if tmp_dnb[index]>0 !!!!
415  cur+= (tmp_dnb[i]>0?1:0); // increment order only if this dest is not zero
416  }
417 
418 #ifdef DEBUG_INTERNAL
419  cerr << "-- size_out: "<<size_out<<endl;
420 #endif
421 
422  for(unsigned b=0; b<nbbloc; b++) {
423  unsigned gb = b * _sTopo.total + _nodeRank; // global bloc id
424  unsigned drank = OwnerBloc(gb, _dTopo.total);
425 
426  PieceToSend* s = tmp_dor[drank];
427 
428  // Allocate new element
429  info_t* inf = new info_t();
430 
431  inf->gstart = ((stbsz*b) + (_nodeRank*_sbsz))/ _param.unitsize;
432  inf->lstart = b * _sbsz;
433  inf->msg_size = BlocNumberOfElementProc(golen, _nodeRank, _sTopo.total, _sbsz, b);
434  inf->sent_size = 0;
435 
436  // Accumulate msg length in PieceToSend
437  s->size += inf->msg_size;
438 
439  // insert it in the list
440  info_list_t* ilsp = (info_list_t*) s->id; // pointer to a list
441  ilsp->push_back(inf);
442 
443 
444 #ifdef DEBUG_INTERNAL
445  fprintf(stderr, "-- %2d -> %2d : gstart:%2u lstart:%2u len:%2d\n",
446  s->sourceNode, s->destNode, inf->gstart, inf->lstart, inf->msg_size);
447 #endif
448  }
449  }
450  }
451 
452 #ifdef DEBUG_INTERNAL
453  // std::cerr << "computePiecesToSend-------------------- done\n";
454 #endif
455 
456  return sched;
457 }
PaCO::PacoTopology_t _dTopo
Definition: BasicBC.h:45
unsigned _lstart
Definition: BasicBC.h:53
static unsigned TotalNumberOfElementProc(const unsigned glen, const unsigned rank, const unsigned nbprocs, const unsigned bsz)
Definition: BasicBC.cc:82
unsigned _glen
Definition: BasicBC.h:50
static unsigned OwnerBloc(const unsigned bid, const unsigned nbprocs)
Definition: BasicBC.cc:16
static unsigned blocSize(const unsigned glen, const unsigned nbprocs, const BasicBC_param_t &param)
Definition: BasicBC.cc:98
info_list_t ** _infolists
Definition: BasicBC.h:75
unsigned long unitsize
Definition: BasicBC.h:27
unsigned _nodeRank
Definition: BasicBC.h:48
static void computeBlocBounds(unsigned long *low, unsigned long *high, const unsigned glen, const unsigned rank, const unsigned nbprocs, const unsigned bsz, const unsigned pos)
Definition: BasicBC.cc:69
BasicBC_param_t _param
Definition: BasicBC.h:47
static unsigned NumberOfBlocProc(const unsigned glen, const unsigned nbprocs, const unsigned bsz, const unsigned rank)
Definition: BasicBC.cc:35
static unsigned BlocNumberOfElementProc(const unsigned glen, const unsigned rank, const unsigned nbprocs, const unsigned bsz, const unsigned pos)
Definition: BasicBC.cc:45
static unsigned getProcRangeInf(unsigned low, unsigned bsz)
Definition: BasicBC.cc:23
BasicBC_distri_type_t type
Definition: BasicBC.h:26
unsigned long total
Definition: PaCO++.idl:35
unsigned _llen
Definition: BasicBC.h:51
PaCO::PacoTopology_t _sTopo
Definition: BasicBC.h:44
list< info_t * > info_list_t
Definition: BasicBC.h:69
static unsigned getProcRangeSup(unsigned high, unsigned bsz)
Definition: BasicBC.cc:28
unsigned _sbsz
Definition: BasicBC.h:54
Here is the call graph for this function:

◆ freeComId()

bool BasicBC::freeComId ( long  id)
virtual

Reimplemented from DistributionLibrary.

Definition at line 726 of file BasicBC.cc.

References _cur_id, _info_list_map, and internalFreeComId().

727 {
728  if (id == -1) {
729 #ifdef DEBUG_INTERNAL
730  cerr << "freeComId: not allowed to free com id -1 (ignoring)\n";
731 #endif
732  return true;
733  }
734 
735  if (_cur_id == id) {
736 #ifdef DEBUG_INTERNAL
737  cerr << "freeComId: not allowed to free current com (ignoring)\n";
738 #endif
739  return true;
740  }
741 
742 #ifdef DEBUG_INTERNAL
743  cerr << "freeComid: communication id: "<<id<<endl;
744 #endif
745 
746  info_list_map_t::iterator it = _info_list_map.find(id);
747  this->internalFreeComId(it);
748  _info_list_map.erase(it);
749 
750  return true;
751 }
info_list_map_t _info_list_map
Definition: BasicBC.h:72
long _cur_id
Definition: BasicBC.h:74
void internalFreeComId(info_list_map_t::iterator &it)
Definition: BasicBC.cc:702
Here is the call graph for this function:

◆ getClientData()

void * BasicBC::getClientData ( void *  pid,
int  server_node,
long &  size,
long &  length,
bool &  end 
)
virtual

Implements DistributionLibrary.

Definition at line 469 of file BasicBC.cc.

References _clientBuffer, _clientDescr, _descr_to_be_cleaned, _param, DEBUG_INTERNAL2, BasicBC::info_t::gstart, BasicBCLib::BasicBCDescr::ids, BasicBC::info_t::lstart, BasicBC::info_t::sent_size, and BasicBC_param_t::unitsize.

470 {
471  info_list_t* ilsp = (info_list_t*) pid;
472 
473 #ifdef DEBUG_INTERNAL2
474  std::cerr << "-- getClientData : _clientBuffer=" << (void*) _clientBuffer << std::endl;
475  std::cerr << "-- getClientData : " << dnode << " " << remaining_size_octet << std::endl;
476 #endif
477 
478  if (_descr_to_be_cleaned) {
479  _descr_to_be_cleaned = false;
480  _clientDescr.ids.length(0);
481  }
482 
483  // look for 1st one not "empty"
484  long rst_data=0;
485  info_list_t::const_iterator ci;
486  for(ci=ilsp->begin(); ci!=ilsp->end(); ++ci) {
487  rst_data = (*ci)->msg_size - (*ci)->sent_size;
488  if (rst_data>0)
489  break;
490  }
491 
492  // No more element: return immediatly
493  if (ci == ilsp->end())
494  {
495 #ifdef DEBUG_INTERNAL2
496  std::cerr << "-- getClientData0 : no more block for this argument\n";
497 #endif
498  returned_length_element = 0;
499  end = true;
500  return NULL;
501  }
502  // No more data of this element but there are more
503  if (rst_data == 0)
504  {
505 #ifdef DEBUG_INTERNAL2
506  std::cerr << "-- getClientData0 : no more data for this bloc\n";
507 #endif
508  returned_length_element = 0;
509  end = false;
510  return NULL;
511  }
512  // *ci assumed ok here (else return above !!)
513  info_t* info = *ci;
514 
515  // More asked data as I can provide -> give all the data of this bloc
516  if (remaining_size_octet >= rst_data)
517  {
518  unsigned descr_len = _clientDescr.ids.length();
519  _clientDescr.ids.length(descr_len+1);
520  _clientDescr.ids[descr_len] = info->gstart+(info->sent_size/_param.unitsize);
521 
522  unsigned start = info->lstart+info->sent_size;
523  info->sent_size += rst_data;
524  returned_length_element = rst_data / _param.unitsize; // should divide;
525  remaining_size_octet -= rst_data;
526  end = (remaining_size_octet == 0);
527 
528 #ifdef DEBUG_INTERNAL2
529  std::cerr << "-- getClientData1 : gstart:"<<_clientDescr.ids[descr_len]<<" #element:"<<returned_length_element<<endl;
530 #endif
531 
532  return (void *)&_clientBuffer[start];
533  }
534  else
535  {
536  // I have more data than requested
537  unsigned descr_len = _clientDescr.ids.length();
538  _clientDescr.ids.length(descr_len+1);
539  _clientDescr.ids[descr_len] = info->gstart+(info->sent_size/_param.unitsize);
540 
541  unsigned start = info->lstart+info->sent_size;
542  returned_length_element = (remaining_size_octet+_param.unitsize-1)/_param.unitsize; // max
543  unsigned mlen = returned_length_element*_param.unitsize;
544  info->sent_size += mlen;
545  remaining_size_octet -= mlen;
546  end = true;
547 
548 
549 #ifdef DEBUG_INTERNAL2
550  std::cerr << "-- getClientData1 : gstart:"<<_clientDescr.ids[descr_len]<<" #element:"<<returned_length_element<<endl;
551 #endif
552 
553  return (void *)&_clientBuffer[start];
554  }
555 }
#define DEBUG_INTERNAL2
Definition: Controlled.cc:13
unsigned long unitsize
Definition: BasicBC.h:27
BasicBC_param_t _param
Definition: BasicBC.h:47
char * _clientBuffer
Definition: BasicBC.h:78
bool _descr_to_be_cleaned
Definition: BasicBC.h:77
BasicBCLib::BasicBCDescr _clientDescr
Definition: BasicBC.h:79
list< info_t * > info_list_t
Definition: BasicBC.h:69

◆ getDescr()

void * BasicBC::getDescr ( )
virtual

Implements DistributionLibrary.

Definition at line 572 of file BasicBC.cc.

References _clientDescr, _descr_to_be_cleaned, BasicBCLib::BasicBCDescr::bsz, BasicBCLib::BasicBCDescr::glen, and BasicBCLib::BasicBCDescr::ids.

573 {
574 #ifdef DEBUG_INTERNAL
575  std::cerr << "-- descr: glen: "<<_clientDescr.glen<<" #element: "<<_clientDescr.ids.length()<<" bsz: "<<_clientDescr.bsz;
576  for(unsigned i=0;i<_clientDescr.ids.length();i++) {
577  std::cerr<<" "<<_clientDescr.ids[i];
578  }
579  std::cerr<<std::endl;
580 #endif
581  _descr_to_be_cleaned = true;
582  return &_clientDescr;
583 }
bool _descr_to_be_cleaned
Definition: BasicBC.h:77
BasicBCLib::BasicBCDescr _clientDescr
Definition: BasicBC.h:79

◆ getDestTopology()

PaCO::PacoTopology_t BasicBC::getDestTopology ( )
virtual

Implements DistributionLibrary.

Definition at line 190 of file BasicBC.cc.

References _dTopo.

191 {
192  std::cerr << "****** Why is the method " << __FUNCTION__ << "called?\n";
193  abort();
194  return _dTopo;
195 }
PaCO::PacoTopology_t _dTopo
Definition: BasicBC.h:45

◆ getNodeRank()

long BasicBC::getNodeRank ( )
virtual

Implements DistributionLibrary.

Definition at line 207 of file BasicBC.cc.

References _nodeRank.

208 {
209  return _nodeRank;
210 }
unsigned _nodeRank
Definition: BasicBC.h:48

◆ getServerData()

void * BasicBC::getServerData ( long &  length)
virtual

Implements DistributionLibrary.

Definition at line 616 of file BasicBC.cc.

References _llen, _param, _serverBuffer, and BasicBC_param_t::unitsize.

617 {
618  length= _llen / _param.unitsize;
619 #ifdef DEBUG_INTERNAL
620  std::cerr << "-- getServerData: ptr : "<<(void*)_serverBuffer<<" #element:"<<length<<std::endl;
621 #endif
622  return (void*) _serverBuffer;
623 }
unsigned long unitsize
Definition: BasicBC.h:27
BasicBC_param_t _param
Definition: BasicBC.h:47
unsigned _llen
Definition: BasicBC.h:51
char * _serverBuffer
Definition: BasicBC.h:85

◆ getSourceTopology()

PaCO::PacoTopology_t BasicBC::getSourceTopology ( )
virtual

Implements DistributionLibrary.

Definition at line 157 of file BasicBC.cc.

References _sTopo.

158 {
159  std::cerr << "****** Why is the method " << __FUNCTION__ << "called?\n";
160  abort();
161  return _sTopo;
162 }
PaCO::PacoTopology_t _sTopo
Definition: BasicBC.h:44

◆ insertData()

bool BasicBC::insertData ( void *  rcptBuf,
unsigned long  element_nb 
)
virtual

Implements DistributionLibrary.

Definition at line 586 of file BasicBC.cc.

References _dbsz, _descr_ids_counter, _dTopo, _param, _serverBuffer, _serverDescr, _serverToReceived, BASICBC_BLOC, BasicBCLib::BasicBCDescr::ids, PaCO::PacoTopology_s::total, BasicBC_param_t::type, and BasicBC_param_t::unitsize.

587 {
588  // We are receiving one bloc
589  unsigned gstart = _serverDescr->ids[_descr_ids_counter++]; // in octet !!!
590  unsigned lstart;
591  unsigned llen = element_nb*_param.unitsize;
592 
593  // Need to compute lstart :(
594  if (_param.type == BASICBC_BLOC ) {
595  lstart = (gstart*_param.unitsize)/ _dbsz; // bloc number
596  lstart = (gstart*_param.unitsize) - (lstart*_dbsz);
597  } else {
598  lstart = (gstart*_param.unitsize)/ _dbsz; // bloc number
599  lstart /= _dTopo.total; // local number
600  }
601 
602  char* rptr = &_serverBuffer[lstart];
603 #ifdef DEBUG_INTERNAL
604  std::cerr << " gstart: "<< gstart<<" lstart: "<<lstart<<" #element " << element_nb<<" llen: "<<llen<<std::endl;
605 #endif
606  memcpy(rptr, rcptBuf, llen);
607 
608  _serverToReceived -= llen;
609 #ifdef DEBUG_INTERNAL
610  std::cerr << " #missing data"<<_serverToReceived<<std::endl;
611 #endif
612  return (_serverToReceived == 0);
613 }
unsigned long _serverToReceived
Definition: BasicBC.h:83
PaCO::PacoTopology_t _dTopo
Definition: BasicBC.h:45
unsigned long unitsize
Definition: BasicBC.h:27
BasicBC_param_t _param
Definition: BasicBC.h:47
BasicBC_distri_type_t type
Definition: BasicBC.h:26
unsigned long total
Definition: PaCO++.idl:35
unsigned _dbsz
Definition: BasicBC.h:55
BasicBCLib::BasicBCDescr * _serverDescr
Definition: BasicBC.h:87
char * _serverBuffer
Definition: BasicBC.h:85
unsigned _descr_ids_counter
Definition: BasicBC.h:84

◆ internalFreeComId()

void BasicBC::internalFreeComId ( info_list_map_t::iterator &  it)
private

Definition at line 702 of file BasicBC.cc.

References _dTopo, _info_list_map, and PaCO::PacoTopology_s::total.

Referenced by freeComId(), setDestTopology(), and ~BasicBC().

703 {
704  if (it == _info_list_map.end() ) {
705 #ifdef DEBUG_INTERNAL
706  cerr << "freeComid: communication id not found (ignoring)\n";
707 #endif
708  } else {
709 #ifdef DEBUG_INTERNAL
710  cerr << "freeComid: freeing communication "<<endl;
711 #endif
712  info_list_t** info = it->second;
713  // for each destNode
714  for(unsigned i=0; i< _dTopo.total; i++) {
715  // for each element of the list
716  info_list_t *ilp = info[i];
717  for(info_list_t::const_iterator ci=ilp->begin(); ci!=ilp->end(); ++ci)
718  delete (*ci);
719  info[i] -> clear();
720  delete info[i];
721  }
722  }
723 }
PaCO::PacoTopology_t _dTopo
Definition: BasicBC.h:45
info_list_map_t _info_list_map
Definition: BasicBC.h:72
unsigned long total
Definition: PaCO++.idl:35
list< info_t * > info_list_t
Definition: BasicBC.h:69

◆ internalSetComId()

void BasicBC::internalSetComId ( long  id)
private

Definition at line 666 of file BasicBC.cc.

References _cur_id, _info_list_map, _infolists, and allocate_new_info_list().

Referenced by BasicBC(), setComId(), and setDestTopology().

667 {
668  info_list_map_t::iterator it = _info_list_map.find(id);
669 
670  if (it == _info_list_map.end() ) {
671 #ifdef DEBUG_INTERNAL
672  cerr << "setComiI: set 1st time communication id "<<id<<endl;
673 #endif
674  // we must allocate a new one
675  this->allocate_new_info_list();
676 #ifdef DEBUG_INTERNAL
677  cerr << "setComId: allocating a new _infolists: "<<_infolists<<endl;
678 #endif
680  } else {
681 #ifdef DEBUG_INTERNAL
682  cerr << "setComId: set (not 1st time) communication id "<<id<<endl;
683 #endif
684  _infolists = it->second;
685  }
686 
687  _cur_id = id;
688 }
info_list_map_t _info_list_map
Definition: BasicBC.h:72
long _cur_id
Definition: BasicBC.h:74
info_list_t ** _infolists
Definition: BasicBC.h:75
void allocate_new_info_list()
Definition: BasicBC.cc:754
Here is the call graph for this function:

◆ reset_info_list()

void BasicBC::reset_info_list ( )
private

Definition at line 762 of file BasicBC.cc.

References _dTopo, _infolists, and PaCO::PacoTopology_s::total.

Referenced by clientFree().

763 {
764 #ifdef DEBUG_INTERNAL
765  std::cerr << "-- reset info list\n";
766 #endif
767  // for each destNode
768  for(unsigned i=0; i< _dTopo.total; i++) {
769  // for each element of the list
770  info_list_t *ilp = _infolists[i];
771  for(info_list_t::const_iterator ci=ilp->begin(); ci!=ilp->end(); ++ci)
772  (*ci)->sent_size = 0;
773  }
774 }
PaCO::PacoTopology_t _dTopo
Definition: BasicBC.h:45
info_list_t ** _infolists
Definition: BasicBC.h:75
unsigned long total
Definition: PaCO++.idl:35
list< info_t * > info_list_t
Definition: BasicBC.h:69

◆ serverFree()

void BasicBC::serverFree ( )
virtual

Implements DistributionLibrary.

Definition at line 656 of file BasicBC.cc.

References _serverBuffer.

657 {
658 #ifdef DEBUG_INTERNAL
659  std::cerr << "-- serverFree: "<<(void*)_serverBuffer<<endl;
660 #endif
661  free(_serverBuffer);
662  _serverBuffer=NULL; // the orb (or the user) need to free the memory!
663 }
char * _serverBuffer
Definition: BasicBC.h:85

◆ setBlocSize()

void BasicBC::setBlocSize ( unsigned long  bsz)

Definition at line 213 of file BasicBC.cc.

References _clientDescr, _config, _param, BASICBC_BLOC, BASICBC_BLOCCYCLIC, BASICBC_CYCLIC, BasicBC_param_t::blocsize, BasicBCLib::BasicBCDescr::bsz, DISTRIBUTION_TYPE, and BasicBC_param_t::type.

Referenced by setDescr().

214 {
215 #ifdef DEBUG_INTERNAL
216  std::cerr << "-- setBlocSize: " << size << std::endl;
217 #endif
219  switch(size) {
220  case 0:
221 #ifdef DEBUG_INTERNAL
222  cout << "Selecting a BLOC distribution\n";
223 #endif
225  _clientDescr.bsz = 0;
226  break;
227  case 1:
228 #ifdef DEBUG_INTERNAL
229  cout << "Selecting a CYCLIC distribution\n";
230 #endif
232  _clientDescr.bsz = 1;
233  break;
234  default:
235 #ifdef DEBUG_INTERNAL
236  cout << "Selecting a BLOCCYCLIC with bsz= " << size << " \n";
237 #endif
239  _clientDescr.bsz = _param.blocsize = size;
240  }
241 }
unsigned long blocsize
Definition: BasicBC.h:28
#define DISTRIBUTION_TYPE
Definition: BasicBC.cc:8
BasicBC_param_t _param
Definition: BasicBC.h:47
BasicBC_distri_type_t type
Definition: BasicBC.h:26
unsigned _config
Definition: BasicBC.h:42
BasicBCLib::BasicBCDescr _clientDescr
Definition: BasicBC.h:79

◆ setComId()

bool BasicBC::setComId ( long  id)
virtual

Reimplemented from DistributionLibrary.

Definition at line 691 of file BasicBC.cc.

References _cur_id, and internalSetComId().

692 {
693  if (_cur_id == id) return true; // already initialized
694 
695  this->internalSetComId(id);
696 
697  return true;
698 }
long _cur_id
Definition: BasicBC.h:74
void internalSetComId(long id)
Definition: BasicBC.cc:666
Here is the call graph for this function:

◆ setCommunicator()

virtual void BasicBC::setCommunicator ( void *  group)
inlinevirtual

Implements DistributionLibrary.

Definition at line 103 of file BasicBC.h.

103 {}

◆ setDataPtr()

void BasicBC::setDataPtr ( void *  dataPtr)
virtual

Implements DistributionLibrary.

Definition at line 460 of file BasicBC.cc.

References _clientBuffer.

461 {
462  _clientBuffer = (char *) dataPtr;
463 #ifdef DEBUG_INTERNAL
464  cerr << "-- _clientBuffer set to "<<dataPtr<<endl;
465 #endif
466 }
char * _clientBuffer
Definition: BasicBC.h:78

◆ setDescr()

void BasicBC::setDescr ( void *  descr)
virtual

Implements DistributionLibrary.

Definition at line 626 of file BasicBC.cc.

References _dbsz, _descr_ids_counter, _dTopo, _llen, _nodeRank, _param, _serverBuffer, _serverDescr, _serverToReceived, _sTopo, blocSize(), BasicBCLib::BasicBCDescr::bsz, BasicBCLib::BasicBCDescr::glen, setBlocSize(), setTotalNbElt(), PaCO::PacoTopology_s::total, TotalNumberOfElementProc(), and BasicBC_param_t::unitsize.

627 {
630 
631  // Descr already received
632 
633  if ( _serverBuffer == NULL)
634  {
635  // 1st time -> allocate memory & init
636  //this->setEltSize(_descr->usz); BUG: usz can be different in client and server (32bit vs 64bit)
637  unsigned long golen = _serverDescr->glen*_param.unitsize;
639  this->setBlocSize(_serverDescr->bsz);
640  _dbsz = blocSize( golen, _dTopo.total, _param);
642 
643 #ifdef DEBUG_INTERNAL
644  fprintf(stderr, "-- setDescr: stopo: %ld\tdtopo: %ld\n",_sTopo.total, _dTopo.total);
645  fprintf(stderr, " setDescr: golen: %ld\tllen %d\tbsz:%ld\n", _serverDescr->glen, _llen, _serverDescr->bsz);
646 #endif
647  _serverBuffer = (char*) malloc(_llen);
648 #ifdef DEBUG_INTERNAL
649  std::cerr << "-- serverMalloc: "<<(void*)_serverBuffer<<" - "<<_llen<<endl;
650 #endif
652  }
653 }
unsigned long _serverToReceived
Definition: BasicBC.h:83
PaCO::PacoTopology_t _dTopo
Definition: BasicBC.h:45
static unsigned TotalNumberOfElementProc(const unsigned glen, const unsigned rank, const unsigned nbprocs, const unsigned bsz)
Definition: BasicBC.cc:82
void setTotalNbElt(unsigned long elt_nb)
Definition: BasicBC.cc:254
static unsigned blocSize(const unsigned glen, const unsigned nbprocs, const BasicBC_param_t &param)
Definition: BasicBC.cc:98
unsigned long unitsize
Definition: BasicBC.h:27
unsigned _nodeRank
Definition: BasicBC.h:48
BasicBC_param_t _param
Definition: BasicBC.h:47
void setBlocSize(unsigned long bsz)
Definition: BasicBC.cc:213
unsigned long total
Definition: PaCO++.idl:35
unsigned _llen
Definition: BasicBC.h:51
PaCO::PacoTopology_t _sTopo
Definition: BasicBC.h:44
unsigned _dbsz
Definition: BasicBC.h:55
BasicBCLib::BasicBCDescr * _serverDescr
Definition: BasicBC.h:87
char * _serverBuffer
Definition: BasicBC.h:85
unsigned _descr_ids_counter
Definition: BasicBC.h:84
Here is the call graph for this function:

◆ setDestTopology()

void BasicBC::setDestTopology ( PaCO::PacoTopology_t  topo)
virtual

Implements DistributionLibrary.

Definition at line 165 of file BasicBC.cc.

References _config, _cur_id, _dTopo, _info_list_map, DST_TOPOLOGY, internalFreeComId(), internalSetComId(), and PaCO::PacoTopology_s::total.

166 {
167 #ifdef DEBUG_INTERNAL
168  std::cerr << "-- setDestTopology: " << topo.total << std::endl;
169 #endif
171 
172  if ( _dTopo.total == topo.total ) return ; // Nothing change !!!!
173 
174  // Delete old entries wrt to old state
175  info_list_map_t::iterator it = _info_list_map.find(_cur_id);
176  this->internalFreeComId(it);
177  _info_list_map.erase(it);
178 
179  // Change the state of the object
180  _dTopo = topo;
181 
182  // Set new entries
183  this->internalSetComId(_cur_id);
184 
185  // BUG: MUST ALSO DELETE ALL ENTRIES IN _info_list_map
186 
187 }
PaCO::PacoTopology_t _dTopo
Definition: BasicBC.h:45
info_list_map_t _info_list_map
Definition: BasicBC.h:72
long _cur_id
Definition: BasicBC.h:74
unsigned long total
Definition: PaCO++.idl:35
void internalFreeComId(info_list_map_t::iterator &it)
Definition: BasicBC.cc:702
#define DST_TOPOLOGY
Definition: BasicBC.cc:5
unsigned _config
Definition: BasicBC.h:42
void internalSetComId(long id)
Definition: BasicBC.cc:666
Here is the call graph for this function:

◆ setEltSize()

void BasicBC::setEltSize ( unsigned long  size)

Definition at line 244 of file BasicBC.cc.

References _config, _param, ELEMENT_SIZE, and BasicBC_param_t::unitsize.

245 {
246 #ifdef DEBUG_INTERNAL
247  std::cerr << "-- setEltSize: " << size << std::endl;
248 #endif
250  _param.unitsize = size;
251 }
#define ELEMENT_SIZE
Definition: BasicBC.cc:6
unsigned long unitsize
Definition: BasicBC.h:27
BasicBC_param_t _param
Definition: BasicBC.h:47
unsigned _config
Definition: BasicBC.h:42

◆ setNodeRank()

void BasicBC::setNodeRank ( long  Rank)
virtual

Implements DistributionLibrary.

Definition at line 198 of file BasicBC.cc.

References _nodeRank.

199 {
200 #ifdef DEBUG_INTERNAL
201  std::cerr << "-- setNodeRank: " << Rank << std::endl;
202 #endif
203  _nodeRank = Rank;
204 }
unsigned _nodeRank
Definition: BasicBC.h:48

◆ setSourceTopology()

void BasicBC::setSourceTopology ( PaCO::PacoTopology_t  topo)
virtual

Implements DistributionLibrary.

Definition at line 147 of file BasicBC.cc.

References _config, _sTopo, SRC_TOPOLOGY, and PaCO::PacoTopology_s::total.

148 {
149 #ifdef DEBUG_INTERNAL
150  std::cerr << "-- setSourceTopology: " << topo.total << std::endl;
151 #endif
153  _sTopo = topo;
154 }
unsigned long total
Definition: PaCO++.idl:35
unsigned _config
Definition: BasicBC.h:42
PaCO::PacoTopology_t _sTopo
Definition: BasicBC.h:44
#define SRC_TOPOLOGY
Definition: BasicBC.cc:4

◆ setTotalNbElt()

void BasicBC::setTotalNbElt ( unsigned long  elt_nb)

Definition at line 254 of file BasicBC.cc.

References _clientDescr, _config, _glen, BasicBCLib::BasicBCDescr::glen, and TOTAL_SIZE.

Referenced by setDescr().

255 {
256 #ifdef DEBUG_INTERNAL
257  std::cerr << "-- setTotalNbElt: " << elt_nb << std::endl;
258 #endif
259  _config |= TOTAL_SIZE;
260  _clientDescr.glen = _glen = elt_nb;
261 }
unsigned _glen
Definition: BasicBC.h:50
#define TOTAL_SIZE
Definition: BasicBC.cc:7
unsigned _config
Definition: BasicBC.h:42
BasicBCLib::BasicBCDescr _clientDescr
Definition: BasicBC.h:79

Member Data Documentation

◆ _clientBuffer

char* BasicBC::_clientBuffer
private

Definition at line 78 of file BasicBC.h.

Referenced by BasicBC(), getClientData(), and setDataPtr().

◆ _clientDescr

BasicBCLib::BasicBCDescr BasicBC::_clientDescr
private

Definition at line 79 of file BasicBC.h.

Referenced by getClientData(), getDescr(), setBlocSize(), and setTotalNbElt().

◆ _config

unsigned BasicBC::_config
private

◆ _cur_id

long BasicBC::_cur_id
private

Definition at line 74 of file BasicBC.h.

Referenced by clientFree(), freeComId(), internalSetComId(), setComId(), and setDestTopology().

◆ _dbsz

unsigned BasicBC::_dbsz
private

Definition at line 55 of file BasicBC.h.

Referenced by insertData(), and setDescr().

◆ _descr_ids_counter

unsigned BasicBC::_descr_ids_counter
private

Definition at line 84 of file BasicBC.h.

Referenced by insertData(), and setDescr().

◆ _descr_to_be_cleaned

bool BasicBC::_descr_to_be_cleaned
private

Definition at line 77 of file BasicBC.h.

Referenced by BasicBC(), getClientData(), and getDescr().

◆ _dTopo

◆ _glen

unsigned BasicBC::_glen
private

Definition at line 50 of file BasicBC.h.

Referenced by computePiecesToSend(), and setTotalNbElt().

◆ _info_list_map

info_list_map_t BasicBC::_info_list_map
private

Definition at line 72 of file BasicBC.h.

Referenced by freeComId(), internalFreeComId(), internalSetComId(), setDestTopology(), and ~BasicBC().

◆ _infolists

info_list_t** BasicBC::_infolists
private

◆ _llen

unsigned BasicBC::_llen
private

Definition at line 51 of file BasicBC.h.

Referenced by computePiecesToSend(), getServerData(), and setDescr().

◆ _lstart

unsigned BasicBC::_lstart
private

Definition at line 53 of file BasicBC.h.

Referenced by computePiecesToSend().

◆ _nodeRank

unsigned BasicBC::_nodeRank
private

Definition at line 48 of file BasicBC.h.

Referenced by BasicBC(), computePiecesToSend(), getNodeRank(), setDescr(), and setNodeRank().

◆ _param

BasicBC_param_t BasicBC::_param
private

◆ _sbsz

unsigned BasicBC::_sbsz
private

Definition at line 54 of file BasicBC.h.

Referenced by computePiecesToSend().

◆ _serverBuffer

char* BasicBC::_serverBuffer
private

Definition at line 85 of file BasicBC.h.

Referenced by BasicBC(), getServerData(), insertData(), serverFree(), and setDescr().

◆ _serverDescr

BasicBCLib::BasicBCDescr* BasicBC::_serverDescr
private

Definition at line 87 of file BasicBC.h.

Referenced by BasicBC(), insertData(), and setDescr().

◆ _serverToReceived

unsigned long BasicBC::_serverToReceived
private

Definition at line 83 of file BasicBC.h.

Referenced by insertData(), and setDescr().

◆ _sTopo

PaCO::PacoTopology_t BasicBC::_sTopo
private

The documentation for this class was generated from the following files: