1 #include <../../nrnconf.h> 15 #if defined(HAVE_TMS) && !NRNMPI 17 #include <sys/times.h> 19 static struct tms tmsbuf, tms_start_;
20 static clock_t starttime;
32 #define debug BBSImpl::debug_ 93 runworker_called_ = 0;
100 pickle_ret_size_ = 0;
109 delete [] pickle_ret_;
138 return double(times(&tmsbuf))/100.;
176 printf(
"upkdouble %g\n", d);
191 printf(
"upkstr |%s|\n", s);
199 printf(
"upkpickle %lu |%s|\n", *n, s);
220 printf(
"pkdouble %g\n", x);
227 printf(
"pkdouble %d\n", n);
234 printf(
"pkstr |%s|\n", s);
241 printf(
"pkpickle %lu |%s|\n", n, s);
291 int save_id = working_id_;
297 printf(
"execute begin %g: working_id_=%d\n",st, working_id_);
302 rs = execute_helper(&n,
id);
306 printf(
"execute end elapsed %g: working_id_=%d hoc_ac_=%g\n",
319 working_id_ = save_id;
332 printf(
"submit n_= %d for working_id=%d userid=%d\n",n_, working_id_, userid);
337 post_todo(working_id_);
347 printf(
"can't execute BBS::context on a worker\n");
372 printf(
"working n_=%d: return false\n", n_);
382 id = look_take_result(working_id_);
384 id = master_take_result(working_id_);
396 delete [] pickle_ret_;
398 pickle_ret_ =
upkpickle(&pickle_ret_size_);
402 printf(
"working n_=%d: after %d try elapsed %g sec got result for %d id=%d x=%g\n",
403 n_, cnt,
time()-t, working_id_,
id, x);
409 }
else if ( (
id = look_take_todo()) != 0) {
411 printf(
"working: no result for %d but did get _todo id=%d\n", working_id_,
id);
430 subworld_worker_execute();
445 printf(
"post: |%s|\n", key);
453 printf(
"look_take |%s| return %d\n", key, b);
461 printf(
"look |%s| return %d\n", key, b);
470 printf(
"begin take |%s| at %g\n", key, t);
474 printf(
"end take |%s| elapsed %g from %g\n", key,
time()-t, t);
485 if (done_) {
return; }
488 clock_t elapsed = times(&tmsbuf) - starttime;
489 printf(
"%d tasks in %g seconds. %g seconds waiting for tasks\n",
491 printf(
"user=%g sys=%g elapsed=%g %g%%\n",
492 (
double)(tmsbuf.tms_utime - tms_start_.tms_utime)/100,
493 (
double)(tmsbuf.tms_stime - tms_start_.tms_stime)/100,
494 (
double)(elapsed)/100,
495 100.*(
double)(tmsbuf.tms_utime - tms_start_.tms_utime)/(
double)elapsed
501 if (started_) {
return; }
504 starttime = times(&tms_start_);
static double userid(void *v)
bool working(int &id, double &x, int &userid)
virtual int submit(int userid)
static bool master_works_
char * upkpickle(size_t *size)
virtual void pkstr(const char *)=0
virtual void execute(int id)
virtual void pkvec(int, double *)=0
virtual void post(const char *)=0
static double total_exec_time
void upkvec(int n, double *px)
virtual char * upkstr()=0
void perror(const char *)
int const size_t const size_t n
virtual void pkpickle(const char *, size_t)=0
void add_wait_time(double)
bool look_take(const char *)
static double worker_take_time
void pkpickle(const char *, size_t size)
virtual void perror(const char *)
virtual bool look(const char *)=0
virtual void pkdouble(double)=0
virtual void take(const char *)=0
virtual bool working(int &id, double &x, int &userid)
virtual int master_take_result(int pid)
void pkvec(int n, double *px)
static double nrnmpi_wtime()
virtual double upkdouble()=0
virtual void pkint(int)=0
void master_works(int flag)
virtual bool look_take(const char *)=0
virtual void upkvec(int, double *)=0
virtual char * upkpickle(size_t *)=0