Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add NetworkAction::links(), similar to CpuAction::cpus() for Betsegaw
authorMartin Quinson <martin.quinson@loria.fr>
Wed, 15 Feb 2017 14:30:53 +0000 (15:30 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Wed, 15 Feb 2017 14:51:48 +0000 (15:51 +0100)
src/surf/cpu_interface.cpp
src/surf/network_interface.cpp
src/surf/network_interface.hpp

index 177c968..8e9569f 100644 (file)
@@ -129,6 +129,7 @@ Cpu::Cpu(Model* model, simgrid::s4u::Host* host, lmm_constraint_t constraint, st
 
 Cpu::~Cpu() = default;
 
+/** @brief The amount of flop per second that this CPU can compute at its current DVFS level */
 double Cpu::getPstateSpeedCurrent()
 {
   return speed_.peak;
@@ -231,6 +232,7 @@ void CpuAction::setState(Action::State state){
   Action::setState(state);
   onStateChange(this, previous);
 }
+/** @brief returns a list of all CPUs that this action is using */
 std::list<Cpu*> CpuAction::cpus() {
   std::list<Cpu*> retlist;
   lmm_system_t sys = getModel()->getMaxminSystem();
index 0414e74..7d97da1 100644 (file)
@@ -186,11 +186,30 @@ namespace simgrid {
      * Action *
      **********/
 
-    void NetworkAction::setState(Action::State state){
+    void NetworkAction::setState(Action::State state)
+    {
       Action::setState(state);
       s4u::Link::onCommunicationStateChange(this);
     }
 
+    /** @brief returns a list of all Links that this action is using */
+    std::list<LinkImpl*> NetworkAction::links()
+    {
+      std::list<LinkImpl*> retlist;
+      lmm_system_t sys = getModel()->getMaxminSystem();
+      int llen         = lmm_get_number_of_cnst_from_var(sys, getVariable());
+
+      for (int i = 0; i < llen; i++) {
+        /* Beware of composite actions: ptasks put links and cpus together */
+        // extra pb: we cannot dynamic_cast from void*...
+        Resource* resource = static_cast<Resource*>(lmm_constraint_id(lmm_get_cnst_from_var(sys, getVariable(), i)));
+        LinkImpl* link     = dynamic_cast<LinkImpl*>(resource);
+        if (link != nullptr)
+          retlist.push_back(link);
+      }
+
+      return retlist;
+    }
   }
 }
 
index e0462e6..25ec028 100644 (file)
@@ -10,6 +10,7 @@
 #include "src/surf/PropertyHolder.hpp"
 #include "src/surf/surf_interface.hpp"
 #include "xbt/base.h"
+#include <list>
 #include <unordered_map>
 
 /***********
@@ -206,6 +207,7 @@ namespace simgrid {
       : simgrid::surf::Action(model, cost, failed, var) {};
 
       void setState(simgrid::surf::Action::State state) override;
+      std::list<LinkImpl*> links();
 
       double latency_;
       double latCurrent_;