//#undef USE_UNORDERED_MAP
#include <algorithm>
+#include <atomic>
#include <functional>
#ifdef USE_UNORDERED_MAP
# include <unordered_map>
#include <vector>
#include <msg/msg.h>
#include <xbt/log.h>
-#include "atomic_compat.h"
#include "communicator.h"
#include "misc.h"
#include "msg_thread.h"
#include "neighbor.h"
#include "options.h"
+#include "simgrid_features.h"
#include "synchro.h"
class process {
static int process_counter;
static double total_load_average;
+ static double average_load_ratio;
static double load_diff_threshold;
static std::atomic<int> convergence_counter;
- typedef MAP_TEMPLATE<m_host_t, neighbor*> rev_neigh_type;
+ typedef MAP_TEMPLATE<msg_host_t, neighbor*> rev_neigh_type;
neigh_type neigh; // list of neighbors (do not alter
// after construction!)
- rev_neigh_type rev_neigh; // map m_host_t -> neighbor
+ rev_neigh_type rev_neigh; // map msg_host_t -> neighbor
communicator comm; // communicator for this process
int ctrl_close_pending; // number of "close" messages to wait
double idle_duration; // how long we had nothing to compute
double convergence; // date when convergence was achieved, or -1.0
+ int local_convergence_counter; // number of iterations since convergence
mutex_t mutex; // synchronization between threads
condition_t cond;
// infinite waiting, or any positive timeout.
void ctrl_receive(double timeout);
void data_receive(double timeout);
- void handle_message(message* msg, m_host_t from);
+ void handle_message(message* msg, msg_host_t from);
};
template <typename Compare>