Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' into actor-priority
authorZitagcc <toufik.boubehziz@inria.fr>
Wed, 18 Oct 2017 13:51:08 +0000 (15:51 +0200)
committerGitHub <noreply@github.com>
Wed, 18 Oct 2017 13:51:08 +0000 (15:51 +0200)
1  2 
examples/s4u/CMakeLists.txt
examples/s4u/README.doc
include/simgrid/s4u/Actor.hpp
src/s4u/s4u_actor.cpp

@@@ -1,5 -1,5 +1,6 @@@
  foreach (example actions-comm actions-storage 
-                  actor-create actor-daemon actor-kill actor-migration actor-suspend actor-priority
 -                 actor-create actor-daemon actor-execute actor-kill actor-lifetime actor-migration actor-suspend 
++                 actor-create actor-daemon actor-kill actor-migration actor-suspend
++                 actor-create actor-daemon actor-execute actor-kill actor-lifetime actor-migration actor-suspend actor-priority
                   app-masterworker app-pingpong app-token-ring
                 async-wait async-waitany async-waitall
                 plugin-hostload io mutex)
@@@ -32,21 -32,24 +33,26 @@@ endforeach(
  set(examples_src  ${examples_src}                                                                          PARENT_SCOPE)
  set(tesh_files    ${tesh_files}   ${CMAKE_CURRENT_SOURCE_DIR}/app-bittorrent/s4u-app-bittorrent.tesh
                                    ${CMAKE_CURRENT_SOURCE_DIR}/dht-chord/s4u-dht-chord.tesh
 +                                  ${CMAKE_CURRENT_SOURCE_DIR}/actor-priority/s4u-actor-priority.tesh
+                                   ${CMAKE_CURRENT_SOURCE_DIR}/actor-lifetime/s4u-actor-lifetime.tesh
                                    ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/s4u-async-wait.tesh
                                    ${CMAKE_CURRENT_SOURCE_DIR}/async-waitany/s4u-async-waitany.tesh
-                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-waitall/s4u-async-waitall.tesh         PARENT_SCOPE)
+                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-waitall/s4u-async-waitall.tesh
+                                   ${CMAKE_CURRENT_SOURCE_DIR}/actor-execute/s4u-actor-execute.tesh       
+                   PARENT_SCOPE)
  set(xml_files     ${xml_files}    ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm-split_d.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm_d.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/actions-storage/s4u-actions-storage_d.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/actor-create/s4u-actor-create_d.xml
 +                                  ${CMAKE_CURRENT_SOURCE_DIR}/actor-priority/s4u-actor-priority_d.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/app-bittorrent/s4u-app-bittorrent_d.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/app-masterworker/s4u-app-masterworker_d.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/async-waitany/s4u-async-waitany_d.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/async-waitall/s4u-async-waitall_d.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/s4u-async-wait_d.xml
-                                   ${CMAKE_CURRENT_SOURCE_DIR}/dht-chord/s4u-dht-chord_d.xml                PARENT_SCOPE)
+                                   ${CMAKE_CURRENT_SOURCE_DIR}/dht-chord/s4u-dht-chord_d.xml
+                                   ${CMAKE_CURRENT_SOURCE_DIR}/actor-lifetime/s4u-actor-lifetime_d.xml
+                 PARENT_SCOPE)
  set(txt_files     ${txt_files}    ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm-split-p0.txt
                                    ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm-split-p1.txt
                                    ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm.txt
@@@ -54,9 -57,9 +60,9 @@@
                                    ${CMAKE_CURRENT_SOURCE_DIR}/README.doc                                   PARENT_SCOPE)
  
  foreach(example actions-comm actions-storage 
-                 actor-create actor-daemon actor-kill actor-migration actor-suspend
+                 actor-create actor-daemon actor-execute actor-kill actor-lifetime actor-migration actor-suspend
                  app-bittorrent app-masterworker app-pingpong app-token-ring 
 -              async-wait async-waitall async-waitany
 +              async-wait async-waitall async-waitany actor-priority
                dht-chord plugin-hostload io mutex)
    ADD_TESH_FACTORIES(s4u-${example} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_CURRENT_BINARY_DIR}/${example} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_HOME_DIRECTORY}/examples/s4u/${example} s4u-${example}.tesh)
  endforeach()
diff --combined examples/s4u/README.doc
@@@ -26,9 -26,9 +26,9 @@@ documentation, but it should remain rea
      Shows how to start your actors to populate your simulation.
  
    - <b>Ping Pong</b>: @ref examples/s4u/app-pingpong/s4u-app-pingpong.c\n
