From: Martin Quinson Date: Thu, 27 Sep 2018 05:47:07 +0000 (+0200) Subject: Merge branch 'master' of github.com:simgrid/simgrid X-Git-Tag: v3_21~29 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/27a6474a3824ee6d14b321a6f08fadafb7b430ab?hp=3297da9f47ce18371941b2b48a2f4018b4793ced Merge branch 'master' of github.com:simgrid/simgrid --- diff --git a/docs/source/app_smpi.rst b/docs/source/app_smpi.rst index bd04aa09c3..53e0f23a74 100644 --- a/docs/source/app_smpi.rst +++ b/docs/source/app_smpi.rst @@ -34,7 +34,7 @@ Our goal is to enable the study of **unmodified MPI applications**. Some constructs and features are still missing, but we can probably add them on demand. If you already used MPI before, SMPI should sound very familiar to you: Use smpicc instead of mpicc, and smpirun instead -of mpirun. The main difference is that smpirun takes a :ref:`virtual +of mpirun. The main difference is that smpirun takes a :ref:`simulated platform ` as an extra parameter. For **further scalability**, you may modify your code to speed up your diff --git a/docs/source/conf.py b/docs/source/conf.py index 56a3dd68e1..a70134e48d 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -29,7 +29,7 @@ if read_the_docs_build: # -- Project information ----------------------------------------------------- project = u'SimGrid' -copyright = u'2018, The SimGrid Team' +copyright = u'2002-2018, The SimGrid Team' author = u'The SimGrid Team' # The short X.Y version diff --git a/docs/source/img/graphical-toc.svg b/docs/source/img/graphical-toc.svg index de43cf2e8d..a6b617203e 100644 --- a/docs/source/img/graphical-toc.svg +++ b/docs/source/img/graphical-toc.svg @@ -24,9 +24,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="0.49497475" - inkscape:cx="-267.7826" - inkscape:cy="12.793361" + inkscape:zoom="1.979899" + inkscape:cx="196.07267" + inkscape:cy="183.99119" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="true" @@ -2400,8 +2400,8 @@ sodipodi:nodetypes="cccccccc" /> + id="a6154" + transform="translate(-0.37797619,-16.630952)"> Virtual Simulated + id="a6149" + transform="translate(-0.52916667)">    The S4U Interface    The SMPI Interface - Describing the Virtual Platform + Describing the Simulated Platform Describing the Experimental Scenario    Configuring SimGrid The SimGrid Models @@ -39,9 +39,3 @@ Welcome to SimGrid's documentation! :caption: API Reference: API - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`search` diff --git a/docs/source/intro_concepts.rst b/docs/source/intro_concepts.rst index e827426687..b33ab776a2 100644 --- a/docs/source/intro_concepts.rst +++ b/docs/source/intro_concepts.rst @@ -48,10 +48,10 @@ Any SimGrid study entails the following components: parallel application using for example the MPI interface :ref:`(more info) `. - - The **Virtual Platform**. This is a description of a given + - The **Simulated Platform**. This is a description of a given distributed system (machines, links, disks, clusters, etc). Most of the platform files are written in XML althrough a Lua interface is - under development. SimGrid makes it easy to augment the Virtual + under development. SimGrid makes it easy to augment the Simulated Platform with a Dynamic Scenario where for example the links are slowed down (because of external usage) or the machines fail. You have even support to specify the applicative workload that you want @@ -61,13 +61,13 @@ Any SimGrid study entails the following components: - The application's **Deployment Description**. In SimGrid terminology, the application is an inert set of source files and binaries. To make it run, you have to describe how your application - should be deployed on the virtual platform. You need to specify + should be deployed on the simulated platform. You need to specify which process is mapped on which machine, along with their parameters :ref:`(more info) `. - - The **Platform Models**. They describe how the virtual platform + - The **Platform Models**. They describe how the simulated platform reacts to the actions of the application. For example, they compute - the time taken by a given communication on the virtual platform. + the time taken by a given communication on the simulated platform. These models are already included in SimGrid, and you only need to pick one and maybe tweak its configuration to get your results :ref:`(more info) `. @@ -84,7 +84,7 @@ Here are some questions on which SimGrid is particularly relevant: they contribute to compares to the existing solutions from the literature. - - **Design the best Virtual Platform for a given Application.** + - **Design the best [Simulated] Platform for a given Application.** Tweaking the platform file is much easier than building a new real platform for testing purpose. SimGrid also allows for the co-design of the platform and the application by modifying both of them. @@ -119,7 +119,7 @@ SimGrid Execution Modes Depending on the intended study, SimGrid can be run in several execution modes. **Simulation Mode**. This is the most common execution mode, where you want -to study how your application behaves on the virtual platform under +to study how your application behaves on the simulated platform under the experimental scenario. In this mode, SimGrid can provide information about the time taken by @@ -183,7 +183,7 @@ what you are interested in. You are probably looking for a way to run each computation kernel only once, save on disk the time it takes and some other metadata. This code block can then be skipped in simulation and replaced by a synthetic block using the cached information. The -virtual platform will take this block into account without requesting +simulated platform will take this block into account without requesting the real hosting machine to benchmark it. SimGrid Limits diff --git a/docs/source/platform.rst b/docs/source/platform.rst index b2209b082f..295d23e831 100644 --- a/docs/source/platform.rst +++ b/docs/source/platform.rst @@ -12,5 +12,5 @@

-Describing your Virtual Platform -================================ +Describing your Simulated Platform +================================== diff --git a/docs/source/tuto_s4u.rst b/docs/source/tuto_s4u.rst index 18c43c4131..df2feec376 100644 --- a/docs/source/tuto_s4u.rst +++ b/docs/source/tuto_s4u.rst @@ -143,7 +143,7 @@ That being said, an algorithm alone is not enough to define a simulation: SimGrid is a library, not a program. So you need to define your own ``main()`` function as follows. This function is in charge of creating a SimGrid simulation engine (on line 3), register the actor -functions to the engine (on lines 7 and 8), load the virtual platform +functions to the engine (on lines 7 and 8), load the simulated platform from its description file (on line 11), map actors onto that platform (on line 12) and run the simulation until its completion on line 15. @@ -159,7 +159,7 @@ file. Platform File ............. -Platform files define the virtual platform on which the provided +Platform files define the simulated platform on which the provided application will take place. In contains one or several **Network Zone** |api_s4u_NetZone|_ that contain both |Host|_ and |Link|_ Resources, as well as routing information. diff --git a/docs/source/tuto_smpi.rst b/docs/source/tuto_smpi.rst index 434a16152d..3b26c93eb3 100644 --- a/docs/source/tuto_smpi.rst +++ b/docs/source/tuto_smpi.rst @@ -3,6 +3,11 @@ Simulating MPI Applications =========================== +.. warning:: This document is still in early stage. You can try to + take this tutorial, but should not be surprised if things fall short. + It will be completed for the next release, v3.22, released by the end + of 2018. + Discover SMPI ------------- @@ -49,7 +54,7 @@ To start using SMPI, you just need to compile your application with ``mpiff``, or with ``smpicxx`` instead of ``mpicxx``. Then, the only difference between the classical ``mpirun`` and the new ``smpirun`` is that it requires a new parameter ``-platform`` with a file describing -the virtual platform on which your application shall run. +the simulated platform on which your application shall run. Internally, all ranks of your application are executed as threads of a single unix process. That's not a problem if your application has @@ -68,7 +73,7 @@ Describing Your Platform ------------------------ As a SMPI user, you are supposed to provide a description of your -virtual platform, that is mostly a set of simulated hosts and network +simulated platform, that is mostly a set of simulated hosts and network links with some performance characteristics. SimGrid provides a plenty of :ref:`documentation ` and examples (in the `examples/platforms `_ diff --git a/include/simgrid/s4u/Comm.hpp b/include/simgrid/s4u/Comm.hpp index c9016f9da2..1b36069011 100644 --- a/include/simgrid/s4u/Comm.hpp +++ b/include/simgrid/s4u/Comm.hpp @@ -42,22 +42,22 @@ public: /*! take a vector s4u::CommPtr and return the rank of the first finished one (or -1 if none is done). */ static int test_any(std::vector * comms); - Activity* start() override; - Activity* wait() override; - Activity* wait_for(double timeout) override; + Comm* start() override; + Comm* wait() override; + Comm* wait_for(double timeout) override; bool test() override; /** Start the comm, and ignore its result. It can be completely forgotten after that. */ - Activity* detach(); + Comm* detach(); /** Start the comm, and ignore its result. It can be completely forgotten after that. */ - Activity* detach(void (*clean_function)(void*)) + Comm* detach(void (*clean_function)(void*)) { clean_fun_ = clean_function; return detach(); } /** Sets the maximal communication rate (in byte/sec). Must be done before start */ - Activity* set_rate(double rate); + Comm* set_rate(double rate); /** Specify the data to send. * @@ -66,7 +66,7 @@ public: * you can send a short buffer in your simulator, that represents a very large message * in the simulated world, or the opposite. */ - Activity* set_src_data(void* buff); + Comm* set_src_data(void* buff); /** Specify the size of the data to send. Not to be mixed with @ref Activity::set_remaining() * * That's the size of the data to actually copy in the simulator (ie, the data passed with Activity::set_src_data()). @@ -74,7 +74,7 @@ public: * you can send a short buffer in your simulator, that represents a very large message * in the simulated world, or the opposite. */ - Activity* set_src_data_size(size_t size); + Comm* set_src_data_size(size_t size); /** Specify the data to send and its size. Don't mix the size with @ref Activity::set_remaining() * * This is way will get actually copied over to the receiver. @@ -82,20 +82,20 @@ public: * you can send a short buffer in your simulator, that represents a very large message * in the simulated world, or the opposite. */ - Activity* set_src_data(void* buff, size_t size); + Comm* set_src_data(void* buff, size_t size); /** Specify where to receive the data. * * That's a buffer where the sent data will be copied */ - Activity* set_dst_data(void** buff); + Comm* set_dst_data(void** buff); /** Specify the buffer in which the data should be received * * That's a buffer where the sent data will be copied */ - Activity* set_dst_data(void** buff, size_t size); + Comm* set_dst_data(void** buff, size_t size); /** Retrieve the size of the received data. Not to be mixed with @ref Activity::set_remaining() */ size_t get_dst_data_size(); - Activity* cancel() override; + Comm* cancel() override; /** Retrieve the mailbox on which this comm acts */ MailboxPtr get_mailbox(); diff --git a/include/simgrid/s4u/Exec.hpp b/include/simgrid/s4u/Exec.hpp index 18f00283e9..904540457f 100644 --- a/include/simgrid/s4u/Exec.hpp +++ b/include/simgrid/s4u/Exec.hpp @@ -31,10 +31,10 @@ public: static simgrid::xbt::signal on_start; static simgrid::xbt::signal on_completion; - Activity* start() override; - Activity* wait() override; - Activity* wait_for(double timeout) override; - Activity* cancel() override; + Exec* start() override; + Exec* wait() override; + Exec* wait_for(double timeout) override; + Exec* cancel() override; bool test() override; ExecPtr set_priority(double priority); diff --git a/include/simgrid/s4u/Io.hpp b/include/simgrid/s4u/Io.hpp index 2fb16f1c6f..4e7ae31a54 100644 --- a/include/simgrid/s4u/Io.hpp +++ b/include/simgrid/s4u/Io.hpp @@ -33,10 +33,10 @@ public: ~Io() = default; - Activity* start() override; - Activity* wait() override; - Activity* wait_for(double timeout) override; - Activity* cancel() override; + Io* start() override; + Io* wait() override; + Io* wait_for(double timeout) override; + Io* cancel() override; bool test() override; double get_remaining() override; diff --git a/src/s4u/s4u_Comm.cpp b/src/s4u/s4u_Comm.cpp index aed053d988..658097ea50 100644 --- a/src/s4u/s4u_Comm.cpp +++ b/src/s4u/s4u_Comm.cpp @@ -57,7 +57,7 @@ void Comm::wait_all(std::vector* comms) comm->wait(); } -Activity* Comm::set_rate(double rate) +Comm* Comm::set_rate(double rate) { xbt_assert(state_ == State::INITED, "You cannot use %s() once your communication started (not implemented)", __FUNCTION__); @@ -65,7 +65,7 @@ Activity* Comm::set_rate(double rate) return this; } -Activity* Comm::set_src_data(void* buff) +Comm* Comm::set_src_data(void* buff) { xbt_assert(state_ == State::INITED, "You cannot use %s() once your communication started (not implemented)", __FUNCTION__); @@ -73,14 +73,14 @@ Activity* Comm::set_src_data(void* buff) src_buff_ = buff; return this; } -Activity* Comm::set_src_data_size(size_t size) +Comm* Comm::set_src_data_size(size_t size) { xbt_assert(state_ == State::INITED, "You cannot use %s() once your communication started (not implemented)", __FUNCTION__); src_buff_size_ = size; return this; } -Activity* Comm::set_src_data(void* buff, size_t size) +Comm* Comm::set_src_data(void* buff, size_t size) { xbt_assert(state_ == State::INITED, "You cannot use %s() once your communication started (not implemented)", __FUNCTION__); @@ -90,7 +90,7 @@ Activity* Comm::set_src_data(void* buff, size_t size) src_buff_size_ = size; return this; } -Activity* Comm::set_dst_data(void** buff) +Comm* Comm::set_dst_data(void** buff) { xbt_assert(state_ == State::INITED, "You cannot use %s() once your communication started (not implemented)", __FUNCTION__); @@ -103,7 +103,7 @@ size_t Comm::get_dst_data_size() xbt_assert(state_ == State::FINISHED, "You cannot use %s before your communication terminated", __FUNCTION__); return dst_buff_size_; } -Activity* Comm::set_dst_data(void** buff, size_t size) +Comm* Comm::set_dst_data(void** buff, size_t size) { xbt_assert(state_ == State::INITED, "You cannot use %s() once your communication started (not implemented)", __FUNCTION__); @@ -114,7 +114,7 @@ Activity* Comm::set_dst_data(void** buff, size_t size) return this; } -Activity* Comm::start() +Comm* Comm::start() { xbt_assert(state_ == State::INITED, "You cannot use %s() once your communication started (not implemented)", __FUNCTION__); @@ -137,7 +137,7 @@ Activity* Comm::start() } /** @brief Block the calling actor until the communication is finished */ -Activity* Comm::wait() +Comm* Comm::wait() { return this->wait_for(-1); } @@ -148,7 +148,7 @@ Activity* Comm::wait() * * @param timeout the amount of seconds to wait for the comm termination. * Negative values denote infinite wait times. 0 as a timeout returns immediately. */ -Activity* Comm::wait_for(double timeout) +Comm* Comm::wait_for(double timeout) { switch (state_) { case State::FINISHED: @@ -190,7 +190,7 @@ int Comm::test_any(std::vector* comms) return res; } -Activity* Comm::detach() +Comm* Comm::detach() { xbt_assert(state_ == State::INITED, "You cannot use %s() once your communication started (not implemented)", __FUNCTION__); @@ -199,7 +199,7 @@ Activity* Comm::detach() return start(); } -Activity* Comm::cancel() +Comm* Comm::cancel() { simgrid::simix::simcall([this] { dynamic_cast(pimpl_.get())->cancel(); }); state_ = State::CANCELED; diff --git a/src/s4u/s4u_Exec.cpp b/src/s4u/s4u_Exec.cpp index 8250f946a0..884433ac64 100644 --- a/src/s4u/s4u_Exec.cpp +++ b/src/s4u/s4u_Exec.cpp @@ -15,7 +15,7 @@ namespace s4u { simgrid::xbt::signal s4u::Exec::on_start; simgrid::xbt::signal s4u::Exec::on_completion; -Activity* Exec::start() +Exec* Exec::start() { pimpl_ = simcall_execution_start(name_, tracing_category_, flops_amount_, 1. / priority_, bound_, host_); state_ = State::STARTED; @@ -23,14 +23,14 @@ Activity* Exec::start() return this; } -Activity* Exec::cancel() +Exec* Exec::cancel() { simgrid::simix::simcall([this] { dynamic_cast(pimpl_.get())->cancel(); }); state_ = State::CANCELED; return this; } -Activity* Exec::wait() +Exec* Exec::wait() { if (state_ == State::INITED) start(); @@ -40,7 +40,7 @@ Activity* Exec::wait() return this; } -Activity* Exec::wait_for(double timeout) +Exec* Exec::wait_for(double timeout) { THROW_UNIMPLEMENTED; return this; diff --git a/src/s4u/s4u_Io.cpp b/src/s4u/s4u_Io.cpp index 25cb01261e..41a4cb3620 100644 --- a/src/s4u/s4u_Io.cpp +++ b/src/s4u/s4u_Io.cpp @@ -14,7 +14,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_io, s4u_activity, "S4U asynchronous IOs"); namespace simgrid { namespace s4u { -Activity* Io::start() +Io* Io::start() { Activity::set_remaining(size_); pimpl_ = simix::simcall([this] { @@ -24,21 +24,21 @@ Activity* Io::start() return this; } -Activity* Io::cancel() +Io* Io::cancel() { simgrid::simix::simcall([this] { dynamic_cast(pimpl_.get())->cancel(); }); state_ = State::CANCELED; return this; } -Activity* Io::wait() +Io* Io::wait() { simcall_io_wait(pimpl_); state_ = State::FINISHED; return this; } -Activity* Io::wait_for(double timeout) +Io* Io::wait_for(double timeout) { THROW_UNIMPLEMENTED; return this;