NEURON
bbsimpl.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 
5 class BBSImpl {
6  public:
7  BBSImpl();
8  virtual ~BBSImpl() = default;
9 
10  virtual bool look(const char*) = 0;
11 
12  virtual void take(const char*) = 0; /* blocks til something to take */
13  virtual bool look_take(const char*) = 0; /* returns false if nothing to take */
14  // after taking use these
15  virtual int upkint() = 0;
16  virtual double upkdouble() = 0;
17  virtual void upkvec(int, double*) = 0;
18  virtual char* upkstr() = 0; // delete [] char* when finished
19  virtual std::vector<char> upkpickle() = 0;
20 
21  // before posting use these
22  virtual void pkbegin() = 0;
23  virtual void pkint(int) = 0;
24  virtual void pkdouble(double) = 0;
25  virtual void pkvec(int, double*) = 0;
26  virtual void pkstr(const char*) = 0;
27  virtual void pkpickle(const std::vector<char>&) = 0;
28  virtual void post(const char*) = 0;
29 
30  virtual void post_todo(int parentid) = 0;
31  virtual void post_result(int id) = 0;
32  virtual int look_take_result(int pid) = 0; // returns id, or 0 if nothing
33  virtual int master_take_result(int pid); // returns id
34  virtual int look_take_todo() = 0; // returns id, or 0 if nothing
35  virtual int take_todo() = 0; // returns id
36  virtual void save_args(int userid) = 0;
37  virtual void return_args(int userid);
38 
39  virtual void execute(int id); // assumes a "todo" message in receive buffer
40  virtual int submit(int userid);
41  virtual bool working(int& id, double& x, int& userid);
42  virtual void context();
43 
44  virtual void start();
45  virtual void done();
46 
47  virtual void worker(); // forever execute
48  virtual bool is_master();
49  virtual double time();
50 
51  virtual void perror(const char*);
52 
53  public:
56  double wait_time_;
57  double integ_time_;
58  double send_time_;
59  std::vector<char> pickle_ret_;
60  static bool is_master_;
61  static bool started_, done_;
62  static int mytid_;
63  static int debug_;
64  static bool master_works_;
65 
66  protected:
67  std::vector<char> execute_helper(int id, bool exec = true); // involves hoc specific details in
68  // ocbbs.cpp
69  void subworld_worker_execute(); // shadows execute_helper. ie. each of
70  // the nrnmpi_myid_bbs workers (and master) need to execute
71  // the same thing on each of the subworld processes
72  // associated with nrnmpi_myid==0. A subworld does not
73  // intracommunicate via the bulletin board but only via
74  // mpi on the subworld communicator.
75 };
Definition: bbsimpl.h:5
virtual int upkint()=0
int working_id_
Definition: bbsimpl.h:55
virtual bool look_take(const char *)=0
static bool is_master_
Definition: bbsimpl.h:60
virtual void return_args(int userid)
Definition: ocbbs.cpp:1420
double send_time_
Definition: bbsimpl.h:58
static int mytid_
Definition: bbsimpl.h:62
BBSImpl()
Definition: bbs.cpp:83
virtual void post_result(int id)=0
static int debug_
Definition: bbsimpl.h:63
virtual void pkpickle(const std::vector< char > &)=0
std::vector< char > execute_helper(int id, bool exec=true)
Definition: ocbbs.cpp:1160
virtual void save_args(int userid)=0
int n_
Definition: bbsimpl.h:55
virtual int take_todo()=0
double integ_time_
Definition: bbsimpl.h:57
virtual int submit(int userid)
Definition: bbs.cpp:300
virtual void worker()
Definition: bbs.cpp:397
static bool master_works_
Definition: bbsimpl.h:64
virtual void pkbegin()=0
virtual void pkstr(const char *)=0
virtual void execute(int id)
Definition: bbs.cpp:261
virtual void upkvec(int, double *)=0
static bool started_
Definition: bbsimpl.h:61
int runworker_called_
Definition: bbsimpl.h:54
virtual int look_take_result(int pid)=0
virtual char * upkstr()=0
double wait_time_
Definition: bbsimpl.h:56
virtual void perror(const char *)
Definition: bbs.cpp:141
virtual void pkvec(int, double *)=0
virtual std::vector< char > upkpickle()=0
virtual ~BBSImpl()=default
virtual void pkint(int)=0
void subworld_worker_execute()
Definition: ocbbs.cpp:1314
virtual bool is_master()
Definition: bbs.cpp:108
virtual double time()
Definition: bbs.cpp:116
static bool done_
Definition: bbsimpl.h:61
virtual int look_take_todo()=0
virtual void post_todo(int parentid)=0
virtual bool working(int &id, double &x, int &userid)
Definition: bbs.cpp:338
virtual void post(const char *)=0
virtual void take(const char *)=0
std::vector< char > pickle_ret_
Definition: bbsimpl.h:59
virtual double upkdouble()=0
virtual bool look(const char *)=0
virtual void start()
Definition: bbs.cpp:471
virtual void pkdouble(double)=0
virtual void done()
Definition: bbs.cpp:464
virtual void context()
Definition: bbs.cpp:318
virtual int master_take_result(int pid)
Definition: bbs.cpp:333
static double userid(void *v)
Definition: ocbbs.cpp:196