-    It's hard to think of a simpler example: it is just sending one message back and forth.
-    The tesh file laying in the directory show how to start the simulator binary, highlighting how to pass options to 
-    the simulators (as detailed in Section \ref options). 
+     This simple example just sends one message back and forth.
+     The tesh file laying in the directory show how to start the simulator binary, highlighting how to pass options to 
+     the simulators (as detailed in Section \ref options). 
  
    - <b>Token ring:</b> @ref examples/s4u/app-token-ring/s4u-app-token-ring.cpp \n
      Shows how to implement a classical communication pattern, where a token is exchanged along a ring to reach every
@@@ -38,7 -38,7 +38,7 @@@
      Another good old example, where one Master process has a bunch of task to dispatch to a set of several Worker 
      processes. 
      
- @section msg_ex_async Asynchronous communications
+ @section s4u_ex_async Asynchronous communications
  
   - <b>Basic asynchronous communications</b>. 
     @ref examples/s4u/async-wait/s4u-async-wait.cpp \n
@@@ -57,7 -57,7 +57,7 @@@
     @ref examples/s4u/async-waitany/s4u-async-waitany.cpp\n
     The @ref simgrid::s4u::Comm::wait_any() function is useful when you want to block
     until one activity of the set completes, no matter which terminates
-    first.   
+    first.    
  
  @section s4u_ex_actors Acting on Actors
  
      @ref examples/s4u/actor-create/s4u-actor-create.cpp \n
      Most actors are started from the deployment XML file, but they exist other methods.
  
+   - <b>Actors using CPU time</b>.
+     @ref examples/s4u/actor-execute/s4u-actor-execute.cpp \n
+     The computations done in your program are not reported to the
+     simulated world, unless you explicitely request the simulator to pause
+     the actor until a given amount of flops gets computed on its simulated
+     host.
    - <b>Daemonize actors</b>
      @ref examples/s4u/actor-daemon/s4u-actor-daemon.cpp \n
      Some actors may be intended to simulate daemons that run in background. This example show how to transform a regular
      Actors can be suspended and resumed during their executions
      thanks to the @ref suspend and @ref resume methods.
  
 +    - <b>Priority actors</b>.
 +    @ref examples/s4u/actor-priority/s4u-actor-priority.cpp \n
 +    Actors can be launched according their priorities thanks to the @ref
 +     execution method.
 +
    - <b>Kill actors</b>.
      @ref examples/s4u/actor-kill/s4u-actor-kill.cpp \n
      Actors can forcefully stop other actors with the @ref kill method.
  
+   - <b>Controling the actor life cycle from the XML</b>.
+     @ref examples/s4u/actor-lifetime/s4u-actor-lifetime.cpp 
+     @ref examples/s4u/actor-lifetime/s4u-actor-lifetime_d.xml 
+     \n
+     You can specify a start time and a kill time in the deployment file.
    - <b>Migrating Actors</b>.
      @ref examples/s4u/actor-migration/s4u-actor-migration.cpp \n
      Actors can move or be moved from a host to another with the @ref migrate method.
@@@ -129,7 -137,10 +142,10 @@@ also the tesh files in the example dire
  @example examples/s4u/actor-create/s4u-actor-create.cpp
  @example examples/s4u/actor-create/s4u-actor-create_d.xml
  @example examples/s4u/actor-daemon/s4u-actor-daemon.cpp
+ @example examples/s4u/actor-execute/s4u-actor-execute.cpp
  @example examples/s4u/actor-kill/s4u-actor-kill.cpp
+ @example examples/s4u/actor-lifetime/s4u-actor-lifetime.cpp 
+ @example examples/s4u/actor-lifetime/s4u-actor-lifetime_d.xml 
  @example examples/s4u/actor-migration/s4u-actor-migration.cpp
  @example examples/s4u/actor-suspend/s4u-actor-suspend.cpp
  @example examples/s4u/app-token-ring/s4u-app-token-ring.cpp
@@@ -1,4 -1,4 +1,4 @@@
- /* Copyright (c) 2006-2016. The SimGrid Team. All rights reserved.          */
+ /* Copyright (c) 2006-2017. The SimGrid Team. All rights reserved.          */
  
  /* This program is free software; you can redistribute it and/or modify it
   * under the terms of the license (GNU LGPL) which comes with this package. */
@@@ -197,10 -197,10 +197,10 @@@ public
    /** This actor will be automatically terminated when the last non-daemon process finishes **/
    void daemonize();
  
-   /** Retrieves the name of that actor as a C string */
-   const char* getCname();
    /** Retrieves the name of that actor as a C++ string */
