]> AND Private Git Repository - loba.git/commitdiff
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Allow changing communicator::send_count_before_flush at run-time.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Fri, 7 Jan 2011 10:17:35 +0000 (11:17 +0100)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Fri, 7 Jan 2011 10:17:35 +0000 (11:17 +0100)
communicator.cpp
communicator.h
options.cpp

index 94cdb04160337353a0a1bab8b2797d88c0ce415d..6570b012d96e9d64adeb00ee2567f038e8b6864c 100644 (file)
@@ -21,7 +21,7 @@ std::string message::to_string()
     return oss.str();
 }
 
-const int communicator::send_count_before_flush = 4;
+int communicator::send_count_before_flush = 4;
 
 communicator::communicator()
     : host((hostdata* )MSG_host_get_data(MSG_host_self()))
index ba4b86e96598cb06b68db102996f4b8e0ef194b3..b04301ad87574aff718d3fc7b8539d1973183bab 100644 (file)
@@ -9,6 +9,14 @@
 #include <msg/msg.h>
 #include "hostdata.h"
 
+// Cannot include "options.h" without error, so only declare the
+// needed functions.
+namespace opt {
+    bool parse_args(int* argc, char* argv[]);
+    void print();
+    void usage();
+}
+
 class message {
 public:
     enum message_type { INFO, CREDIT, LOAD, CTRL_CLOSE, DATA_CLOSE };
@@ -51,7 +59,7 @@ private:
 
     // List of pending send communications
     std::list<msg_comm_t> sent_comm;
-    static const int send_count_before_flush;
+    static int send_count_before_flush;
     int send_counter;
 
     // Queue of received messages
@@ -75,6 +83,12 @@ private:
 
     // Used to test if a communication is over, and to destroy it if it is
     static bool comm_test_n_destroy(msg_comm_t comm);
+
+    // Make opt::* functions our friends to provide them an access to
+    // send_count_before_flush
+    friend bool opt::parse_args(int*, char* []);
+    friend void opt::print();
+    friend void opt::usage();
 };
 
 #endif // !COMMUNICATOR_H
index 56049ed98fd641a14a7ff5e13d9c12806d20e269..fd9b8f7c435ba6c071b355aa40328f9fccb62b1f 100644 (file)
@@ -170,7 +170,7 @@ bool opt::parse_args(int* argc, char* argv[])
     
     int c;
     opterr = 0;
-    while ((c = getopt(*argc, argv, "a:bc:C:ehi:I:l:L:N:T:vV")) != -1) {
+    while ((c = getopt(*argc, argv, "a:bc:C:ehi:I:l:L:N:s:T:vV")) != -1) {
         switch (c) {
         case 'a':
             opt::loba_algo = optarg;
@@ -211,6 +211,9 @@ bool opt::parse_args(int* argc, char* argv[])
         case 'N':
             std::istringstream(optarg) >> opt::auto_depl::nhosts;
             break;
+        case 's':
+            std::istringstream(optarg) >> communicator::send_count_before_flush;
+            break;
         case 'T':
             opt::auto_depl::topology = optarg;
             result = opt_helper::nol_find_prefix(opt::topologies, "topology",
@@ -282,6 +285,8 @@ void opt::print()
     DESCR("maximum number of lb. iterations", "%s",
           h.val_or_string(lb_maxiter, "infinity"));
     DESCR("exit on close", "%s",                h.on_off(exit_on_close));
+    DESCR("send count before flush", "%d",
+          communicator::send_count_before_flush);
     INFO0("`----");
 
 #undef DESCR
@@ -371,6 +376,11 @@ void opt::usage()
               << "        proc : messages from base process class\n"
               << "        loba : messages from load-balancer\n";
 
+    std::clog << "\nMiscellaneous low-level parameters\n";
+    std::clog << o("-s count")
+              << "check for finished comm. every `count' send operation"
+              << " (" << communicator::send_count_before_flush << ")\n";
+
 #undef so_list
 #undef so
 #undef o