Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
authorMartin Quinson <martin.quinson@loria.fr>
Fri, 19 Feb 2016 10:54:53 +0000 (11:54 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Fri, 19 Feb 2016 10:54:53 +0000 (11:54 +0100)
doc/Doxyfile.in
doc/Layout.xml
doc/doxygen/deployment.doc
doc/doxygen/getting_started.doc
doc/doxygen/options.doc
doc/doxygen/platform.doc
src/surf/cpu_ti.cpp
src/surf/surf_routing.cpp
src/surf/surf_routing.hpp

index b034485..28cca26 100644 (file)
@@ -683,7 +683,9 @@ INPUT                  = doxygen/index.doc \
                          @top_srcdir@/src/xbt/ \
                          @top_srcdir@/src/surf/ \
                          @top_srcdir@/src/surf/plugins/ \
+                         @top_srcdir@/src/s4u/ \
                          @top_srcdir@/src/msg/ \
+                         @top_srcdir@/src/smpi/ \
                          @top_srcdir@/src/simdag \
                          @top_srcdir@/src/simix \
                          @bindir@/src
index d2983b6..585a480 100644 (file)
@@ -1,21 +1,19 @@
 <doxygenlayout version="1.0">
   <!-- Navigation index tabs for HTML output -->
   <navindex>
-    <tab type="usergroup" visible="yes" title="Getting started" intro="Getting started" url="@ref getting_started">
+    <!--<tab type="usergroup" visible="yes" title="Getting started" intro="Getting started" url="@ref getting_started">
       <tab type="user" visible="yes" url="@ref getting_started" title="What to read" />
       <tab type="user" visible="yes" url="@ref install" title="Installing SimGrid" />
       <tab type="user" visible="yes" url="@ref help" title="Getting help" />
-    </tab>
+    </tab>-->
+    
     <tab type="mainpage" visible="yes" title="SimGrid User Documentation" />
 
-    <!--<tab type="pages" visible="yes" title="Table Of Content" intro="Complete pages list">-->
-      <!--<tab type="pages" visible="yes" title="Table Of Content" intro="Complete pages list"/>-->
-    <!--</tab>-->
-    <tab type="usergroup" visible="yes" title="Technical documentation" intro="Technical documentation">
+    <tab type="usergroup" visible="yes" title="Reference documentation" intro="Reference documentation">
       <tab type="namespaces" visible="no" title="">
-        <tab type="namespaces" visible="yes" title="" intro=""/>
-        <tab type="namespacemembers" visible="yes" title="" intro=""/>
-      </tab>
+      <tab type="namespaces" visible="yes" title="" intro=""/>
+      <tab type="namespacemembers" visible="yes" title="" intro=""/>
+    </tab>
       <tab type="classes" visible="no" title="">
         <tab type="classes" visible="yes" title="" intro=""/>
         <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/> 
index 1439a60..107b44b 100644 (file)
@@ -1,4 +1,4 @@
-/*! \page deployment Step 3: Deploy the simulation
+/*! \page deployment Deploy the simulation
 
 \section dep_over Overview
 
index 2a4dac1..878f901 100644 (file)
@@ -1,9 +1,9 @@
-/*! @page getting_started Getting started with SimGrid!
+/*! @page getting_started Getting started with SimGrid
 
 \tableofcontents
 
-Welcome to SimGrid's documentation! %As you may know, SimGrid is (actively
-developed) research software and contains many features. This documentation is
+Welcome to SimGrid's documentation! %As you may know, SimGrid is an actively
+developed research software and contains many features. This documentation is
 \c "work in progress" (and we need the community's help to improve this
 documentation! If you're ready to step up and help us, see Section \ref
 contributing "Contributing"), but many features are already well described.
@@ -29,30 +29,31 @@ own needs. This page gives you a brief overview of available resources.
 | ----------------- | ------------------------------------------------- |
 | \ref tutorial     | Introduces the user to basic features of SimGrid. |
 | \ref install      | Explains how SimGrid can be installed; this covers Windows as well as Linux; plus, it shows how to install from a package or how to install from source. |
-| [Tutorials](http://simgrid.gforge.inria.fr/tutorials.html) | These tutorials cover most of the basics and might be valuable for what you want to do, especially the [SimGrid User 101](http://simgrid.gforge.inria.fr/tutorials/simgrid-use-101.pdf). |
+| [Online Tutorials](http://simgrid.gforge.inria.fr/tutorials.html) | These tutorials cover most of the basics and might be valuable for what you want to do, especially the [SimGrid User 101](http://simgrid.gforge.inria.fr/tutorials/simgrid-use-101.pdf). |
 | \ref MSG_examples | This document explains several tests that we wrote for MSG; these tests are working simulations and you may learn something from looking at them. |
 
 In order to actually use SimGrid, three steps are necessary:
 
-\li \ref platform
-\li \ref options
-\li \ref deployment
+\li Step 1: \ref platform
+\li Step 2: \ref options
+\li Step 3: \ref deployment
 
 \section gs_experienced_users Documentation for experienced users
 
 | Document name     | Description                                       |
 | ----------------- | ------------------------------------------------- |
 | \ref tracing      | Shows how the behavior of a program can be written to a file so that it can be analyzed. |
-| \ref bindings     | SimGrid supports many different bindings for languages such as Lua, Ruby, Java, ... You can run your simulations with those! |
-| \ref pls          | Although SimGrid is not a packet level simulator, it does have bindings to two such simulators. |
+| \ref bindings     | You can write your application in Java, if you prefer. |
+| \ref pls          | You can use the NS3 simulation models instead of our own. |
 | \ref inside       | If you want to contribute or obtain a deeper understanding of SimGrid, this is the right location. |
 
 \section gs_examples Examples shipped with SimGrid
 
-SimGrid ships with many examples. You can find them in the folder
-\c examples/. Especially when you're looking for examples on how to
-use a specific XML-tag, this will prove valuable, as you can easily
-search through all the files with tools like \c grep.
+SimGrid ships with many examples, detailed in Section \ref
+MSG_examples. You can find them in the folder \c examples/. Especially
+when you're looking for examples on how to use a specific XML-tag,
+this will prove valuable, as you can easily search through all the
+files with tools like \c grep.
 
 
 Here is the output of a quick search for examples for \ref pf_trace "trace_connect":
@@ -65,7 +66,4 @@ Here is the output of a quick search for examples for \ref pf_trace "trace_conne
 ./platforms/two_hosts_platform_with_availability_included.xml:26:<trace_connect kind="POWER" trace="B" element="Cpu B"/>
 \endverbatim
 
-\note
-    There's also a Section on \ref MSG_examples "examples for MSG".
-
 */
index a690ad3..4488c39 100644 (file)
@@ -1,4 +1,4 @@
-/*! \page options Step 2: Configure SimGrid
+/*! \page options Configure SimGrid
 
 A number of options can be given at runtime to change the default
 SimGrid behavior. For a complete list of all configuration options
index a7b1754..f7f7bec 100644 (file)
@@ -1,4 +1,4 @@
-/*! \page platform Step 1: %Model the underlying platform
+/*! \page platform %Model the underlying platform
 
 @tableofcontents
 
index 93c115c..ae2984e 100644 (file)
@@ -128,10 +128,8 @@ double CpuTiTgmr::integrate(double a, double b)
 /**
  * \brief Auxiliary function to compute the integral between a and b.
  *     It simply computes the integrals at point a and b and returns the difference between them.
- * \param trace    Trace structure
- * \param a        Initial point
+ * \param a  Initial point
  * \param b  Final point
- * \return  Integral
 */
 double CpuTiTrace::integrateSimple(double a, double b)
 {
@@ -140,9 +138,7 @@ double CpuTiTrace::integrateSimple(double a, double b)
 
 /**
  * \brief Auxiliary function to compute the integral at point a.
- * \param trace    Trace structure
  * \param a        point
- * \return  Integral
 */
 double CpuTiTrace::integrateSimplePoint(double a)
 {
index 5253c97..7cee152 100644 (file)
@@ -256,39 +256,31 @@ static void elements_father(sg_netcard_t src, sg_netcard_t dst,
                             AS_t * res_dst)
 {
   xbt_assert(src && dst, "bad parameters for \"elements_father\" method");
-#define ELEMENTS_FATHER_MAXDEPTH 16     /* increase if it is not enough */
-  simgrid::surf::As *src_as, *dst_as;
-  simgrid::surf::As *path_src[ELEMENTS_FATHER_MAXDEPTH];
-  simgrid::surf::As *path_dst[ELEMENTS_FATHER_MAXDEPTH];
+#define ROUTING_HIERARCHY_MAXDEPTH 16     /* increase if it is not enough */
+  simgrid::surf::As *path_src[ROUTING_HIERARCHY_MAXDEPTH];
+  simgrid::surf::As *path_dst[ROUTING_HIERARCHY_MAXDEPTH];
   int index_src = 0;
   int index_dst = 0;
-  simgrid::surf::As *current;
   simgrid::surf::As *current_src;
   simgrid::surf::As *current_dst;
   simgrid::surf::As *father;
 
-  /* (1) find the as where the src and dst are located */
-  sg_netcard_t src_data = src;
-  sg_netcard_t dst_data = dst;
-  src_as = src_data->containingAS();
-  dst_as = dst_data->containingAS();
-#ifndef NDEBUG
-  char* src_name = src_data->name();
-  char* dst_name = dst_data->name();
-#endif
+  /* (1) find the path to root of src and dst*/
+  simgrid::surf::As *src_as = src->containingAS();
+  simgrid::surf::As *dst_as = dst->containingAS();
 
-  xbt_assert(src_as && dst_as,
-             "Ask for route \"from\"(%s) or \"to\"(%s) no found", src_name, dst_name);
+  xbt_assert(src_as, "Host %s must be in an AS", src->name());
+  xbt_assert(dst_as, "Host %s must be in an AS", dst->name());
 
   /* (2) find the path to the root routing component */
-  for (current = src_as; current != NULL; current = current->father_) {
-    if (index_src >= ELEMENTS_FATHER_MAXDEPTH)
-      xbt_die("ELEMENTS_FATHER_MAXDEPTH should be increased for path_src");
+  for (simgrid::surf::As *current = src_as; current != NULL; current = current->father_) {
+    if (index_src >= ROUTING_HIERARCHY_MAXDEPTH)
+      xbt_die("ROUTING_HIERARCHY_MAXDEPTH should be increased for element %s", src->name());
     path_src[index_src++] = current;
   }
-  for (current = dst_as; current != NULL; current = current->father_) {
-    if (index_dst >= ELEMENTS_FATHER_MAXDEPTH)
-      xbt_die("ELEMENTS_FATHER_MAXDEPTH should be increased for path_dst");
+  for (simgrid::surf::As *current = dst_as; current != NULL; current = current->father_) {
+    if (index_dst >= ROUTING_HIERARCHY_MAXDEPTH)
+      xbt_die("ROUTING_HIERARCHY_MAXDEPTH should be increased for path_dst");
     path_dst[index_dst++] = current;
   }
 
@@ -309,24 +301,20 @@ static void elements_father(sg_netcard_t src, sg_netcard_t dst,
   *res_src = current_src;       /* second the first different father of src */
   *res_dst = current_dst;       /* three  the first different father of dst */
 
-#undef ELEMENTS_FATHER_MAXDEPTH
+#undef ROUTING_HIERARCHY_MAXDEPTH
 }
 
-/* Global Business methods */
-
 /**
- * \brief Recursive function for get_route_latency
+ * \brief Recursive function for get_route_and_latency
  *
  * \param src the source host name
  * \param dst the destination host name
  * \param *route the route where the links are stored. It is either NULL or a ready to use dynar
  * \param *latency the latency, if needed
  *
- * This function is called by "get_route" and "get_latency". It allows to walk
- * recursively through the ASes tree.
+ * This function is called by "get_route" and "get_latency". It allows to walk recursively through the ASes tree.
  */
-static void _get_route_and_latency(
-  simgrid::surf::NetCard *src, simgrid::surf::NetCard *dst,
+static void _get_route_and_latency(simgrid::surf::NetCard *src, simgrid::surf::NetCard *dst,
   xbt_dynar_t * links, double *latency)
 {
   s_sg_platf_route_cbarg_t route = SG_PLATF_ROUTE_INITIALIZER;
@@ -341,16 +329,11 @@ static void _get_route_and_latency(
   XBT_DEBUG("elements_father: common father '%s' src_father '%s' dst_father '%s'",
       common_father->name_, src_father->name_, dst_father->name_);
 
-  /* Check whether a direct bypass is defined */
-  sg_platf_route_cbarg_t e_route_bypass = NULL;
-  //FIXME:REMOVE:if (common_father->get_bypass_route)
-
-  e_route_bypass = common_father->getBypassRoute(src, dst, latency);
-
-  /* Common ancestor is kind enough to declare a bypass route from src to dst -- use it and bail out */
-  if (e_route_bypass) {
-    xbt_dynar_merge(links, &e_route_bypass->link_list);
-    routing_route_free(e_route_bypass);
+  /* Check whether a direct bypass is defined. If so, use it and bail out */
+  sg_platf_route_cbarg_t bypassed_route = common_father->getBypassRoute(src, dst, latency);
+  if (bypassed_route) {
+    xbt_dynar_merge(links, &bypassed_route->link_list);
+    routing_route_free(bypassed_route);
     return;
   }
 
@@ -358,34 +341,25 @@ static void _get_route_and_latency(
   if (src_father == dst_father) {       /* SURF_ROUTING_BASE */
     route.link_list = *links;
     common_father->getRouteAndLatency(src, dst, &route, latency);
-    // if vivaldi latency+=vivaldi(src,dst)
     return;
   }
 
   /* Not in the same AS, no bypass. We'll have to find our path between the ASes recursively*/
 
   route.link_list = xbt_dynar_new(sizeof(Link*), NULL);
-  // Find the net_card corresponding to father
-  simgrid::surf::NetCard *src_father_netcard = src_father->netcard_;
-  simgrid::surf::NetCard *dst_father_netcard = dst_father->netcard_;
-
-  common_father->getRouteAndLatency(src_father_netcard, dst_father_netcard,
-                                    &route, latency);
 
+  common_father->getRouteAndLatency(src_father->netcard_, dst_father->netcard_, &route, latency);
   xbt_assert((route.gw_src != NULL) && (route.gw_dst != NULL),
       "bad gateways for route from \"%s\" to \"%s\"", src->name(), dst->name());
 
-  sg_netcard_t src_gateway_net_elm = route.gw_src;
-  sg_netcard_t dst_gateway_net_elm = route.gw_dst;
-
   /* If source gateway is not our source, we have to recursively find our way up to this point */
-  if (src != src_gateway_net_elm)
-    _get_route_and_latency(src, src_gateway_net_elm, links, latency);
+  if (src != route.gw_src)
+    _get_route_and_latency(src, route.gw_src, links, latency);
   xbt_dynar_merge(links, &route.link_list);
 
   /* If dest gateway is not our destination, we have to recursively find our way from this point */
-  if (dst_gateway_net_elm != dst)
-    _get_route_and_latency(dst_gateway_net_elm, dst, links, latency);
+  if (route.gw_dst != dst)
+    _get_route_and_latency(route.gw_dst, dst, links, latency);
 
 }
 
@@ -423,16 +397,9 @@ void RoutingPlatf::getRouteAndLatency(NetCard *src, NetCard *dst, xbt_dynar_t* r
   }
 
   _get_route_and_latency(src, dst, route, latency);
-
-  xbt_assert(!latency || *latency >= 0.0,
-             "negative latency on route between \"%s\" and \"%s\"", src->name(), dst->name());
 }
 
-xbt_dynar_t RoutingPlatf::getOneLinkRoutes(){
-  return recursiveGetOneLinkRoutes(root_);
-}
-
-xbt_dynar_t RoutingPlatf::recursiveGetOneLinkRoutes(As *rc)
+static xbt_dynar_t _recursiveGetOneLinkRoutes(As *rc)
 {
   xbt_dynar_t ret = xbt_dynar_new(sizeof(Onelink*), xbt_free_f);
 
@@ -446,13 +413,17 @@ xbt_dynar_t RoutingPlatf::recursiveGetOneLinkRoutes(As *rc)
   xbt_dict_cursor_t cursor = NULL;
   AS_t rc_child;
   xbt_dict_foreach(rc->sons_, cursor, key, rc_child) {
-    xbt_dynar_t onelink_child = recursiveGetOneLinkRoutes(rc_child);
+    xbt_dynar_t onelink_child = _recursiveGetOneLinkRoutes(rc_child);
     if (onelink_child)
       xbt_dynar_merge(&ret,&onelink_child);
   }
   return ret;
 }
 
+xbt_dynar_t RoutingPlatf::getOneLinkRoutes(){
+  return _recursiveGetOneLinkRoutes(root_);
+}
+
 }
 }
 
index 9aed674..0f398c5 100644 (file)
@@ -147,7 +147,6 @@ public:
   void *loopback_;
   xbt_dynar_t lastRoute_ = xbt_dynar_new(sizeof(Link*),NULL);
   xbt_dynar_t getOneLinkRoutes(void);
-  xbt_dynar_t recursiveGetOneLinkRoutes(As *rc);
   void getRouteAndLatency(NetCard *src, NetCard *dst, xbt_dynar_t * links, double *latency);
 };