-   simgrid::xbt::string getName();
+   const simgrid::xbt::string& getName() const;
+   /** Retrieves the name of that actor as a C string */
+   const char* getCname() const;
    /** Retrieves the host on which that actor is running */
    s4u::Host* getHost();
    /** Retrieves the PID of that actor
@@@ -286,83 -286,83 +286,86 @@@ template <class Rep, class Period> inli
  {
    auto seconds = std::chrono::duration_cast<SimulationClockDuration>(duration);
    this_actor::sleep_for(seconds.count());
-   }
-   template<class Duration>
-   inline void sleep_until(const SimulationTimePoint<Duration>& timeout_time)
-   {
-     auto timeout_native = std::chrono::time_point_cast<SimulationClockDuration>(timeout_time);
-     this_actor::sleep_until(timeout_native.time_since_epoch().count());
-   }
+ }
  
-   XBT_ATTRIB_DEPRECATED_v320("Use sleep_for(): v3.20 will turn this warning into an error.") inline void sleep(
-       double duration)
-   {
-     return sleep_for(duration);
-   }
+ template <class Duration> inline void sleep_until(const SimulationTimePoint<Duration>& timeout_time)
+ {
+   auto timeout_native = std::chrono::time_point_cast<SimulationClockDuration>(timeout_time);
+   this_actor::sleep_until(timeout_native.time_since_epoch().count());
+ }
+ XBT_ATTRIB_DEPRECATED_v320("Use sleep_for(): v3.20 will turn this warning into an error.") inline void sleep(
+     double duration)
+ {
+   return sleep_for(duration);
+ }
  
  /** Block the actor, computing the given amount of flops */
  XBT_PUBLIC(void) execute(double flop);
+ /** Block the actor, computing the given amount of flops */
+ XBT_PUBLIC(void) execute(double flop);
  
 -/** Block the actor until it gets a message from the given mailbox.
 - *
 - * See \ref Comm for the full communication API (including non blocking communications).
 - */
 -XBT_PUBLIC(void*)
 -XBT_ATTRIB_DEPRECATED_v320("Use Mailbox::get(): v3.20 will turn this warning into an error.") recv(MailboxPtr chan);
 -XBT_PUBLIC(void*)
 -XBT_ATTRIB_DEPRECATED_v320("Use Mailbox::get(): v3.20 will turn this warning into an error.")
 -    recv(MailboxPtr chan, double timeout);
 -XBT_PUBLIC(CommPtr)
 -XBT_ATTRIB_DEPRECATED_v320("Use Mailbox::recv_async(): v3.20 will turn this warning into an error.")
 -    irecv(MailboxPtr chan, void** data);
 +  /** Block the actor, computing the given amount of flops and priority */
 +  XBT_PUBLIC(void) execute(double flop, double priority);
  
 -/** Block the actor until it delivers a message of the given simulated size to the given mailbox
 - *
 - * See \ref Comm for the full communication API (including non blocking communications).
 -*/
 -XBT_PUBLIC(void)
 -XBT_ATTRIB_DEPRECATED_v320("Use Mailbox::put(): v3.20 will turn this warning into an error.")
 -    send(MailboxPtr chan, void* payload, double simulatedSize); // 3.17
 -XBT_PUBLIC(void)
 -XBT_ATTRIB_DEPRECATED_v320("Use Mailbox::put(): v3.20 will turn this warning into an error.")
 -    send(MailboxPtr chan, void* payload, double simulatedSize, double timeout); // 3.17
 +  /** Block the actor until it gets a message from the given mailbox.
 +   *
 +   * See \ref Comm for the full communication API (including non blocking communications).
 +   */
 +  XBT_PUBLIC(void*)
 +  XBT_ATTRIB_DEPRECATED_v320("Use Mailbox::get(): v3.20 will turn this warning into an error.") recv(MailboxPtr chan);
 +  XBT_PUBLIC(void*)
 +  XBT_ATTRIB_DEPRECATED_v320("Use Mailbox::get(): v3.20 will turn this warning into an error.")
 +      recv(MailboxPtr chan, double timeout);
 +  XBT_PUBLIC(CommPtr)
 +  XBT_ATTRIB_DEPRECATED_v320("Use Mailbox::recv_async(): v3.20 will turn this warning into an error.")
 +      irecv(MailboxPtr chan, void** data);
 +
 +  /** Block the actor until it delivers a message of the given simulated size to the given mailbox
 +   *
 +   * See \ref Comm for the full communication API (including non blocking communications).
 +  */
 +  XBT_PUBLIC(void)
 +  XBT_ATTRIB_DEPRECATED_v320("Use Mailbox::put(): v3.20 will turn this warning into an error.")
 +      send(MailboxPtr chan, void* payload, double simulatedSize); // 3.17
 +  XBT_PUBLIC(void)
 +  XBT_ATTRIB_DEPRECATED_v320("Use Mailbox::put(): v3.20 will turn this warning into an error.")
 +      send(MailboxPtr chan, void* payload, double simulatedSize, double timeout); // 3.17
  
  XBT_PUBLIC(CommPtr)
  XBT_ATTRIB_DEPRECATED_v320("Use Mailbox::put_async(): v3.20 will turn this warning into an error.")
