PaCO++  0.05
paco_comScheduling_libgraph Class Reference

#include <paco_libgraph_comScheduling.h>

Inheritance diagram for paco_comScheduling_libgraph:
Collaboration diagram for paco_comScheduling_libgraph:

List of all members.

Public Member Functions

virtual void clearAllSchedules ()
virtual void clearScheduleId (long id) throw (InvalidArgument)
paco_comSchedulecomputeScheduling (unsigned rank, PaCO::PacoTopology_t *srctopo, PaCO::PacoTopology_t *dsttopo, unsigned **com_matrix, void **info_vector[])
virtual void displayStatus ()
unsigned int get_beta ()
unsigned int get_k ()
paco_comSchedulegetSchedule (long id)
 paco_comScheduling_libgraph ()
virtual void propageComMatrix (PaCO_operation *op, unsigned **comMatrix)
void set_beta (unsigned int beta)
void set_k (unsigned int k)
virtual void setSchedule (long id, paco_comSchedule *cs)
virtual ~paco_comScheduling_libgraph ()

Protected Types

typedef map< long,
paco_comSchedule * > 
_schedule_info_map_t

Protected Member Functions

virtual void initializeBigraph (PaCO::PacoTopology_t *srctopo, PaCO::PacoTopology_t *dsttopo)

Protected Attributes

unsigned int _beta
node ** _client_nodes
PaCO::PacoTopology_t_client_topo
bigraph * _g
unsigned int _k
_schedule_info_map_t _schedule_info_map
node ** _server_nodes
PaCO::PacoTopology_t_server_topo

Detailed Description

Definition at line 62 of file paco_libgraph_comScheduling.h.


Member Typedef Documentation

typedef map<long, paco_comSchedule*> paco_comScheduling::_schedule_info_map_t [protected, inherited]

Definition at line 56 of file CommunicationScheduling.h.


Constructor & Destructor Documentation

Definition at line 15 of file paco_libgraph_comScheduling.cc.

References _client_nodes, _g, and _server_nodes.

{
  if (_g) delete _g;
  if (_client_nodes) delete[] _client_nodes;
  if (_server_nodes) delete[] _server_nodes;
}

Member Function Documentation

void paco_comScheduling::clearAllSchedules ( ) [virtual, inherited]

Definition at line 44 of file CommunicationScheduling.cc.

References paco_comScheduling::_schedule_info_map.

Referenced by PaCO_operation::clearAllScheduleMemory(), set_beta(), and set_k().

{
#ifdef DEBUG_INTERNAL
  std::cerr <<"[INFO] clearing all schedule memories\n";
#endif
  for(_schedule_info_map_t::iterator it = _schedule_info_map.begin(); it!= _schedule_info_map.end(); it++)
    {
      delete it->second;
    }
  _schedule_info_map.clear();
}
void paco_comScheduling::clearScheduleId ( long  id) throw (InvalidArgument) [virtual, inherited]

Definition at line 26 of file CommunicationScheduling.cc.

{
  if (id<0)
    throw new InvalidArgument("clearScheduleMemeoryId expects an id >0");
  
#ifdef DEBUG_INTERNAL
  std::cerr <<"[INFO] clearing schedule memory Id "<<id<<endl;
#endif
  
  _schedule_info_map_t::iterator it = _schedule_info_map.find(id);
  if (it != _schedule_info_map.end())
    {
      delete _schedule_info_map[id];
      _schedule_info_map.erase(it);
    }
}
paco_comSchedule * paco_comScheduling_libgraph::computeScheduling ( unsigned  rank,
PaCO::PacoTopology_t srctopo,
PaCO::PacoTopology_t dsttopo,
unsigned **  com_matrix,
void **  info_vector[] 
) [virtual]

Implements paco_comScheduling.

Definition at line 92 of file paco_libgraph_comScheduling.cc.

References _client_nodes, _g, _server_nodes, paco_comSchedule_libgraph::build_idx(), paco_comSchedule_libgraph::get_kbps(), initializeBigraph(), and PaCO::PacoTopology_s::total.

{
  // 1. setup a new bigraph
  initializeBigraph(srctopo, dsttopo);

  // 2. fill the bigraph
  for (unsigned i = 0; i < srctopo->total; i++)
    {
      if (i!= rank)
   for (unsigned j = 0; j < dsttopo->total; j++)
     {
       _g->add_edge(_client_nodes[i], _server_nodes[j], com_matrix[i][j]);
#ifdef INFO_INTERNAL
       std::cerr << "edge: "<<_client_nodes[i] << " -> "<<_server_nodes[j] << " : "<< com_matrix[i][j]<<endl;
#endif
     }
      else
   for (unsigned j = 0; j < dsttopo->total; j++)
     {
       _g->add_edge(_client_nodes[i],_server_nodes[j], com_matrix[i][j], info_vector[j]);
#ifdef INFO_INTERNAL
       std::cerr << "edge: "<<_client_nodes[i] << " -> "<<_server_nodes[j] << " : "<< com_matrix[i][j]<<" ("<<info_vector[j]<<")\n";
#endif
     }
    }
 
  _g->remove_empty_nodes();
  
  paco_comSchedule_libgraph* schedule_info = new paco_comSchedule_libgraph(new kbps_approximation(_g));

  schedule_info->get_kbps()->compute_poly2();
  schedule_info->get_kbps()->serialize();
  schedule_info->build_idx();
  
  return schedule_info;
}

