From 4b79356ada36bf494ce5f1a7bcc3744b9d31f2e3 Mon Sep 17 00:00:00 2001 From: Aberrahmane Sider Date: Fri, 6 May 2011 12:41:44 +0100 Subject: [PATCH] Missing loba_lln.h and loba_lln.cpp added. ALGORITHMS updated to include bulk and lln descirptions --- ALGORITHMS | 16 ++++++++++++++++ loba_lln.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ loba_lln.h | 19 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 loba_lln.cpp create mode 100644 loba_lln.h diff --git a/ALGORITHMS b/ALGORITHMS index e9f07fa..cc601b3 100644 --- a/ALGORITHMS +++ b/ALGORITHMS @@ -1,5 +1,21 @@ DESCRIPTIONS DES ALGORITHMES D'ÉQUILIBRAGE +bulk +==== +N'ordonne pas les voisins. Cherche le nombre de voisins de charge minimum et +le nombre de voisins de charge inferieure. En fonction de leur egalité ou non, +un parametre alpha est caclulé. En cas d'egalité, alpha=1/(NB_voisins_charge_minimale +1) +sinon alpha=1/(NB_voisins_charge_minimale +2). Chaque voisin dont la charge est inferieure +recoit alpha*(myLoad - charge_du_voisin). Ensuite, une correction est effectuée +pour respecter la regle de Bertsekas. + +lln pour Least Loaded Neighbors +=============================== +A l'origine écrit par Raphaël. +Comme simple, mais tous les voisins de charge inferieure reçoivent de la charge +pas seulement un voisin de charge minimale. N'ordonne pas les voisins, et ne respecte +pas la regle de Bertsekas. Le parametre alpha vaut toujours (1/NB_voisins_charge_inferiure+1). + besteffort ========== Ordonne les voisins du moins chargé au plus chargé. diff --git a/loba_lln.cpp b/loba_lln.cpp new file mode 100644 index 0000000..fa762c8 --- /dev/null +++ b/loba_lln.cpp @@ -0,0 +1,40 @@ +#include +#include + +XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(loba); + +#include "loba_lln.h" + +void loba_lln::load_balance() +{ + std::vector listLessLoadedNeighbors; + unsigned i; + double myLoad = get_load(); + unsigned size = pneigh.size(); + double *S = new double[size]; + double lessLoad = get_load(); + + listLessLoadedNeighbors.clear(); + for(i=0;iget_load()< lessLoad ) + listLessLoadedNeighbors.push_back(i); + } + int nbLessLoadedNeighbors=listLessLoadedNeighbors.size(); + for( i=0; iget_load())/(nbLessLoadedNeighbors+1); + if(myLoad-delta > pneigh[listLessLoadedNeighbors[i]]->get_load()) { + S[i]=delta; + myLoad-=delta; + } + } + for(i=0; iget_name()); + } + delete[] S; +} + +// Local variables: +// mode: c++ +// End: diff --git a/loba_lln.h b/loba_lln.h new file mode 100644 index 0000000..eac3a89 --- /dev/null +++ b/loba_lln.h @@ -0,0 +1,19 @@ +#ifndef LOBA_LLN_H +#define LOBA_LLN_H + +#include "process.h" + +class loba_lln: public process { +public: + loba_lln(int argc, char* argv[]): process(argc, argv) { } + ~loba_lln() { } + +private: + void load_balance(); +}; + +#endif //!LOBA_LLN_H + +// Local variables: +// mode: c++ +// End: -- 2.39.5