PaCO++  0.05
PaCO++_operation.h
Go to the documentation of this file.
1 #ifndef PACO_PLUSPLUS_OPERATION_H_IS_DEFINED
2 #define PACO_PLUSPLUS_OPERATION_H_IS_DEFINED
3 
4 #ifdef PADICO
5 #include <Padico/Timing.h>
6 #endif
7 
8 #include "PaCO++_types.h"
9 
10 #include <string>
11 #include <map>
12 #include <iostream>
13 #include <vector>
14 
15 class paco_mutex;
16 class paco_condition;
17 class paco_com;
19 class paco_comScheduling;
20 
23 class paco_fabrique_com;
25 
26 #define PACO_WARN_DISTLIB
27 
28 // This class represent a context for a parallel operation
30 {
31  public:
32  PaCO_operation(int _number_arguments);
33  virtual ~PaCO_operation();
34 
35  /* External API */
36 
38  virtual void setFabManager(paco_fabrique_manager* fm);
39 
40  /* Advanced libs part **/
42  virtual void setComFab(paco_fabrique_com* fc);
44  virtual void setLibCom(const string& LibCom, void * _group);
45 
47  virtual void setThreadFab(paco_fabrique_thread* ft);
49  virtual void setLibThread(const string& LibThread);
55  virtual void setLibComScheduling(const string& LibComScheduling);
59  virtual void setDisLibArg(int arg_number, const string& lib_name, const string& way) throw(BadWayString);
60  // Deprecated
61  // virtual void setTypeArg(int arg_number, Pattron * temp, const string& lib_name, const string& way) throw(BadWayString);
62  // virtual void setMode(PaCO::distLoc_t mode, int param, const string& way) throw(BadWayString);
63  // virtual void initArg(PaCO::PacoInitData_t data, int nb_param, const string& way) throw(BadWayString);
64  // virtual int setDistribConfig(void * config, int number, const string& way) throw(BadWayString, BadWaySetStringDistribConfig);
65  // virtual void * getDistribConfig(int number, const string& way) throw(BadWayString);
66 
68  virtual void setTypeClient(bool type);
69  virtual void setClientTopo(PaCO::PacoTopology_t _client_topo, const string& way) throw(BadWayString);
70  virtual void setClientTopo(PaCO::PacoTopology_t _client_topo);
71  virtual void setServerTopo(PaCO::PacoTopology_t _serveur_topo, const string& way) throw(BadWayString);
72  virtual void init(int rank, int total);
73 
74  // Model -> communication matrix
75  // Effective Schedule is hidden (reset by clearSchedule & set_beta/k)
76  virtual void noCommunicationMemory(); // by default: compute communication & schedule info
77  virtual void useCommunicationMemoryId(long id) throw (InvalidArgument); // save communication & scheduling info if it does not exist, use it otherwise -- SHOULD be >= 0
78  virtual void clearCommunicationMemoryId(long id) throw (InvalidArgument); // clear this entry, nothing if unknown, exception if invalid (<0)
79  virtual void clearScheduleMemoryId(long id) throw (InvalidArgument); // clear this entry, nothing if unknown, exception if invalid (<0)
80 
81  // Internal API
82  virtual void setClientId(CORBA::Short request_uid);
83  virtual void init_return_context(PaCO_operation * op);
84  virtual void init_context(PaCO_operation * op);
85  virtual void init_context_args(PaCO_operation * op);
86  virtual void init_context_proxy(PaCO_operation * op);
87  virtual void init_complete_context(PaCO_operation * op) { cerr << "WARNING : init_complete_context of PaCO_Operation" << endl;}
88  virtual void configureTopo();
89 
90  public:
91  int return_op;
93  int myRank;
97  // Fabrique Manager
99  // Thread
106  // Communication
107  void * group;
110  // Distribution
113 
114 #ifdef PACO_WARN_DISTLIB
115  std::vector<char*> libraries_in_name;
116  std::vector<char*> libraries_out_name;
117 #endif
118 
119  //ComSchedulr
120  paco_comScheduling* my_comScheduling; // only for the the whole interface !!!
122  // Misc
123  bool typeClient; // false : sequentiel, true : parallel defaut : false
126  bool termine;
127  bool termine2;
128  CORBA::Short client_id;
129 
130  // Exception handling
132  int _level;
133 
134  // SHOULD BE PRIVATE !!!
135 
136  long _current_id; // -1 means no not use schedule nor scheduling memory
137 
138  // Save communication schedule
139  typedef struct {
140  unsigned** com_matrix; // matrix of unsigned
141  void*** info_vector; // vector of void**
142  } _com_info_t;
143  typedef map<long, _com_info_t*> _com_info_map_t;
144  _com_info_map_t _com_info_map; // The map of predefined communication matrices
145 
146  void clearAllScheduleMemory();
147  _com_info_t* getComMemoryId(long id);
148 
149 
150 #ifdef PADICO
151  // For internal Timing: Padico_Timing
152  padico_timing_t *_ticks;
153 #endif
154 };
155 
156 #endif
virtual void setFabManager(paco_fabrique_manager *fm)
_com_info_map_t _com_info_map
virtual void setLibComScheduling(const string &LibComScheduling)
virtual void noCommunicationMemory()
virtual void setDisLibArg(int arg_number, const string &lib_name, const string &way)
virtual void setTypeClient(bool type)
virtual void init_context(PaCO_operation *op)
virtual void setLibThread(const string &LibThread)
DistributionLibrary ** libraries_out
virtual void init_complete_context(PaCO_operation *op)
virtual void configureTopo()
PaCO::PacoTopology_t serveur_topo_retour
DistributionLibrary ** libraries_in
paco_mutex * my_mutex
virtual void clearScheduleMemoryId(long id)
virtual void init_context_proxy(PaCO_operation *op)
paco_mutex * my_mutex2
PaCO_operation(int _number_arguments)
PaCO::PacoTopology_t serveur_topo_aller
paco_fabrique_thread * FabThread
void clearAllScheduleMemory()
virtual ~PaCO_operation()
paco_fabrique_com * FabCom
distLoc_t
Definition: PaCO++.idl:12
paco_fabrique_comScheduling * FabComScheduling
paco_mutex * my_mutex3
virtual void init(int rank, int total)
virtual void init_return_context(PaCO_operation *op)
CORBA::Short client_id
virtual void setComFab(paco_fabrique_com *fc)
PaCO::PacoTopology_t mytopo
virtual void setLibCom(const string &LibCom, void *_group)
paco_comScheduling * my_comScheduling
std::vector< char * > libraries_in_name
std::vector< char * > libraries_out_name
virtual void init_context_args(PaCO_operation *op)
virtual void setThreadFab(paco_fabrique_thread *ft)
_com_info_t * getComMemoryId(long id)
PaCO::distLoc_t _mode
virtual void setServerTopo(PaCO::PacoTopology_t _serveur_topo, const string &way)
paco_condition * my_condition
paco_fabrique_manager * FabManager
map< long, _com_info_t * > _com_info_map_t
virtual void setComSchedulingFab(paco_fabrique_comScheduling *ft)
virtual void setClientId(CORBA::Short request_uid)
paco_condition * my_condition2
virtual void useCommunicationMemoryId(long id)
virtual void setClientTopo(PaCO::PacoTopology_t _client_topo, const string &way)
virtual void clearCommunicationMemoryId(long id)