Here is the call graph for this function:

void paco_comScheduling::displayStatus ( ) [virtual, inherited]

Definition at line 44 of file paco_libgraph_comScheduling.cc.

References _beta.

{
  return _beta;
}

Definition at line 50 of file paco_libgraph_comScheduling.cc.

References _k.

{
  return _k;
}

return NULL if schedule id is unknown

Definition at line 8 of file CommunicationScheduling.cc.

References paco_comScheduling::_schedule_info_map.

{
  _schedule_info_map_t::iterator it = _schedule_info_map.find(id);
  if (it != _schedule_info_map.end())
    {
   return it->second;
      }
    else
      return NULL;
  }
void paco_comScheduling_libgraph::initializeBigraph ( PaCO::PacoTopology_t srctopo,
PaCO::PacoTopology_t dsttopo 
) [protected, virtual]

create and initialize a graph

Definition at line 56 of file paco_libgraph_comScheduling.cc.

References _beta, _client_nodes, _g, _k, _server_nodes, and PaCO::PacoTopology_s::total.

Referenced by computeScheduling().

{
#ifdef INFO_INTERNAL
  std::cerr<<__FUNCTION__<<" with beta:"<<_libgraph_beta<<" k:"<<_libgraph_k<<endl;
#endif

  // Removing old instances
  if (_g) delete _g;
  if (_client_nodes) delete[] _client_nodes;
  if (_server_nodes) delete[] _server_nodes;

  // Creating new instances
  _g = new bigraph();

  // Setting up the parametter of the graph
  if ((_beta==0)||(_k==0)) {
    std::cerr<< "ERROR: libgraph not initialized -- Specifiy k & beta !!"<<endl;
  }
    
  _g->set_beta(_beta);
  _g->set_k(_k);

  _client_nodes = new node*[srctopo->total];
  _server_nodes = new node*[dsttopo->total];
        
  for (unsigned i = 0; i < srctopo->total; i++)
    {
      _client_nodes[i] = _g->add_node(true);
    }
  for (unsigned i = 0; i < dsttopo->total; i++)
    {
      _server_nodes[i] = _g->add_node(false);
    }
}
void paco_comScheduling::propageComMatrix ( PaCO_operation op,
unsigned **  comMatrix 
) [virtual, inherited]

Reimplemented in paco_comScheduling_direct.

Definition at line 58 of file CommunicationScheduling.cc.

References PaCO_operation::my_com, PaCO_operation::mytopo, paco_com::paco_bcast(), PaCO_operation::serveur_topo_aller, and PaCO::PacoTopology_s::total.

{
  std::cerr << "[Debug] doing all-2-all communication, #phases: " << op->mytopo.total << endl;
  int size_temp_vector = sizeof(unsigned) * op->serveur_topo_aller.total;;
  for (unsigned i = 0; i < op->mytopo.total; i++)
    {
      std::cerr << "[Debug] all-2-all phase: "<<i<<" sz:"<<size_temp_vector<< endl;
      op->my_com->paco_bcast((void*) comMatrix[i], size_temp_vector, i);
    }
}

Here is the call graph for this function:

void paco_comScheduling_libgraph::set_beta ( unsigned int  beta)

Definition at line 24 of file paco_libgraph_comScheduling.cc.

References _beta, and paco_comScheduling::clearAllSchedules().

{
  if (_beta == beta) return;

  _beta = beta;
  // beta change -> clear all schedule memory
  clearAllSchedules();
}

Here is the call graph for this function:

void paco_comScheduling_libgraph::set_k ( unsigned int  k)

Definition at line 34 of file paco_libgraph_comScheduling.cc.

References _k, and paco_comScheduling::clearAllSchedules().

{
  if (_k == k) return;

  _k = k;
  // k change -> clear all schedule memory
  clearAllSchedules();
}

Here is the call graph for this function:

void paco_comScheduling::setSchedule ( long  id,
paco_comSchedule cs 
) [virtual, inherited]

Definition at line 20 of file CommunicationScheduling.cc.

{
  //  _schedule_info_map[id] = cs;
}

Member Data Documentation

unsigned int paco_comScheduling_libgraph::_k [protected]

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