From: Millian Poquet Date: Mon, 24 Sep 2018 15:25:43 +0000 (+0200) Subject: [examples] add s4u-barrier X-Git-Tag: v3_21~46^2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/b18f40732fa2d18aeb474a21dd114d0b7f3ce50e [examples] add s4u-barrier --- diff --git a/examples/s4u/CMakeLists.txt b/examples/s4u/CMakeLists.txt index 8d9a11edbd..42f6f4217b 100644 --- a/examples/s4u/CMakeLists.txt +++ b/examples/s4u/CMakeLists.txt @@ -4,6 +4,7 @@ foreach (example actor-create actor-daemon actor-join actor-kill actor-lifetime actor-migration actor-suspend actor-yield app-chainsend app-pingpong app-token-ring async-ready async-wait async-waitany async-waitall async-waituntil + barrier cloud-capping cloud-migration cloud-simple energy-exec energy-boot energy-link energy-vm engine-filtering @@ -100,6 +101,7 @@ foreach(example actor-create actor-daemon actor-join actor-kill actor-lifetime actor-migration actor-suspend actor-yield app-bittorrent app-chainsend app-masterworkers app-pingpong app-token-ring async-ready async-wait async-waitall async-waitany async-waituntil + barrier cloud-capping cloud-migration cloud-simple dht-chord dht-kademlia energy-exec energy-boot energy-link energy-vm diff --git a/examples/s4u/barrier/s4u-barrier.cpp b/examples/s4u/barrier/s4u-barrier.cpp new file mode 100644 index 0000000000..7be265965a --- /dev/null +++ b/examples/s4u/barrier/s4u-barrier.cpp @@ -0,0 +1,50 @@ +/* Copyright (c) 2006-2018. 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. */ + +#include +#include "simgrid/s4u.hpp" + +XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "a sample log category"); + +/// Wait on the barrier then leave +static void worker(std::shared_ptr barrier) +{ + XBT_INFO("Waiting on the barrier"); + barrier->wait(); + + XBT_INFO("Bye"); +} + +/// Spawn process_count-1 workers and do a barrier with them +static void master(int process_count) +{ + std::shared_ptr barrier(new simgrid::s4u::Barrier(process_count)); + + XBT_INFO("Spawning %d workers", process_count-1); + for (int i = 0; i < process_count-1; i++) + { + simgrid::s4u::Actor::create("worker", simgrid::s4u::Host::by_name("Jupiter"), worker, barrier); + } + + XBT_INFO("Waiting on the barrier"); + barrier->wait(); + + XBT_INFO("Bye"); +} + +int main(int argc, char **argv) +{ + // Parameter: Number of processes in the barrier + xbt_assert(argc >= 2, "Usage: %s \n", argv[0]); + int process_count = std::stoi(argv[1]); + xbt_assert(process_count > 0, " must be greater than 0"); + + simgrid::s4u::Engine e(&argc, argv); + e.load_platform("../../platforms/two_hosts.xml"); + simgrid::s4u::Actor::create("master", simgrid::s4u::Host::by_name("Tremblay"), master, process_count); + e.run(); + + return 0; +} diff --git a/examples/s4u/barrier/s4u-barrier.tesh b/examples/s4u/barrier/s4u-barrier.tesh new file mode 100644 index 0000000000..d1d07a2584 --- /dev/null +++ b/examples/s4u/barrier/s4u-barrier.tesh @@ -0,0 +1,45 @@ +#!/usr/bin/env tesh + +$ $SG_TEST_EXENV ${bindir:=.}/s4u-barrier 1 +> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Spawning 0 workers +> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Bye + +$ $SG_TEST_EXENV ${bindir:=.}/s4u-barrier 2 +> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Spawning 1 workers +> [Jupiter:worker:(2) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Bye +> [Jupiter:worker:(2) 0.000000] [s4u_test/INFO] Bye + +$ $SG_TEST_EXENV ${bindir:=.}/s4u-barrier 3 +> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Spawning 2 workers +> [Jupiter:worker:(2) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Jupiter:worker:(3) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Bye +> [Jupiter:worker:(2) 0.000000] [s4u_test/INFO] Bye +> [Jupiter:worker:(3) 0.000000] [s4u_test/INFO] Bye + +$ $SG_TEST_EXENV ${bindir:=.}/s4u-barrier 10 +> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Spawning 9 workers +> [Jupiter:worker:(2) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Jupiter:worker:(3) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Jupiter:worker:(4) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Jupiter:worker:(5) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Jupiter:worker:(6) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Jupiter:worker:(7) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Jupiter:worker:(8) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Jupiter:worker:(9) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Jupiter:worker:(10) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Waiting on the barrier +> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Bye +> [Jupiter:worker:(2) 0.000000] [s4u_test/INFO] Bye +> [Jupiter:worker:(3) 0.000000] [s4u_test/INFO] Bye +> [Jupiter:worker:(4) 0.000000] [s4u_test/INFO] Bye +> [Jupiter:worker:(5) 0.000000] [s4u_test/INFO] Bye +> [Jupiter:worker:(6) 0.000000] [s4u_test/INFO] Bye +> [Jupiter:worker:(7) 0.000000] [s4u_test/INFO] Bye +> [Jupiter:worker:(8) 0.000000] [s4u_test/INFO] Bye +> [Jupiter:worker:(9) 0.000000] [s4u_test/INFO] Bye +> [Jupiter:worker:(10) 0.000000] [s4u_test/INFO] Bye