1 #include <../../nrnconf.h> 2 #include "../nrnpython/nrnpython_config.h" 5 #ifdef NRNMPI // to end of file 20 #if defined(USE_PYTHON) 25 #if defined(HAVE_SSTREAM) // the standard ... 33 bool operator() (
int i,
int j)
const {
38 class KeepArgs :
public std::map<int, bbsmpibuf*, ltint>{};
47 request_ = nrnmpi_newbuf(100);
50 keepargs_ =
new KeepArgs();
56 nrnmpi_unref(sendbuf_);
57 nrnmpi_unref(recvbuf_);
58 nrnmpi_unref(request_);
65 printf(
"BBSClient error: %s\n", s);
68 void BBSClient::upkbegin() {
69 nrnmpi_upkbegin(recvbuf_);
72 char* BBSClient::getkey() {
73 return nrnmpi_getkey(recvbuf_);
76 int BBSClient::getid() {
77 return nrnmpi_getid(recvbuf_);
81 return nrnmpi_upkint(recvbuf_);
85 return nrnmpi_upkdouble(recvbuf_);
89 nrnmpi_upkvec(n, x, recvbuf_);
93 return nrnmpi_upkstr(recvbuf_);
97 return nrnmpi_upkpickle(n, recvbuf_);
102 sendbuf_ = nrnmpi_newbuf(100);
103 nrnmpi_ref(sendbuf_);
105 nrnmpi_pkbegin(sendbuf_);
109 nrnmpi_pkint(i, sendbuf_);
113 nrnmpi_pkdouble(x, sendbuf_);
117 nrnmpi_pkvec(n, x, sendbuf_);
121 nrnmpi_pkstr(s, sendbuf_);
125 nrnmpi_pkpickle(s, n, sendbuf_);
133 nrnmpi_enddata(sendbuf_);
134 nrnmpi_pkstr(key, sendbuf_);
135 nrnmpi_bbssend(sid_,
POST, sendbuf_);
136 nrnmpi_unref(sendbuf_);
145 nrnmpi_enddata(sendbuf_);
146 nrnmpi_pkint(parentid, sendbuf_);
147 nrnmpi_bbssend(sid_,
POST_TODO, sendbuf_);
148 nrnmpi_unref(sendbuf_);
157 nrnmpi_enddata(sendbuf_);
158 nrnmpi_pkint(
id, sendbuf_);
160 nrnmpi_unref(sendbuf_);
169 nrnmpi_pkbegin(request_);
170 nrnmpi_enddata(request_);
171 nrnmpi_pkstr(key, request_);
180 nrnmpi_pkbegin(request_);
181 nrnmpi_enddata(request_);
182 nrnmpi_pkint(key, request_);
190 nrnmpi_unref(recvbuf_);
191 recvbuf_ = nrnmpi_newbuf(100);
192 nrnmpi_ref(recvbuf_);
193 int msgtag = nrnmpi_bbssendrecv(sid_, type, request_, recvbuf_);
195 wait_time_ += time() - ts;
200 if (msgtag ==
QUIT) {
256 rs = execute_helper(&n, -1);
257 if (rs) {
delete [] rs; }
272 #if defined(HAVE_STL) 273 nrnmpi_ref(sendbuf_);
275 std::pair<const int, bbsmpibuf* >(userid, sendbuf_)
279 post_todo(working_id_);
283 #if defined(HAVE_STL) 284 KeepArgs::iterator
i = keepargs_->find(userid);
285 nrnmpi_unref(recvbuf_);
287 if (i != keepargs_->end()) {
288 recvbuf_ = (*i).second;
289 nrnmpi_ref(recvbuf_);
298 #if defined(USE_PYTHON) 307 int info[2]; info[0] = -2; info[1] = -1;
312 #if defined(USE_PYTHON) 317 #if defined(USE_PYTHON) 327 if (started_) {
return; }
337 nrnmpi_pkbegin(request_);
338 nrnmpi_enddata(request_);
virtual void pkpickle(const char *, size_t)
static double userid(void *v)
virtual int look_take_result(int pid)
virtual bool look(const char *)
virtual char * upkpickle(size_t *)
int nrnmpi_numprocs_world
virtual double upkdouble()
virtual void post_result(int id)
int get(const char *key, int type)
virtual bool look_take(const char *)
static double map(void *v)
virtual int look_take_todo()
static double done(void *v)
virtual void take(const char *)
void(* p_nrnpython_finalize)()
int const size_t const size_t n
virtual void return_args(int)
static void nrnmpi_int_broadcast(int *, int, int)
virtual void pkdouble(double)
virtual void return_args(int userid)
int(* p_nrnpython_start)(int)
virtual void upkvec(int, double *)
virtual void save_args(int)
virtual void post(const char *)
virtual void post_todo(int parentid)
virtual void perror(const char *)
virtual void pkstr(const char *)
virtual void pkvec(int, double *)