X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/9f21b5351f943feb1099f387d385c95bdacf6e62..673a449fe2844c664860cd553d83926fb8b66ceb:/process.h?ds=inline diff --git a/process.h b/process.h index cc10b04..ed6e6cf 100644 --- a/process.h +++ b/process.h @@ -32,8 +32,16 @@ public: process(int argc, char* argv[]); virtual ~process(); - double get_comp() const { return comp; } - double get_real_load() const { return real_load; } + double get_real_load() const { return real_load; } + double get_comp_amount() const { return acc.comp_amount; } + double get_data_send_amount() const { return acc.data_send.amount; } + double get_data_recv_amount() const { return acc.data_recv.amount; } + unsigned get_data_send_count() const { return acc.data_send.count; } + unsigned get_data_recv_count() const { return acc.data_recv.count; } + double get_ctrl_send_amount() const { return acc.ctrl_send.amount; } + double get_ctrl_recv_amount() const { return acc.ctrl_recv.amount; } + unsigned get_ctrl_send_count() const { return acc.ctrl_send.count; } + unsigned get_ctrl_recv_count() const { return acc.ctrl_recv.count; } int run(); @@ -90,8 +98,6 @@ private: unsigned lb_iter; // counter of load-balancing iterations unsigned comp_iter; // counter of computation iterations - double comp; // total computing done so far (flops) - double prev_load_broadcast; // used to ensure that we do not send // a same information messages double real_load; // current load @@ -100,6 +106,39 @@ private: mutex_t mutex; // synchronization between threads condition_t cond; + struct mesg_accounting { + double amount; // sum of message size + unsigned count; // number of messages + mesg_accounting(): amount(0.0), count(0) { } + }; + struct accounting { + double comp_amount; // total computing done so far (flops) + mesg_accounting data_send; // data messages sent + mesg_accounting data_recv; // data messages received + mesg_accounting ctrl_send; // ctrl message sent + mesg_accounting ctrl_recv; // ctrl message received + accounting(): comp_amount(0.0) { } + }; + accounting acc; + + void add_comp_amount(double amount) { acc.comp_amount += amount; } + void add_data_send_mesg(double amount) { + ++acc.data_send.count; + acc.data_send.amount += amount; + } + void add_data_recv_mesg(double amount) { + ++acc.data_recv.count; + acc.data_recv.amount += amount; + } + void add_ctrl_send_mesg(double amount) { + ++acc.ctrl_send.count; + acc.ctrl_send.amount += amount; + } + void add_ctrl_recv_mesg(double amount) { + ++acc.ctrl_recv.count; + acc.ctrl_recv.amount += amount; + } + // Load-balancing loop msg_thread* lb_thread; void load_balance_loop();