-       isend(MailboxPtr chan, void* payload, double simulatedSize);
+ XBT_PUBLIC(CommPtr)
+ XBT_ATTRIB_DEPRECATED_v320("Use Mailbox::put_async(): v3.20 will turn this warning into an error.")
+     isend(MailboxPtr chan, void* payload, double simulatedSize);
  
  /** @brief Returns the actor ID of the current actor (same as pid). */
  XBT_PUBLIC(aid_t) getPid();
+ /** @brief Returns the actor ID of the current actor (same as pid). */
+ XBT_PUBLIC(aid_t) getPid();
  
  /** @brief Returns the ancestor's actor ID of the current actor (same as ppid). */
  XBT_PUBLIC(aid_t) getPpid();
+ /** @brief Returns the ancestor's actor ID of the current actor (same as ppid). */
+ XBT_PUBLIC(aid_t) getPpid();
  
  /** @brief Returns the name of the current actor. */
  XBT_PUBLIC(std::string) getName();
+ /** @brief Returns the name of the current actor. */
+ XBT_PUBLIC(std::string) getName();
  
  /** @brief Returns the name of the host on which the process is running. */
  XBT_PUBLIC(Host*) getHost();
/** @brief Returns the name of the current actor as a C string. */
XBT_PUBLIC(const char*) getCname();
  
  /** @brief Suspend the actor. */
  XBT_PUBLIC(void) suspend();
/** @brief Returns the name of the host on which the process is running. */
XBT_PUBLIC(Host*) getHost();
  
  /** @brief Resume the actor. */
  XBT_PUBLIC(void) resume();
/** @brief Suspend the actor. */
XBT_PUBLIC(void) suspend();
  
-   XBT_PUBLIC(bool) isSuspended();
+ /** @brief Resume the actor. */
+ XBT_PUBLIC(void) resume();
  
-   /** @brief kill the actor. */
-   XBT_PUBLIC(void) kill();
+ XBT_PUBLIC(bool) isSuspended();
  
  /** @brief Add a function to the list of "on_exit" functions. */
  XBT_PUBLIC(void) onExit(int_f_pvoid_pvoid_t fun, void* data);
/** @brief kill the actor. */
XBT_PUBLIC(void) kill();
  
-   /** @brief Migrate the actor to a new host. */
-   XBT_PUBLIC(void) migrate(Host* new_host);
- };
+ /** @brief Add a function to the list of "on_exit" functions. */
+ XBT_PUBLIC(void) onExit(int_f_pvoid_pvoid_t fun, void* data);
+ /** @brief Migrate the actor to a new host. */
+ XBT_PUBLIC(void) migrate(Host* new_host);
+ }
  
  /** @} */
  
diff --combined src/s4u/s4u_actor.cpp
@@@ -85,14 -85,14 +85,14 @@@ void Actor::daemonize(
    simgrid::simix::kernelImmediate([this]() { pimpl_->daemonize(); });
  }
  
- const char* Actor::getCname()
+ const simgrid::xbt::string& Actor::getName() const
  {
-   return this->pimpl_->name.c_str();
+   return this->pimpl_->getName();
  }
  
- simgrid::xbt::string Actor::getName()
+ const char* Actor::getCname() const
  {
-   return this->pimpl_->name;
+   return this->pimpl_->getCname();
  }
  
  aid_t Actor::getPid()
@@@ -227,12 -227,6 +227,12 @@@ void execute(double flops
    simcall_execution_wait(s);
  }
  
 +void execute(double flops,double priority)
 +{
 +  smx_activity_t s = simcall_execution_start(nullptr,flops,1 / priority/*priority*/,0./*bound*/);
 +  simcall_execution_wait(s);
 +}
 +
  void* recv(MailboxPtr chan) // deprecated
  {
    return chan->get();
@@@ -275,7 -269,12 +275,12 @@@ aid_t getPpid(
  
  std::string getName()
  {
-   return SIMIX_process_self()->name;
+   return SIMIX_process_self()->getName();
+ }
+ const char* getCname()
+ {
+   return SIMIX_process_self()->getCname();
  }
  
  Host* getHost()