Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge pull request #193 from Takishipp/signals
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Fri, 30 Jun 2017 20:38:10 +0000 (22:38 +0200)
committerGitHub <noreply@github.com>
Fri, 30 Jun 2017 20:38:10 +0000 (22:38 +0200)
get sg_instr_new_router through a signal

506 files changed:
.cproject
.gitignore
.project
BuildSimGrid.sh
CMakeLists.txt
ChangeLog
NEWS
contrib/benchmarking_code_block/inject.h
doc/doxygen/inside.doc
doc/doxygen/inside_release.doc
doc/doxygen/module-msg.doc
doc/doxygen/module-surf.doc
doc/doxygen/options.doc
examples/java/cloud/migration/cloud_migration.tesh
examples/java/energy/pstate/energy_pstate.tesh
examples/java/energy/vm/EnergyVMRunner.java
examples/java/energy/vm/energy_vm.tesh
examples/msg/actions-comm/actions-comm.c
examples/msg/actions-storage/actions-storage.c
examples/msg/app-chainsend/broadcaster.h
examples/msg/app-chainsend/chainsend.c
examples/msg/app-chainsend/iterator.c
examples/msg/app-chainsend/peer.c
examples/msg/app-pingpong/app-pingpong.c
examples/msg/app-pingpong/app-pingpong.tesh
examples/msg/app-token-ring/app-token-ring.c
examples/msg/async-wait/async-wait.c
examples/msg/async-waitall/async-waitall.c
examples/msg/async-waitany/async-waitany.c
examples/msg/cloud-simple/cloud-simple.c
examples/msg/dht-chord/dht-chord.c
examples/msg/dht-pastry/dht-pastry.c
examples/msg/energy-onoff/energy-onoff.tesh
examples/msg/energy-onoff/platform_onoff.xml
examples/msg/energy-ptask/energy-ptask.tesh
examples/msg/energy-vm/energy-vm.c
examples/msg/energy-vm/energy-vm.tesh
examples/msg/io-file/io-file.c
examples/msg/io-remote/io-remote.c
examples/msg/io-storage/io-storage.c
examples/msg/maestro-set/maestro-set.cpp
examples/msg/mc/bugged1_liveness.c
examples/msg/mc/bugged1_liveness.h
examples/msg/mc/bugged2_liveness.c
examples/msg/mc/bugged2_liveness.h
examples/msg/mc/electric_fence.c
examples/msg/platform-properties/platform-properties.c
examples/msg/process-migration/process-migration.c
examples/msg/process-suspend/process-suspend.c
examples/msg/synchro-semaphore/synchro-semaphore.c
examples/platforms/cluster.xml
examples/platforms/cluster_backbone.xml [new file with mode: 0644]
examples/platforms/energy_cluster.xml
examples/platforms/energy_platform.xml
examples/platforms/two_clusters.xml [deleted file]
examples/s4u/actor-create/s4u_actor-create.cpp
examples/s4u/dht-chord/s4u_dht-chord.hpp
examples/s4u/io/s4u_io.cpp
examples/s4u/io/s4u_io.tesh
examples/simdag/availability/sd_availability.c
examples/simdag/dag-dotload/sd_dag-dotload.c
examples/simdag/dag-dotload/sd_dag-dotload.tesh
examples/simdag/daxload/sd_daxload.c
examples/simdag/daxload/sd_daxload.tesh
examples/simdag/goal/goal_test.c
examples/simdag/ptg-dotload/sd_ptg-dotload.tesh
examples/simdag/schedule-dotload/sd_schedule-dotload.tesh
examples/simdag/scheduling/sd_scheduling.c
examples/simdag/throttling/sd_throttling.tesh
examples/simdag/typed_tasks/sd_typed_tasks.tesh
examples/smpi/NAS/DGraph.c
examples/smpi/NAS/dt.c
examples/smpi/NAS/ep.c
examples/smpi/NAS/is.c
examples/smpi/energy/energy.tesh
examples/smpi/energy/f77/energy.tesh
examples/smpi/energy/f90/energy.tesh
examples/smpi/mc/bugged1_liveness.c
examples/smpi/mc/bugged2.c
examples/smpi/mc/mutual_exclusion.c
examples/smpi/mc/non_termination1.c
examples/smpi/mc/non_termination2.c
examples/smpi/mc/non_termination3.c
examples/smpi/mc/non_termination4.c
examples/smpi/mc/only_send_deterministic.c
examples/smpi/smpi_msg_masterslave/masterslave_mailbox_smpi.c
include/simgrid/datatypes.h
include/simgrid/forward.h
include/simgrid/msg.h
include/simgrid/plugins/energy.h
include/simgrid/s4u/Activity.hpp
include/simgrid/s4u/Actor.hpp
include/simgrid/s4u/Comm.hpp
include/simgrid/s4u/Engine.hpp
include/simgrid/s4u/File.hpp
include/simgrid/s4u/Host.hpp
include/simgrid/s4u/Mailbox.hpp
include/simgrid/s4u/Mutex.hpp
include/simgrid/s4u/Storage.hpp
include/simgrid/s4u/forward.hpp
include/simgrid/simdag.h
include/simgrid/simix.h
include/smpi/smpi.h
include/surf/surf_routing.h [deleted file]
include/xbt/automaton.h
include/xbt/base.h
include/xbt/cunit.h
include/xbt/dynar.h
include/xbt/exception.hpp
include/xbt/lib.h [deleted file]
include/xbt/log.h
include/xbt/mallocator.h
include/xbt/parmap.h
include/xbt/string.hpp
include/xbt/swag.h
include/xbt/xbt_os_thread.h
include/xbt/xbt_os_time.h
src/bindings/java/jmsg.cpp
src/bindings/java/jmsg.h
src/bindings/java/jmsg_host.cpp
src/bindings/java/jmsg_host.h
src/bindings/java/jmsg_storage.cpp
src/bindings/java/jtrace.cpp
src/bindings/java/org/simgrid/msg/Host.java
src/bindings/lua/lua_debug.cpp
src/bindings/lua/simgrid_lua.cpp
src/include/mc/mc.h
src/include/surf/maxmin.h
src/include/surf/surf.h
src/instr/instr_paje_containers.cpp
src/instr/instr_paje_trace.cpp
src/instr/instr_paje_types.cpp
src/instr/instr_paje_values.cpp
src/instr/instr_private.h
src/kernel/EngineImpl.cpp
src/kernel/activity/ActivityImpl.cpp
src/kernel/activity/ActivityImpl.hpp
src/kernel/activity/CommImpl.cpp
src/kernel/activity/ExecImpl.cpp
src/kernel/activity/MailboxImpl.cpp
src/kernel/activity/MailboxImpl.hpp
src/kernel/activity/SynchroIo.cpp
src/kernel/activity/SynchroIo.hpp
src/kernel/activity/SynchroRaw.cpp
src/kernel/activity/SynchroRaw.hpp
src/kernel/context/ContextRaw.cpp
src/kernel/routing/FatTreeZone.cpp
src/kernel/routing/TorusZone.cpp
src/mc/AddressSpace.hpp
src/mc/LocationList.hpp
src/mc/ObjectInformation.cpp
src/mc/ObjectInformation.hpp
src/mc/PageStore.cpp
src/mc/Process.hpp
src/mc/RegionSnapshot.cpp
src/mc/RegionSnapshot.hpp
src/mc/VisitedState.hpp
src/mc/checker/Checker.hpp
src/mc/checker/CommunicationDeterminismChecker.cpp
src/mc/checker/CommunicationDeterminismChecker.hpp
src/mc/checker/LivenessChecker.hpp
src/mc/checker/SafetyChecker.cpp
src/mc/mc_base.cpp
src/mc/mc_checkpoint.cpp
src/mc/mc_comm_pattern.cpp
src/mc/mc_request.cpp
src/mc/mc_state.cpp
src/mc/mc_state.h
src/msg/instr_msg_task.cpp
src/msg/msg_deployment.cpp
src/msg/msg_environment.cpp
src/msg/msg_global.cpp
src/msg/msg_gos.cpp
src/msg/msg_host.cpp
src/msg/msg_io.cpp
src/msg/msg_private.h
src/msg/msg_process.cpp
src/msg/msg_synchro.cpp
src/msg/msg_task.cpp
src/msg/msg_vm.cpp
src/plugins/vm/VirtualMachineImpl.hpp
src/plugins/vm/s4u_VirtualMachine.cpp
src/s4u/s4u_actor.cpp
src/s4u/s4u_comm.cpp
src/s4u/s4u_conditionVariable.cpp
src/s4u/s4u_engine.cpp
src/s4u/s4u_file.cpp
src/s4u/s4u_host.cpp
src/s4u/s4u_storage.cpp
src/simdag/dax_dtd.c
src/simdag/dax_dtd.h
src/simdag/sd_daxloader.cpp
src/simdag/sd_dotloader.cpp
src/simdag/sd_task.cpp
src/simgrid/host.cpp
src/simgrid/sg_config.cpp
src/simix/ActorImpl.cpp
src/simix/ActorImpl.hpp
src/simix/libsmx.cpp
src/simix/popping_accessors.h
src/simix/popping_bodies.cpp
src/simix/popping_enum.h
src/simix/popping_generated.cpp
src/simix/popping_private.h
src/simix/simcalls.in
src/simix/simcalls.py
src/simix/smx_context.cpp
src/simix/smx_global.cpp
src/simix/smx_host.cpp
src/simix/smx_host_private.h
src/simix/smx_io.cpp
src/simix/smx_io_private.h
src/simix/smx_network.cpp
src/simix/smx_private.h
src/simix/smx_synchro.cpp
src/smpi/colls/allgather/allgather-2dmesh.cpp
src/smpi/colls/allgather/allgather-3dmesh.cpp
src/smpi/colls/allgather/allgather-NTSLR-NB.cpp
src/smpi/colls/allgather/allgather-NTSLR.cpp
src/smpi/colls/allgather/allgather-SMP-NTS.cpp
src/smpi/colls/allgather/allgather-bruck.cpp
src/smpi/colls/allgather/allgather-mvapich-smp.cpp
src/smpi/colls/allgather/allgather-ompi-neighborexchange.cpp
src/smpi/colls/allgather/allgather-rdb.cpp
src/smpi/colls/allgather/allgather-rhv.cpp
src/smpi/colls/allgather/allgather-smp-simple.cpp
src/smpi/colls/allgatherv/allgatherv-ompi-bruck.cpp
src/smpi/colls/allgatherv/allgatherv-ompi-neighborexchange.cpp
src/smpi/colls/allgatherv/allgatherv-ring.cpp
src/smpi/colls/allreduce/allreduce-lr.cpp
src/smpi/colls/allreduce/allreduce-mvapich-two-level.cpp
src/smpi/colls/allreduce/allreduce-ompi-ring-segmented.cpp
src/smpi/colls/allreduce/allreduce-rab-rdb.cpp
src/smpi/colls/allreduce/allreduce-rab1.cpp
src/smpi/colls/allreduce/allreduce-rdb.cpp
src/smpi/colls/allreduce/allreduce-smp-binomial-pipeline.cpp
src/smpi/colls/allreduce/allreduce-smp-binomial.cpp
src/smpi/colls/allreduce/allreduce-smp-rdb.cpp
src/smpi/colls/allreduce/allreduce-smp-rsag-rab.cpp
src/smpi/colls/alltoall/alltoall-2dmesh.cpp
src/smpi/colls/alltoall/alltoall-basic-linear.cpp
src/smpi/colls/alltoall/alltoall-mvapich-scatter-dest.cpp
src/smpi/colls/alltoall/alltoall-rdb.cpp
src/smpi/colls/alltoallv/alltoallv-ompi-basic-linear.cpp
src/smpi/colls/alltoallv/alltoallv-ring.cpp
src/smpi/colls/barrier/barrier-mvapich2-pair.cpp
src/smpi/colls/barrier/barrier-ompi.cpp
src/smpi/colls/bcast/bcast-NTSB.cpp
src/smpi/colls/bcast/bcast-NTSL-Isend.cpp
src/smpi/colls/bcast/bcast-NTSL.cpp
src/smpi/colls/bcast/bcast-SMP-binary.cpp
src/smpi/colls/bcast/bcast-SMP-linear.cpp
src/smpi/colls/bcast/bcast-arrival-pattern-aware-wait.cpp
src/smpi/colls/bcast/bcast-arrival-pattern-aware.cpp
src/smpi/colls/bcast/bcast-arrival-scatter.cpp
src/smpi/colls/bcast/bcast-flattree-pipeline.cpp
src/smpi/colls/bcast/bcast-mvapich-smp.cpp
src/smpi/colls/bcast/bcast-ompi-pipeline.cpp
src/smpi/colls/bcast/bcast-ompi-split-bintree.cpp
src/smpi/colls/bcast/bcast-scatter-LR-allgather.cpp
src/smpi/colls/bcast/bcast-scatter-rdb-allgather.cpp
src/smpi/colls/coll_tuned_topo.cpp
src/smpi/colls/coll_tuned_topo.h
src/smpi/colls/gather/gather-mvapich.cpp
src/smpi/colls/gather/gather-ompi.cpp
src/smpi/colls/reduce/reduce-NTSL.cpp
src/smpi/colls/reduce/reduce-arrival-pattern-aware.cpp
src/smpi/colls/reduce/reduce-binomial.cpp
src/smpi/colls/reduce/reduce-mvapich-knomial.cpp
src/smpi/colls/reduce/reduce-mvapich-two-level.cpp
src/smpi/colls/reduce/reduce-ompi.cpp
src/smpi/colls/reduce/reduce-scatter-gather.cpp
src/smpi/colls/reduce_scatter/reduce_scatter-mpich.cpp
src/smpi/colls/reduce_scatter/reduce_scatter-ompi.cpp
src/smpi/colls/scatter/scatter-mvapich-two-level.cpp
src/smpi/colls/scatter/scatter-ompi.cpp
src/smpi/colls/smpi_default_selector.cpp
src/smpi/colls/smpi_intel_mpi_selector.cpp
src/smpi/colls/smpi_mpich_selector.cpp
src/smpi/colls/smpi_mvapich2_selector.cpp
src/smpi/colls/smpi_mvapich2_selector_stampede.h
src/smpi/colls/smpi_openmpi_selector.cpp
src/smpi/instr_smpi.cpp
src/smpi/private.h
src/smpi/private.hpp
src/smpi/smpi_bench.cpp
src/smpi/smpi_coll.cpp
src/smpi/smpi_comm.cpp
src/smpi/smpi_comm.hpp
src/smpi/smpi_datatype.cpp
src/smpi/smpi_datatype.hpp
src/smpi/smpi_datatype_derived.cpp
src/smpi/smpi_datatype_derived.hpp
src/smpi/smpi_deployment.cpp
src/smpi/smpi_f2c.hpp
src/smpi/smpi_f77.cpp
src/smpi/smpi_global.cpp
src/smpi/smpi_keyvals.cpp
src/smpi/smpi_keyvals.hpp
src/smpi/smpi_mpi.cpp
src/smpi/smpi_pmpi.cpp
src/smpi/smpi_process.cpp
src/smpi/smpi_replay.cpp
src/smpi/smpi_request.cpp
src/smpi/smpi_shared.cpp
src/smpi/smpi_topo.cpp
src/smpi/smpi_topo.hpp
src/smpi/smpi_win.cpp
src/smpi/smpi_win.hpp
src/surf/FileImpl.hpp [new file with mode: 0644]
src/surf/HostImpl.cpp
src/surf/HostImpl.hpp
src/surf/StorageImpl.cpp
src/surf/StorageImpl.hpp
src/surf/cpu_cas01.cpp
src/surf/cpu_interface.cpp
src/surf/cpu_interface.hpp
src/surf/fair_bottleneck.cpp
src/surf/lagrange.cpp
src/surf/maxmin.cpp
src/surf/maxmin_private.hpp
src/surf/network_cm02.hpp
src/surf/network_ib.cpp
src/surf/network_ns3.cpp
src/surf/ns3/ns3_simulator.cc
src/surf/plugins/host_energy.cpp
src/surf/plugins/host_load.cpp
src/surf/ptask_L07.cpp
src/surf/sg_platf.cpp
src/surf/storage_n11.cpp
src/surf/storage_n11.hpp
src/surf/surf_c_bindings.cpp
src/surf/surf_interface.cpp
src/surf/xml/platf.hpp
src/surf/xml/platf_private.hpp
src/surf/xml/simgrid.dtd
src/surf/xml/simgrid_dtd.c
src/surf/xml/simgrid_dtd.h
src/surf/xml/surfxml_parseplatf.cpp
src/surf/xml/surfxml_sax_cb.cpp
src/xbt/automaton/automaton.c
src/xbt/automaton/automaton_lexer.yy.c
src/xbt/automaton/automatonparse_promela.c
src/xbt/backtrace.cpp
src/xbt/cunit.cpp
src/xbt/dict.cpp
src/xbt/dynar.cpp
src/xbt/exception.cpp
src/xbt/lib.c [deleted file]
src/xbt/log.c
src/xbt/mmalloc/mm_module.c
src/xbt/mmalloc/mmalloc.c
src/xbt/mmalloc/mmorecore.c
src/xbt/mmalloc/mmprivate.h
src/xbt/mmalloc/mrealloc.c
src/xbt/parmap.cpp
src/xbt/xbt_log_appender_file.c
src/xbt/xbt_main.cpp
src/xbt/xbt_os_thread.c
teshsuite/msg/CMakeLists.txt
teshsuite/msg/cloud-sharing/cloud-sharing.c
teshsuite/msg/cloud-sharing/cloud-sharing.tesh
teshsuite/msg/host_on_off_processes/host_on_off_processes.tesh
teshsuite/msg/task_destroy_cancel/task_destroy_cancel.cpp
teshsuite/s4u/CMakeLists.txt
teshsuite/s4u/comm-pt2pt/comm-pt2pt.cpp [new file with mode: 0644]
teshsuite/s4u/comm-waitany/comm-waitany.cpp [new file with mode: 0644]
teshsuite/s4u/listen_async/listen_async.tesh
teshsuite/s4u/storage_client_server/storage_client_server.cpp
teshsuite/s4u/storage_client_server/storage_client_server.tesh
teshsuite/simdag/CMakeLists.txt
teshsuite/simdag/basic-link-test/basic-link-test.c
teshsuite/simdag/comm-mxn-all2all/comm-mxn-all2all.c
teshsuite/simdag/comm-mxn-independent/comm-mxn-independent.c
teshsuite/simdag/comm-mxn-scatter/comm-mxn-scatter.c
teshsuite/simdag/comm-p2p-latency-1/comm-p2p-latency-1.c
teshsuite/simdag/comm-p2p-latency-2/comm-p2p-latency-2.c
teshsuite/simdag/comm-p2p-latency-3/comm-p2p-latency-3.c
teshsuite/simdag/comm-p2p-latency-bound/comm-p2p-latency-bound.c
teshsuite/simdag/flatifier/bogus_missing_gateway.tesh
teshsuite/simdag/flatifier/flatifier.cpp
teshsuite/simdag/is-router/is-router.cpp
teshsuite/smpi/bug-17132/bug-17132.c
teshsuite/smpi/coll-allgather/coll-allgather.c
teshsuite/smpi/coll-allgatherv/coll-allgatherv.c
teshsuite/smpi/coll-allreduce/coll-allreduce.c
teshsuite/smpi/coll-alltoall/clusters.tesh
teshsuite/smpi/coll-alltoall/coll-alltoall.c
teshsuite/smpi/coll-alltoallv/coll-alltoallv.c
teshsuite/smpi/coll-bcast/coll-bcast.c
teshsuite/smpi/coll-gather/coll-gather.c
teshsuite/smpi/coll-reduce-scatter/coll-reduce-scatter.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock10.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock10_mod.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock11.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock2.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock3.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock4.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock4_mod.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock5.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock5_mod.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock6.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock6_mod.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock7.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock8.c
teshsuite/smpi/isp/umpire/any_src-can-deadlock9.c
teshsuite/smpi/isp/umpire/any_src-deadlock.c
teshsuite/smpi/isp/umpire/any_src-wait-deadlock.c
teshsuite/smpi/isp/umpire/any_src-wait-deadlock2.c
teshsuite/smpi/isp/umpire/any_src-waitall-deadlock.c
teshsuite/smpi/isp/umpire/any_src-waitall-deadlock2.c
teshsuite/smpi/isp/umpire/any_src-waitall-deadlock3.c
teshsuite/smpi/isp/umpire/any_src-waitany-deadlock.c
teshsuite/smpi/isp/umpire/any_src-waitany-deadlock2.c
teshsuite/smpi/isp/umpire/basic-deadlock-comm_dup.c
teshsuite/smpi/isp/umpire/basic-deadlock-comm_split.c
teshsuite/smpi/isp/umpire/basic-deadlock-graph_create.c
teshsuite/smpi/isp/umpire/basic-deadlock-intercomm_create.c
teshsuite/smpi/isp/umpire/basic-deadlock-intercomm_merge.c
teshsuite/smpi/isp/umpire/change-send-buffer-exhaustive.c
teshsuite/smpi/isp/umpire/change-send-buffer-type-exhaustive.c
teshsuite/smpi/isp/umpire/collective-exhaustive-byte-int-mismatch.c
teshsuite/smpi/isp/umpire/collective-exhaustive-no-error.c
teshsuite/smpi/isp/umpire/errhandler-no-error.c
teshsuite/smpi/isp/umpire/errhandler-no-free.c
teshsuite/smpi/isp/umpire/group-no-error-exhaustive.c
teshsuite/smpi/isp/umpire/group-no-free-exhaustive.c
teshsuite/smpi/isp/umpire/hello.c
teshsuite/smpi/isp/umpire/intercomm_create-deadlock.c
teshsuite/smpi/isp/umpire/intercomm_create-deadlock2.c
teshsuite/smpi/isp/umpire/intercomm_create-deadlock3.c
teshsuite/smpi/isp/umpire/intercomm_create-deadlock4.c
teshsuite/smpi/isp/umpire/intercomm_create-no-error.c
teshsuite/smpi/isp/umpire/intercomm_merge-deadlock.c
teshsuite/smpi/isp/umpire/irecv-isend-ok2.c
teshsuite/smpi/isp/umpire/lost-request2.c
teshsuite/smpi/isp/umpire/lost-request3.c
teshsuite/smpi/isp/umpire/no-error-any_src.c
teshsuite/smpi/isp/umpire/no-error-derived-comms.c
teshsuite/smpi/isp/umpire/no-error-interleaved-isend.c
teshsuite/smpi/isp/umpire/no-error-persistent-all-completions.c
teshsuite/smpi/isp/umpire/no-error-persistent-test.c
teshsuite/smpi/isp/umpire/no-error-persistent-testpartial.c
teshsuite/smpi/isp/umpire/no-error-persistent-waitpartial.c
teshsuite/smpi/isp/umpire/no-error-persistent.c
teshsuite/smpi/isp/umpire/no-error-probe-any_src.c
teshsuite/smpi/isp/umpire/no-error-probe-any_tag.c
teshsuite/smpi/isp/umpire/no-error-probe.c
teshsuite/smpi/isp/umpire/no-error-testall.c
teshsuite/smpi/isp/umpire/no-error-vector-isend.c
teshsuite/smpi/isp/umpire/no-error-wait-any_src.c
teshsuite/smpi/isp/umpire/no-error-wait-any_src2.c
teshsuite/smpi/isp/umpire/no-error-wait-any_src3.c
teshsuite/smpi/isp/umpire/no-error-wait-any_src4.c
teshsuite/smpi/isp/umpire/no-error-waitall-any_src.c
teshsuite/smpi/isp/umpire/no-error-waitall-any_src2.c
teshsuite/smpi/isp/umpire/no-error-waitall-any_src3.c
teshsuite/smpi/isp/umpire/no-error-waitany-any_src.c
teshsuite/smpi/isp/umpire/no-error-waitany-any_src2.c
teshsuite/smpi/isp/umpire/no-error-waitany-any_src3.c
teshsuite/smpi/isp/umpire/no-error3-any_src.c
teshsuite/smpi/isp/umpire/no-error3.c
teshsuite/smpi/isp/umpire/no-error4-any_src.c
teshsuite/smpi/isp/umpire/op-no-error.c
teshsuite/smpi/isp/umpire/op-no-free.c
teshsuite/smpi/isp/umpire/partial-recv-exhaustive.c
teshsuite/smpi/isp/umpire/partial-recv-persistent.c
teshsuite/smpi/isp/umpire/partial-recv-persistent2.c
teshsuite/smpi/isp/umpire/partial-recv-persistent3.c
teshsuite/smpi/isp/umpire/partial-recv-persistent4.c
teshsuite/smpi/isp/umpire/partial-recv.c
teshsuite/smpi/isp/umpire/probe-any_src-types-can-mismatch.c
teshsuite/smpi/isp/umpire/probe-any_tag-types-can-mismatch.c
teshsuite/smpi/isp/umpire/probe-deadlock.c
teshsuite/smpi/isp/umpire/pt2pt-byte-int-mismatch.c
teshsuite/smpi/isp/umpire/remote_group-no-error.c
teshsuite/smpi/isp/umpire/type-commit-twice.c
teshsuite/smpi/isp/umpire/type-no-error-exhaustive-with-isends.c
teshsuite/smpi/isp/umpire/type-no-error-exhaustive.c
teshsuite/smpi/isp/umpire/type-no-free-exhaustive.c
teshsuite/smpi/isp/umpire/type-no-free3.c
teshsuite/smpi/macro-shared/macro-shared.c
teshsuite/smpi/mpich3-test/coll/allgatherv4_manual.c
teshsuite/smpi/mpich3-test/datatype/typename.c
teshsuite/smpi/mpich3-test/f77/attr/attraints.h
teshsuite/smpi/mpich3-test/f77/ext/add1size.h
teshsuite/smpi/mpich3-test/f77/ext/c2f2c.c
teshsuite/smpi/mpich3-test/f77/ext/c2fmult.c
teshsuite/smpi/mpich3-test/f77/ext/ctypesfromc.c
teshsuite/smpi/mpich3-test/f77/pt2pt/attr1aints.h
teshsuite/smpi/mpich3-test/f77/rma/addsize.h
teshsuite/smpi/mpich3-test/f77/rma/c2f2cwin.c
teshsuite/smpi/mpich3-test/f90/rma/c2f902cwin.c
teshsuite/smpi/mpich3-test/include/mpitestconf.h
teshsuite/smpi/type-struct/type-struct.c
teshsuite/surf/lmm_usage/lmm_usage.cpp
teshsuite/surf/maxmin_bench/maxmin_bench.cpp
tools/cmake/DefinePackages.cmake
tools/cmake/Distrib.cmake
tools/cmake/Java.cmake
tools/cmake/Tests.cmake
tools/cmake/test_prog/prog_sem_init.c
tools/cmake/test_prog/prog_sem_open.c
tools/cmake/test_prog/prog_stackgrowth.c
tools/tesh/tesh.py

index 69f3f2f..3adde03 100644 (file)
--- a/.cproject
+++ b/.cproject
                                        <folderInfo id="cdt.managedbuild.toolchain.gnu.base.1011977604.157358594" name="/" resourcePath="">
                                                <toolChain id="cdt.managedbuild.toolchain.gnu.base.368132295" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.base">
                                                        <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.1122260779" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
-                                                       <builder buildPath="${workspace_loc:/simgrid}/" id="cdt.managedbuild.target.gnu.builder.base.1747533038" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.base"/>
+                                                       <builder buildPath="${workspace_loc:/simgrid}/build/default" id="cdt.managedbuild.target.gnu.builder.base.1747533038" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.base"/>
                                                        <tool id="cdt.managedbuild.tool.gnu.archiver.base.374652938" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
                                                        <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.738159103" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base">
-                                                               <option id="gnu.cpp.compiler.option.include.paths.216814103" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
-                                                                       <listOptionValue builtIn="false" value="/usr/include/ns3.22"/>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.216814103" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="/usr/include/ns3.26"/>
                                                                        <listOptionValue builtIn="false" value="/opt/gtnets/include"/>
                                                                        <listOptionValue builtIn="false" value="/usr/include/lua5.3"/>
                                                                        <listOptionValue builtIn="false" value="/usr/lib/jvm/java-8-openjdk-amd64/include"/>
                                                                        <listOptionValue builtIn="false" value="/usr/lib/jvm/java-8-openjdk-amd64/include/linux"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/simgrid/build/default}&quot;"/>
                                                                </option>
                                                                <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1641160853" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
                                                        </tool>
                                                        <tool id="cdt.managedbuild.tool.gnu.c.compiler.base.1053916774" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
-                                                               <option id="gnu.c.compiler.option.include.paths.100642505" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
-                                                                       <listOptionValue builtIn="false" value="/usr/include/ns3.22"/>
+                                                               <option id="gnu.c.compiler.option.include.paths.100642505" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="/usr/include/ns3.26"/>
                                                                        <listOptionValue builtIn="false" value="/opt/gtnets/include"/>
                                                                        <listOptionValue builtIn="false" value="/usr/include/lua5.3"/>
                                                                        <listOptionValue builtIn="false" value="/usr/lib/jvm/java-8-openjdk-amd64/include"/>
index f1b3b52..60839f9 100644 (file)
@@ -1051,6 +1051,7 @@ teshsuite/smpi/macro-partial-shared-communication/macro-partial-shared-communica
 teshsuite/smpi/type-struct/type-struct
 teshsuite/smpi/type-vector/type-vector
 teshsuite/s4u/actor/actor
+teshsuite/s4u/comm-pt2pt/comm-pt2pt
 teshsuite/s4u/concurrent_rw/concurrent_rw
 teshsuite/s4u/host_on_off_wait/host_on_off_wait
 teshsuite/s4u/listen_async/listen_async
index 30eb974..0566c61 100644 (file)
--- a/.project
+++ b/.project
                <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
                <nature>org.python.pydev.pythonNature</nature>
        </natures>
+       <filteredResources>
+               <filter>
+                       <id>1498023481284</id>
+                       <name></name>
+                       <type>30</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-build</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
 </projectDescription>
index 5f3ce84..f219c89 100755 (executable)
@@ -5,6 +5,9 @@
 #
 # Copyright (C) 2017 The SimGrid Team. Licence: LGPL of WDFPL, as you want.
 
+if [ -e build/default ] ; then
+  cd build/default
+fi
 (
   (nice make -j4 || make) && nice ctest -j4 --output-on-failure ; date
 ) 2>&1 | tee BuildSimGrid.sh.log
index 58d7dbb..7dea4f7 100644 (file)
@@ -105,7 +105,7 @@ endif()
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 
 set(SIMGRID_VERSION_MAJOR "3")
-set(SIMGRID_VERSION_MINOR "16")
+set(SIMGRID_VERSION_MINOR "17")
 set(SIMGRID_VERSION_PATCH "0")
 set(SIMGRID_VERSION_EXTRA "-DEVEL") # Extra words to add to version string (e.g. -rc1)
 
@@ -160,11 +160,11 @@ SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
 
 ### Compute the include paths
 set(INCLUDES
+  ${CMAKE_BINARY_DIR}
+  ${CMAKE_BINARY_DIR}/include
   ${CMAKE_HOME_DIRECTORY}
   ${CMAKE_HOME_DIRECTORY}/include
   ${CMAKE_HOME_DIRECTORY}/src/include
-  ${CMAKE_BINARY_DIR}
-  ${CMAKE_BINARY_DIR}/include
   )
 
 if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
index 8562356..a7ca01b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,8 @@
-SimGrid (3.16) UNRELEASED
+SimGrid (3.17) UNRELEASED (release target: September 22 2017)
+
+SimGrid (3.16) Released June 22. 2017.
+
+ The Blooming Spring Release: developments are budding.
 
  Portability status:
   - FreeBSD: Disable SMPI mmap privatization, switch automatically to dlopen.
@@ -8,7 +12,7 @@ SimGrid (3.16) UNRELEASED
  XML platforms: Switch to platform v4.1 format.
  * This is (mainly) a backward compatible change: v4 are valid v4.1 files
    - <zone> can be used as a synonym for the now deprecated <as>
-   - <zoneZoute> an be used as a synonym for the now deprecated <asroute>
+   - <zoneRoute> can be used as a synonym for the now deprecated <asroute>
    - <bypassZoneRoute> an be used as a synonym for the now deprecated <bypassAsRoute>
    - <actor> can be used as a synonym for the now deprecated <process>
    - state_file and avail_file periodicity is now easier to express
@@ -17,26 +21,50 @@ SimGrid (3.16) UNRELEASED
    - Remove attribute 'content_type' of <storage_type>: was never used
    - Make attribute 'model' of <storage_type> optional: for future usage
    - Remove Bconnection model property: was never (in)validated. Replaced by
-      the maximum of the read and write bandwidth as a resource constraint. 
+      the maximum of the read and write bandwidth as a resource constraint.
 
  SimDag
-  - New and Backwards Compatibility break: 
+  - New and Backwards Compatibility break:
     SD_simulate_with_update (double how_long, xbt_dynar_t changed_tasks_dynar)
     When one wants to get the list of tasks whose states have changed during a
-    simulation round, s/he has to allocate and free a dynar and use it as argument 
-    to this function. The former SD_simulate (double how_long) now returns void.
+    simulation round, s/he has to allocate and free a dynar and use it as
+    argument to this function. The former SD_simulate (double how_long)
+    now        returns void.
 
  Virtual Machines
-  - Allow multicore VMs, along with the correct sharing computations
+  - Allow multicore VMs, with the correct sharing (unless you overcommit)
+    BUG: vCPU overcommitting still leads to buggy sharing, though. WIP.
+
+ Energy
+  - New function to update the consumption of all hosts at once.
+  - Fix the model for multi-core hosts, linear in the amount of busy
+    cores with an abnormality for pIdle (see paper).
+    BUG: Still not satisfactory for ptask on mono-cores.
 
  MSG
-  - The netzone are now available from the MSG API. 
+  - The netzone are now available from the MSG API.
     The old names still work, but are now deprecated.
 
  SMPI
   - New algorithm to privatize globals: dlopen, with dynamic loading tricks
   - New option: smpi/keep-temps to not cleanup temp files
+  - New option : smpi/shared-malloc-blocksize . Relevant only when global shared 
+    mallocs mode is used, allows to change the size of the fake file used
+    (default 1MB), to potentially limit the number of mappings for large runs.
   - Support for sparse privatized malloc with SMPI_PARTIAL_SHARED_MALLOC()
+  - Fortran ifort and flang compilers support
+  - New RMA calls supported (experimental) :
+      - MPI_Win_allocate, MPI_Win_create_dynamic, MPI_Win_attach
+      - MPI_Win_detach, MPI_Win_set_info, MPI_Win_get_info
+      - MPI_Win_lock_all, MPI_Win_unlock_all, MPI_Win_flush
+      - MPI_Win_flush_local, MPI_Win_flush_all, MPI_Win_flush_local_all
+      - MPI_Op_commutative, MPI_Fetch_and_Op, MPI_Compare_and_swap
+      - MPI_Rput, MPI_Rget, MPI_Raccumulate, MPI_Rget_accumulate
+
+ S4U
+  - New: this_actor::isMaestro() returns whether we are in kernel mode.
+  - Behind the scene, ActivityImpl are now automatically refcounted.
+    Removing this nasty bottleneck will greatly simplify our internals.
 
  XBT
   - Replay: New function xbt_replay_action_get():
@@ -44,10 +72,11 @@ SimGrid (3.16) UNRELEASED
   - DROPPED FUNCTION: xbt_str_varsubst()
   - DROPPED MODULE: strbuff. We don't need it anymore.
   - DROPPED MODULE: matrix. We don't need it anymore.
+  - DROPPED MODULE: lib. We don't need it anymore.
 
- -- Release target: June 21 2017   -- Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
+ -- Thu Jun 22 22:48:12 CEST 2017   -- Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
 
-SimGrid (3.15) stable; urgency=low
+SimGrid (3.15) Released March 22. 2017
 
  The Spring Release: continuous integration servers become green
  We fixed even the transient bugs on all target architectures:
@@ -136,9 +165,7 @@ SimGrid (3.15) stable; urgency=low
  - A <cluster> can now be created with different speed values to represent pstates.
    see examples/platforms/energy_cluster.xml for an example.
 
- -- Wed Mar 22 17:50:21 CET 2017 -- Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
-
-SimGrid (3.14.159) stable; urgency=low
+SimGrid (3.14.159) Released December 28. 2016
 
  The previous release was only a crude approximation of a Pi release;
  this one should be a bit better.
@@ -148,9 +175,7 @@ SimGrid (3.14.159) stable; urgency=low
  - Improve the documentation, in particular of the routing module.
  - Integrate some patches flying around in Debian.
 
- -- Wed Dec 28 17:14:49 CET 2016 Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
-
-SimGrid (3.14) stable; urgency=low
+SimGrid (3.14) Released December 24. 2016
 
  Documentation
  * The whole documentation was reworked and reorganized. There is
@@ -248,8 +273,6 @@ SimGrid (3.14) stable; urgency=low
  * Memory usage should be decreased for simulations with a large number 
    of processes. This also helps for SMPI.
 
- -- Sat Dec 24 22:34:26 CET 2016 Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
-
 SimGrid (3.13) stable; urgency=low
 
  The Half Release, a.k.a. the Zealous Easter Trim.
diff --git a/NEWS b/NEWS
index d72c4be..3125d9b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,10 +1,24 @@
+                    _               _____  _ _____
+__   _____ _ __ ___(_) ___  _ __   |___ / / |___  |
+\ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \ | |  / /
+ \ V /  __/ |  \__ \ | (_) | | | |  ___) || | / /
+  \_/ \___|_|  |___/_|\___/|_| |_| |____(_)_|/_/
+               (unreleased yet)
+
                     _               _____  _  __
 __   _____ _ __ ___(_) ___  _ __   |___ / / |/ /_
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \ | | '_ \
  \ V /  __/ |  \__ \ | (_) | | | |  ___) || | (_) |
   \_/ \___|_|  |___/_|\___/|_| |_| |____(_)_|\___/
-               (not released yet)
+               June 22 2017
+
+The Blooming Spring Release: developments are budding.
 
+ * S4U: Progress; Activity refcounting is now automatic.
+ * XML: <AS> can now be named <zone> as they should.
+ * SMPI: Further performance improvements; RMA support.
+ * Cloud: Multi-core VMs (do not overcommit them yet)
+ * (+ bug fixes, cleanups and documentation improvements)
                     _               _____  _ ____
 __   _____ _ __ ___(_) ___  _ __   |___ / / | ___|
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \ | |___ \
@@ -17,7 +31,7 @@ The Spring Release: continuous integration servers become green.
  * S4U: progress, integrating more parts of SimDag; New examples.
  * SMPI: Support MPI 2.2; Convert internals to C++ (TBC).
  * Java: Massive memleaks and performance issues fixed.
- * Plus the usual bug fixes, cleanups and documentation improvements
+ * (+ bug fixes, cleanups and documentation improvements)
                     _               _____  _ _  _    _ ____  ___
 __   _____ _ __ ___(_) ___  _ __   |___ / / | || |  / | ___|/ _ \
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \ | | || |_ | |___ \ (_) |
index 57e2c82..c171b09 100644 (file)
  * Histogram entry for each measured block
  * Each entry is guarded inside xbt dictionary which is read from the file */
 typedef struct xbt_hist {
-       int n;
-       int counts;
-       double mean;
-       double *breaks;
-       double *percentage;
-       char* block_id;
+  int n;
+  int counts;
+  double mean;
+  double* breaks;
+  double* percentage;
+  char* block_id;
 } xbt_hist_t;
 
 extern RngStream get_randgen(void);
@@ -54,159 +54,144 @@ static inline double xbt_hist_time(char *key);
 /* Initializing xbt dictionary for SMPI version, reading xbt_hist_t entries line by line */
 static inline void xbt_inject_init(char *inputfile)
 {
-       xbt_dict_t mydict = get_dict();
-       FILE* fpInput = fopen(inputfile, "r");
-       if (fpInput == NULL)
-               printf("Error while opening the inputfile");
-       fseek(fpInput, 0, 0);
-
-       char line[200];
-       char *key;
-       int i;
-       xbt_hist_t* data;
-
-       if (fgets(line, 200, fpInput) == NULL)
-               printf("Error input file is empty!");//Skipping first row
-       while (fgets(line, 200, fpInput) != NULL)
-       {
-               key = strtok(line, "\t");
-
-               data = xbt_dict_get_or_null(mydict, key);
-               if (data)
-                       printf("Error, data with that block_id already exists!");
-
-               data = (xbt_hist_t *) xbt_new(xbt_hist_t, 1);
-
-               data->block_id = key;
-               data->counts = atoi(strtok(NULL, "\t"));
-               data->mean = atof(strtok(NULL, "\t"));
-               data->n = atoi(strtok(NULL, "\t"));
-
-               data->breaks = (double*) malloc(sizeof(double) * data->n);
-               data->percentage = (double*) malloc(sizeof(double) * (data->n - 1));
-               for (i = 0; i < data->n; i++)
-                       data->breaks[i] = atof(strtok(NULL, "\t"));
-               for (i = 0; i < (data->n - 1); i++)
-                       data->percentage[i] = atof(strtok(NULL, "\t"));
-
-               xbt_dict_set(mydict, key, data, NULL);
-       }
+  xbt_dict_t mydict = get_dict();
+  FILE* fpInput     = fopen(inputfile, "r");
+  if (fpInput == NULL)
+    printf("Error while opening the inputfile");
+  fseek(fpInput, 0, 0);
+
+  char line[200];
+  char* key;
+
+  if (fgets(line, 200, fpInput) == NULL)
+    printf("Error input file is empty!"); // Skipping first row
+  while (fgets(line, 200, fpInput) != NULL) {
+    key = strtok(line, "\t");
+
+    xbt_hist_t* data = xbt_dict_get_or_null(mydict, key);
+    if (data)
+      printf("Error, data with that block_id already exists!");
+
+    data = (xbt_hist_t*)xbt_new(xbt_hist_t, 1);
+
+    data->block_id = key;
+    data->counts   = atoi(strtok(NULL, "\t"));
+    data->mean     = atof(strtok(NULL, "\t"));
+    data->n        = atoi(strtok(NULL, "\t"));
+
+    data->breaks     = (double*)malloc(sizeof(double) * data->n);
+    data->percentage = (double*)malloc(sizeof(double) * (data->n - 1));
+    for (int i        = 0; i < data->n; i++)
+      data->breaks[i] = atof(strtok(NULL, "\t"));
+    for (int i            = 0; i < (data->n - 1); i++)
+      data->percentage[i] = atof(strtok(NULL, "\t"));
+
+    xbt_dict_set(mydict, key, data, NULL);
+  }
+  fclose(fInput);
 }
 
 /* Initializing xbt dictionary for StarPU version, reading xbt_hist_t entries line by line */
 static inline void inject_init_starpu(char *inputfile, xbt_dict_t *dict, RngStream *rng)
 {
-       *dict = xbt_dict_new_homogeneous(free);
-       *rng = RngStream_CreateStream("Randgen1");
-       unsigned long seed[] = {134, 233445, 865, 2634, 424242, 876541};
-       RngStream_SetSeed(*rng, seed);
-
-       xbt_dict_t mydict = *dict;
-       mydict = *dict;
-       FILE* fpInput = fopen(inputfile, "r");
-       if (fpInput == NULL)
-       {
-               printf("Error while opening the inputfile");
-               return;
-       }
-
-       fseek(fpInput, 0, 0);
-
-       char line[MAX_LINE_INJ];
-       char *key;
-       int i;
-       xbt_hist_t* data;
-
-       if (fgets(line, MAX_LINE_INJ, fpInput) == NULL)
-       {
-               printf("Error input file is empty!");//Skipping first row
-               return;
-       }
-
-
-       while (fgets(line, MAX_LINE_INJ, fpInput) != NULL)
-       {
-               key = strtok(line, "\t");
-
-               data = xbt_dict_get_or_null(mydict, key);
-               if (data)
-                       printf("Error, data with that block_id already exists!");
-
-               data = (xbt_hist_t *) xbt_new(xbt_hist_t, 1);
-               data->block_id = key;
-               data->counts = atoi(strtok(NULL, "\t"));
-               data->mean = atof(strtok(NULL, "\t"));
-               data->n = atoi(strtok(NULL, "\t"));
-               data->breaks = (double*) malloc(sizeof(double) * data->n);
-               data->percentage = (double*) malloc(sizeof(double) * (data->n - 1));
-
-               for (i = 0; i < data->n; i++)
-                       data->breaks[i] = atof(strtok(NULL, "\t"));
-                       for (i = 0; i < (data->n - 1); i++)
-                       {
-                               data->percentage[i] = atof(strtok(NULL, "\t"));
-                       }
-
-               xbt_dict_set(mydict, key, data, NULL);
-       }
+  *dict                = xbt_dict_new_homogeneous(free);
+  *rng                 = RngStream_CreateStream("Randgen1");
+  unsigned long seed[] = {134, 233445, 865, 2634, 424242, 876541};
+  RngStream_SetSeed(*rng, seed);
+
+  xbt_dict_t mydict = *dict;
+  FILE* fpInput     = fopen(inputfile, "r");
+  if (fpInput == NULL) {
+    printf("Error while opening the inputfile");
+    return;
+  }
+
+  fseek(fpInput, 0, 0);
+
+  char line[MAX_LINE_INJ];
+  char* key;
+
+  if (fgets(line, MAX_LINE_INJ, fpInput) == NULL) {
+    printf("Error input file is empty!"); // Skipping first row
+    return;
+  }
+
+  while (fgets(line, MAX_LINE_INJ, fpInput) != NULL) {
+    key = strtok(line, "\t");
+
+    xbt_hist_t* data = xbt_dict_get_or_null(mydict, key);
+    if (data)
+      printf("Error, data with that block_id already exists!");
+
+    data             = (xbt_hist_t*)xbt_new(xbt_hist_t, 1);
+    data->block_id   = key;
+    data->counts     = atoi(strtok(NULL, "\t"));
+    data->mean       = atof(strtok(NULL, "\t"));
+    data->n          = atoi(strtok(NULL, "\t"));
+    data->breaks     = (double*)malloc(sizeof(double) * data->n);
+    data->percentage = (double*)malloc(sizeof(double) * (data->n - 1));
+
+    for (int i        = 0; i < data->n; i++)
+      data->breaks[i] = atof(strtok(NULL, "\t"));
+    for (int i = 0; i < (data->n - 1); i++) {
+      data->percentage[i] = atof(strtok(NULL, "\t"));
+    }
+
+    xbt_dict_set(mydict, key, data, NULL);
+  }
+  fclose(fInput);
 }
 
 /* Injecting time */
 static inline double xbt_inject_time(char *key)
 {
-       return xbt_hist_time(key);
-       //return xbt_mean_time(key);
+  return xbt_hist_time(key);
+  // return xbt_mean_time(key);
 }
 
 /* Injecting mean value */
 static inline double xbt_mean_time(char *key)
 {
-       xbt_dict_t mydict = get_dict();
-       xbt_hist_t* data = xbt_dict_get_or_null(mydict, key);
+  xbt_dict_t mydict = get_dict();
+  xbt_hist_t* data  = xbt_dict_get_or_null(mydict, key);
 
-       if (!data)
-       {
-         printf("Warning: element with specified key does not exist (%s)\n",key);
-         return 0;
-       }
+  if (!data) {
+    printf("Warning: element with specified key does not exist (%s)\n", key);
+    return 0;
+  }
 
-       return data->mean;
+  return data->mean;
 }
 
 /* Injecting random value from the histogram */
 static inline double xbt_hist_time(char *key)
 {
-       int i, k = 0;
-       double left = 0, right = 1;
-       double timer = 0;
-       RngStream rng_stream;
-       double r, r2;
-
-       xbt_dict_t mydict = get_dict();
-       xbt_hist_t* data = xbt_dict_get_or_null(mydict, key);
-
-       if (!data)
-               {
-                 printf("Warning: element with specified key does not exist (%s)\n",key);
-                 return 0;
-               }
-
-       /* Choosing random interval of the histogram */
-       rng_stream = get_randgen();
-       r = RngStream_RandU01(rng_stream);
-       for (i = 0; i < (data->n - 1); i++)
-       {
-               left += (i == 0) ? 0 : data->percentage[i - 1];
-               right += data->percentage[i];
-               if (left < r && r <= right)
-                       k = i;
-       }
-
-       /* Choosing random value inside the interval of the histogram */
-       r2 = RngStream_RandU01(rng_stream);
-       timer = data->breaks[k] + r2 * (data->breaks[k + 1] - data->breaks[k]);
-
-       return timer;
+  xbt_dict_t mydict = get_dict();
+  xbt_hist_t* data  = xbt_dict_get_or_null(mydict, key);
+
+  if (!data) {
+    printf("Warning: element with specified key does not exist (%s)\n", key);
+    return 0;
+  }
+
+  /* Choosing random interval of the histogram */
+  RngStream rng_stream = get_randgen();
+  double r             = RngStream_RandU01(rng_stream);
+  int k                = 0;
+  double left          = 0;
+  double right         = 1;
+  for (int i = 0; i < (data->n - 1); i++) {
+    left += (i == 0) ? 0 : data->percentage[i - 1];
+    right += data->percentage[i];
+    if (left < r && r <= right)
+      k = i;
+  }
+
+  /* Choosing random value inside the interval of the histogram */
+  double r2    = RngStream_RandU01(rng_stream);
+  double timer = data->breaks[k] + r2 * (data->breaks[k + 1] - data->breaks[k]);
+
+  return timer;
 }
 
 #endif // __INJECT_H__
index d39e3d2..e796c16 100644 (file)
@@ -19,8 +19,26 @@ pages, as follows:
  - @subpage inside_cmake
  - @subpage inside_release
 
-@section uhood_tech_codstand Coding Standard
+@section uhood_tech_config Insider's Configuration
 
+The default build configuration of SimGrid fits the user needs, but
+they are not adapted to the ones actually working on SimGrid. See @ref
+install_src_config for more information. Note that this is very
+different from runtime configuration.
+
+In particular, the build is configured by default to produce highly
+optimized binaries, at the price of high compilation time. The
+rational is that users will compile SimGrid only once, and use it many
+times. This is exactly the contrary for the insiders, so you want to
+turn off \b enable_compile_optimizations.
+
+Symmetrically, \b enable_compile_warnings is off for the users because
+we don't want to bother them with compiler warnings (that abort the
+build in SimGrid), but any insider must turn this option on, or your
+code will be refused from the main repository.
+
+@section uhood_tech_codstand Automatically Enforcing our Coding Standards
 If you plan to commit code to the SimGrid project, you definitely need
 to install the relevant tool to ensure that your changes follow our
 coding standards:
@@ -36,4 +54,56 @@ git will say so, and provide a ready to use patch that you can apply
 to improve your commit. Just carefully read the error message you get
 to find the exact command with git-apply to fix your formating.
 
+If you find that for a specific commit, the formatter does a very bad
+job, then add --no-verify to your git commit command line.
+
+@section uhood_tech_tricks Insider tricks
+
+Over the years, we accumulated a few tricks that make it easier to
+work with SimGrid. Here is a somewhat unsorted list of such tricks.
+
+### Easy testing
+
+Launching all tests can be very time consuming, so you want to build
+and run the tests in parallel. Also, you want to save the build output
+to disk, for further reference. This is exactly what the
+BuildSimGrid.sh script does. It is upper-cased so that the shell
+completion works and allow to run it in 4 key press: `./B<tab>`
+
+Note that if you build out of tree (as you should, see below), the
+script builds the build/default directory. I usually copy the file in
+each build/ subdir to test each of them separately.
+
+### Easy out of tree builds
+
+It is easy to break one build configuration or another. If you're
+serious about code quality, you should not commit your change before
+testing it with gcc and clang, with and without MC; with and without
+Java. To easily switch between the configs without rebuilding
+everything, you want to compile out of tree (as explained in @ref
+install_cmake_outsrc).
+
+To not mess with git, you want to put your build tree under the build/
+directory, which is ignored by git. For example, I have the following
+directories: build/default build/clang build/java build/full
+(but YMMV).
+
+Then, the problem is that when you traverse these directories, you
+cannot edit the sources (that are in the srcdir, while you're in
+bindir). This makes it difficult to launch the tests and everything.
+
+To solve that issue, just call `make hardlinks` from your build dir.
+This will create hard links allowing to share every source files into
+the build dir. They are not copied, but hard linked. It means that
+these files are accessible both from the srcdir and from the bindir. If
+you edit a source file found under bindir, the srcdir version (visible
+to git) will also be changed (that's the same file, after all).
+
+If you convert from a regular build to an out-of-tree build, you need
+to clean your source tree by removing the following files:
+
+@verbatim
+rm -rf Makefile CMakeCache.txt CMakeFiles include/simgrid_config.h src/internal_config.h lib/*.so
+@endverbatim
+
 */
index a764f4f..57075d1 100644 (file)
@@ -8,7 +8,7 @@
 Please apply the following checklist before releasing.
 
 - Sources
-  - The version number is correctly marked in CMakeList.txt, in macros
+  - The version number is correctly marked in CMakeLists.txt, in macros
     SIMGRID_VERSION_MAJOR and friends. 
   - The "make distcheck" target works (testing that every files needed
     to build and install are included in the archive)
@@ -20,7 +20,7 @@ Please apply the following checklist before releasing.
 - ChangeLog file
   - All changes are documented
   - The release date is indicated below the changes
-  - The release is marked as stable above the changes
+  - The release is marked as stable above the changes (remove the UNRELEASED marker)
   - The release dub name matches the one given in NEWS file
 - NEWS
   - The most notable changes of the version are documented
@@ -82,6 +82,7 @@ the settings icon of the release you want to change.
 - Push the archive files (tar.gz and jar) on gforge
 - Post a news on gforge (before updating the website)
 - Update the link scm.gforge.inria.fr:/home/groups/simgrid/htdocs/simgrid/latest
+  (and create the directory of the next version)
 - Rebuild and resynchronize the website so that the file gets visible
   from our download page.\n
   - Edit org/org-templates/level-0.org to change the release version, the tgz link and the jar link.
index 8f4ae03..a106c56 100644 (file)
@@ -91,13 +91,6 @@ details).
  *  into, and interact directly with the VMs to manage groups of
  *  processes.
  *
- *  This interface is highly experimental at this point. Testing is
- *  welcomed, but do not expect too much of it right now. Even the
- *  interfaces may be changed in future releases of SimGrid (although
- *  things are expected to stabilize nicely before SimGrid v3.8).
- *  There is no guaranty on the rest of SimGrid, and there is less
- *  than that on this part.
- *
  */
 
 /** @defgroup msg_storage_management Storage Management Functions
index 50c52f7..55af981 100644 (file)
@@ -14,7 +14,7 @@
    - \ref SURF_vm_interface
    - \ref SURF_lmm
    - \ref SURF_callbacks
-   - \ref SURF_plugin_energy
+   - \ref plugin_energy
    
 
 */
 */
 
 /**
-@defgroup SURF_plugin_energy   SURF Energy Plugin
+@defgroup plugin_energy   Energy Plugin
 @ingroup SURF_API
 @brief Describes how to use the energy plugin.
 */
index 7d7884b..1e11522 100644 (file)
@@ -52,13 +52,11 @@ SimGrid.
 @code
 #include <xbt/config.h>
 
-extern xbt_cfg_t _sg_cfg_set;
-
 int main(int argc, char *argv[]) {
      SD_init(&argc, argv);
 
      /* Prefer MSG_config() if you use MSG!! */
-     xbt_cfg_set_parse(_sg_cfg_set,"Item:Value");
+     xbt_cfg_set_parse("Item:Value");
 
      // Rest of your code
 }
@@ -218,8 +216,8 @@ described in
 
 If you compiled SimGrid accordingly, you can use packet-level network
 simulators as network models (see \ref pls_ns3). In that case, you have
-two extra models, described below, and some \ref options_pls "specific
-additional configuration flags".
+two extra models, described below, and some 
+\ref options_pls "specific additional configuration flags".
   - \b NS3: Network pseudo-model using the NS3 tcp model
 
 Concerning the CPU, we have only one model for now:
@@ -487,13 +485,15 @@ For now, this configuration variable can take 2 values:
 \subsection options_modelchecking_visited model-check/visited, Cycle detection
 
 In order to detect cycles, the model-checker needs to check if a new explored
-state is in fact the same state than a previous one. In order to do this,
+state is in fact the same state than a previous one. For that,
 the model-checker can take a snapshot of each visited state: this snapshot is
 then used to compare it with subsequent states in the exploration graph.
 
-The \b model-check/visited is the maximum number of states which are stored in
-memory. If the maximum number of snapshotted state is reached some states will
-be removed from the memory and some cycles might be missed.
+The \b model-check/visited option is the maximum number of states which are stored in
+memory. If the maximum number of snapshotted state is reached, some states will
+be removed from the memory and some cycles might be missed. Small
+values can lead to incorrect verifications, but large value can
+exhaust your memory, so choose carefully.
 
 By default, no state is snapshotted and cycles cannot be detected.
 
index 4c73eb1..47ad381 100644 (file)
@@ -9,25 +9,25 @@ $ java -classpath ${classpath:=.} cloud/migration/Main ${srcdir:=.}/../platforms
 > [PM0:Test:(1) 0.000000] [java/INFO]      - Launch migration from PM0 to PM1
 > [PM0:Test:(1) 0.000000] [java/INFO] Start migration of VM vm0 to PM1
 > [PM0:Test:(1) 0.000000] [java/INFO]     currentLoad:90/ramSize:2048/dpIntensity:70/remaining:8.10E+11
-> [PM0:Test:(1) 35.084170] [java/INFO] End of migration of VM vm0 to node PM1
-> [PM0:Test:(1) 35.084170] [java/INFO]      - End of Migration from PM0 to PM1 (duration:35.0841702956701)
-> [PM0:Test:(1) 35.084170] [java/INFO]      - Launch migration from PM1 to PM0
-> [PM0:Test:(1) 35.084170] [java/INFO] Start migration of VM vm0 to PM0
-> [PM0:Test:(1) 35.084170] [java/INFO]     currentLoad:90/ramSize:2048/dpIntensity:70/remaining:6.22E+11
-> [PM0:Test:(1) 67.551019] [java/INFO] End of migration of VM vm0 to node PM0
-> [PM0:Test:(1) 67.551019] [java/INFO]      - End of Migration from PM1 to PM0 (duration:32.46684874546391)
-> [PM0:Test:(1) 67.551019] [java/INFO] 
-> [PM0:Test:(1) 67.551019] [java/INFO] 
-> [PM0:Test:(1) 67.551019] [java/INFO] Round trip of VM1 (load 80%)
-> [PM0:Test:(1) 67.551019] [java/INFO]      - Launch migration from PM0 to PM1
-> [PM0:Test:(1) 67.551019] [java/INFO] Start migration of VM vm0 to PM1
-> [PM0:Test:(1) 67.551019] [java/INFO]     currentLoad:80/ramSize:2048/dpIntensity:70/remaining:4.65E+11
-> [PM0:Test:(1) 102.635189] [java/INFO] End of migration of VM vm0 to node PM1
-> [PM0:Test:(1) 102.635189] [java/INFO]      - End of Migration from PM0 to PM1 (duration:35.08417029567006)
-> [PM0:Test:(1) 102.635189] [java/INFO]      - Launch migration from PM1 to PM0
-> [PM0:Test:(1) 102.635189] [java/INFO] Start migration of VM vm0 to PM0
-> [PM0:Test:(1) 102.635189] [java/INFO]     currentLoad:80/ramSize:2048/dpIntensity:70/remaining:2.77E+11
-> [PM0:Test:(1) 135.102038] [java/INFO] End of migration of VM vm0 to node PM0
-> [PM0:Test:(1) 135.102038] [java/INFO]      - End of Migration from PM1 to PM0 (duration:32.46684874546395)
-> [PM0:Test:(1) 135.102038] [java/INFO] Forcefully destroy VMs
-> [135.102038] [java/INFO] MSG_main finished; Cleaning up the simulation...
+> [PM0:Test:(1) 45.731913] [java/INFO] End of migration of VM vm0 to node PM1
+> [PM0:Test:(1) 45.731913] [java/INFO]      - End of Migration from PM0 to PM1 (duration:45.73191265731957)
+> [PM0:Test:(1) 45.731913] [java/INFO]      - Launch migration from PM1 to PM0
+> [PM0:Test:(1) 45.731913] [java/INFO] Start migration of VM vm0 to PM0
+> [PM0:Test:(1) 45.731913] [java/INFO]     currentLoad:90/ramSize:2048/dpIntensity:70/remaining:5.01E+11
+> [PM0:Test:(1) 97.502571] [java/INFO] End of migration of VM vm0 to node PM0
+> [PM0:Test:(1) 97.502571] [java/INFO]      - End of Migration from PM1 to PM0 (duration:51.770657959072125)
+> [PM0:Test:(1) 97.502571] [java/INFO] 
+> [PM0:Test:(1) 97.502571] [java/INFO] 
+> [PM0:Test:(1) 97.502571] [java/INFO] Round trip of VM1 (load 80%)
+> [PM0:Test:(1) 97.502571] [java/INFO]      - Launch migration from PM0 to PM1
+> [PM0:Test:(1) 97.502571] [java/INFO] Start migration of VM vm0 to PM1
+> [PM0:Test:(1) 97.502571] [java/INFO]     currentLoad:80/ramSize:2048/dpIntensity:70/remaining:1.24E+11
+> [PM0:Test:(1) 140.711178] [java/INFO] End of migration of VM vm0 to node PM1
+> [PM0:Test:(1) 140.711178] [java/INFO]      - End of Migration from PM0 to PM1 (duration:43.20860711422699)
+> [PM0:Test:(1) 140.711178] [java/INFO]      - Launch migration from PM1 to PM0
+> [PM0:Test:(1) 140.711178] [java/INFO] Start migration of VM vm0 to PM0
+> [PM0:Test:(1) 140.711178] [java/INFO]     currentLoad:80/ramSize:2048/dpIntensity:70/remaining:6.54E+11
+> [PM0:Test:(1) 183.918679] [java/INFO] End of migration of VM vm0 to node PM0
+> [PM0:Test:(1) 183.918679] [java/INFO]      - End of Migration from PM1 to PM0 (duration:43.207501264227034)
+> [PM0:Test:(1) 183.918679] [java/INFO] Forcefully destroy VMs
+> [183.918679] [java/INFO] MSG_main finished; Cleaning up the simulation...
index 7830de7..32e2e37 100644 (file)
@@ -18,8 +18,8 @@ $ java -classpath ${classpath:=.} energy/pstate/Main ${srcdir:=.}/../platforms/e
 > [MyHost2:dvfs_test:(3) 6.000000] [java/INFO] Task2 simulation time: 5.0
 > [MyHost2:dvfs_test:(3) 6.000000] [java/INFO] Count of Processor states=3
 > [MyHost2:dvfs_test:(3) 6.000000] [java/INFO] Current power peak=2.0E7
-> [6.000000] [surf_energy/INFO] Total energy consumption: 1890.000000 Joules (used hosts: 1290.000000 Joules; unused/idle hosts: 600.000000)
+> [6.000000] [surf_energy/INFO] Total energy consumption: 2195.000000 Joules (used hosts: 1595.000000 Joules; unused/idle hosts: 600.000000)
 > [6.000000] [java/INFO] MSG_main finished; Cleaning up the simulation...
 > [6.000000] [surf_energy/INFO] Energy consumption of host MyHost1: 645.000000 Joules
-> [6.000000] [surf_energy/INFO] Energy consumption of host MyHost2: 645.000000 Joules
+> [6.000000] [surf_energy/INFO] Energy consumption of host MyHost2: 950.000000 Joules
 > [6.000000] [surf_energy/INFO] Energy consumption of host MyHost3: 600.000000 Joules
index 35ccc6a..62e359d 100644 (file)
@@ -50,20 +50,20 @@ public class EnergyVMRunner extends Process {
     VM vmHost1 = new VM(host1, "vmHost1", 2048, 10, 50);
     vmHost1.start();
 
-    VM vmHost3 = new VM(host3, "vmHost3", 2048, 10, 50);
-    vmHost3.start();
+    VM vmHost2 = new VM(host2, "vmHost3", 2048, 10, 50);
+    vmHost2.start();
 
     Msg.info("Create two tasks on Host1: one inside a VM, the other directly on the host");
     new DummyProcess (vmHost1, "p11").start(); 
-    new DummyProcess (host1, "p12").start(); 
+    new DummyProcess (vmHost1, "p12").start(); 
 
     Msg.info("Create two tasks on Host2: both directly on the host");
-    new DummyProcess (host2, "p21").start(); 
+    new DummyProcess (vmHost2, "p21").start(); 
     new DummyProcess (host2, "p22").start(); 
 
     Msg.info("Create two tasks on Host3: both inside a VM");
-    new DummyProcess (vmHost3, "p31").start(); 
-    new DummyProcess (vmHost3, "p312").start(); 
+    new DummyProcess (host3, "p31").start(); 
+    new DummyProcess (host3, "p312").start(); 
 
     Msg.info("Wait 5 seconds. The tasks are still running (they run for 3 seconds, but 2 tasks are co-located, "
              + "so they run for 6 seconds)"); 
@@ -72,6 +72,6 @@ public class EnergyVMRunner extends Process {
     waitFor(5); 
 
     vmHost1.destroy(); 
-    vmHost3.destroy(); 
+    vmHost2.destroy(); 
   }
 }
index 025e3f7..3afdf2d 100644 (file)
@@ -8,14 +8,14 @@ $ java -classpath ${classpath:=.} energy/vm/Main ${srcdir:=.}/../platforms/energ
 > [MyHost1:energy VM runner:(1) 0.000000] [java/INFO] Create two tasks on Host3: both inside a VM
 > [MyHost1:energy VM runner:(1) 0.000000] [java/INFO] Wait 5 seconds. The tasks are still running (they run for 3 seconds, but 2 tasks are co-located, so they run for 6 seconds)
 > [MyHost1:energy VM runner:(1) 5.000000] [java/INFO] Wait another 5 seconds. The tasks stop at some point in between
-> [MyHost2:p21:(4) 6.000000] [java/INFO] This worker is done.
+> [MyHost3:p31:(6) 6.000000] [java/INFO] This worker is done.
+> [MyHost3:p312:(7) 6.000000] [java/INFO] This worker is done.
 > [MyHost2:p22:(5) 6.000000] [java/INFO] This worker is done.
-> [MyHost1:p12:(3) 6.000000] [java/INFO] This worker is done.
+> [vmHost1:p12:(3) 6.000000] [java/INFO] This worker is done.
+> [vmHost3:p21:(4) 6.000000] [java/INFO] This worker is done.
 > [vmHost1:p11:(2) 6.000000] [java/INFO] This worker is done.
-> [vmHost3:p31:(6) 6.000000] [java/INFO] This worker is done.
-> [vmHost3:p312:(7) 6.000000] [java/INFO] This worker is done.
-> [10.000000] [surf_energy/INFO] Total energy consumption: 3360.000000 Joules (used hosts: 3360.000000 Joules; unused/idle hosts: 0.000000)
+> [10.000000] [surf_energy/INFO] Total energy consumption: 4320.000000 Joules (used hosts: 4320.000000 Joules; unused/idle hosts: 0.000000)
 > [10.000000] [java/INFO] MSG_main finished; Cleaning up the simulation...
 > [10.000000] [surf_energy/INFO] Energy consumption of host MyHost1: 1120.000000 Joules
-> [10.000000] [surf_energy/INFO] Energy consumption of host MyHost2: 1120.000000 Joules
-> [10.000000] [surf_energy/INFO] Energy consumption of host MyHost3: 1120.000000 Joules
+> [10.000000] [surf_energy/INFO] Energy consumption of host MyHost2: 1600.000000 Joules
+> [10.000000] [surf_energy/INFO] Energy consumption of host MyHost3: 1600.000000 Joules
index 9379174..20b4990 100644 (file)
@@ -162,34 +162,26 @@ static void action_wait(const char *const *action)
 /* FIXME: that's a poor man's implementation: we should take the message exchanges into account */
 static void action_barrier(const char *const *action)
 {
-  static smx_mutex_t mutex = NULL;
-  static smx_cond_t cond = NULL;
+  static msg_bar_t barrier           = NULL;
   static int processes_arrived_sofar = 0;
 
-  if (mutex == NULL) {          // first arriving on the barrier
-    mutex = simcall_mutex_init();
-    cond = simcall_cond_init();
-    processes_arrived_sofar = 0;
+  if (barrier == NULL) {                                    // first arriving on the barrier
+    msg_bar_t newbar = MSG_barrier_init(communicator_size); // This is a simcall, unscheduling the current process
+    if (barrier == NULL)                                    // Still null, commit our new value
+      barrier = newbar;
+    else // some other process commited a new barrier before me, so dismiss mine
+      MSG_barrier_destroy(newbar);
   }
-  ACT_DEBUG("Entering barrier: %s (%d already there)", NAME, processes_arrived_sofar);
 
-  simcall_mutex_lock(mutex);
   processes_arrived_sofar++;
-  if (processes_arrived_sofar == communicator_size) {
-    simcall_cond_broadcast(cond);
-    simcall_mutex_unlock(mutex);
-  } else {
-    simcall_cond_wait(cond, mutex);
-    simcall_mutex_unlock(mutex);
-  }
+  MSG_barrier_wait(barrier);
 
   ACT_DEBUG("Exiting barrier: %s", NAME);
 
   processes_arrived_sofar--;
   if (processes_arrived_sofar<=0) {
-    SIMIX_cond_unref(cond);
-    SIMIX_mutex_unref(mutex);
-    mutex = NULL;
+    MSG_barrier_destroy(barrier);
+    barrier = NULL;
   }
 }
 
index a4e0bec..0411b63 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2015-2016. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2015-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. */
@@ -28,11 +28,10 @@ static void log_action(const char *const *action, double date)
 
 static msg_file_t get_file_descriptor(const char *file_name){
   char full_name[1024];
-  msg_file_t file = NULL;
 
   snprintf(full_name,1023, "%s:%s", MSG_process_get_name(MSG_process_self()), file_name);
 
-  file = (msg_file_t) xbt_dict_get_or_null(opened_files, full_name);
+  msg_file_t file = (msg_file_t)xbt_dict_get_or_null(opened_files, full_name);
   return file;
 }
 
@@ -65,12 +64,11 @@ static void action_open(const char *const *action) {
 static void action_read(const char *const *action) {
   const char *file_name = action[2];
   const char *size_str = action[3];
-  msg_file_t file = NULL;
   sg_size_t size = parse_size(size_str);
 
   double clock = MSG_get_clock();
 
-  file = get_file_descriptor(file_name);
+  msg_file_t file = get_file_descriptor(file_name);
 
   ACT_DEBUG("Entering Read: %s (size: %llu)", NAME, size);
   MSG_file_read(file, size);
index d4413d4..116f44f 100644 (file)
@@ -32,7 +32,7 @@ typedef struct s_broadcaster {
 
 typedef s_broadcaster_t *broadcaster_t;
 
-xbt_dynar_t build_hostlist_from_hostcount(int hostcount); 
+xbt_dynar_t build_hostlist_from_hostcount(int hostcount);
 
 /* Broadcaster: helper functions */
 broadcaster_t broadcaster_init(xbt_dynar_t host_list, unsigned int piece_count);
index 771e521..292abe8 100644 (file)
@@ -11,7 +11,7 @@
 #include "peer.h"
 
 /** @addtogroup MSG_examples
- * 
+ *
  *  - <b>chainsend: MSG implementation of a file broadcasting system, similar to Kastafior (from Kadeploy).</b>.
  */
 
index a6f7e44..1bba4d5 100644 (file)
@@ -13,7 +13,7 @@
 xbt_dynar_iterator_t xbt_dynar_iterator_new(xbt_dynar_t list, xbt_dynar_t (*criteria_fn)(int))
 {
   xbt_dynar_iterator_t it = xbt_new(xbt_dynar_iterator_s, 1);
-  
+
   it->list = list;
   it->length = xbt_dynar_length(list);
   it->indices_list = criteria_fn(it->length); // Creates and fills a dynar of int
index 63fa465..de72e55 100644 (file)
@@ -28,7 +28,7 @@ int peer_execute_task(peer_t peer, msg_task_t task)
 {
   int done = 0;
   message_t msg = MSG_task_get_data(task);
-  
+
   XBT_DEBUG("Peer %s got message of type %d\n", peer->me, msg->type);
   if (msg->type == MESSAGE_BUILD_CHAIN)
     peer_init_chain(peer, msg);
@@ -39,7 +39,7 @@ int peer_execute_task(peer_t peer, msg_task_t task)
     peer->pieces++;
     peer->bytes += msg->data_length;
     if (peer->pieces >= peer->total_pieces) {
-      XBT_DEBUG("%d pieces receieved", peer->pieces);
+      XBT_DEBUG("%d pieces received", peer->pieces);
       done = 1;
     }
   }
@@ -130,7 +130,7 @@ void peer_delete(peer_t p)
 
 void peer_print_stats(peer_t p, float elapsed_time)
 {
-  XBT_INFO("### %f %llu bytes (Avg %f MB/s); copy finished (simulated).", elapsed_time, p->bytes, p->bytes / 1024.0 / 1024.0 / elapsed_time); 
+  XBT_INFO("### %f %llu bytes (Avg %f MB/s); copy finished (simulated).", elapsed_time, p->bytes, p->bytes / 1024.0 / 1024.0 / elapsed_time);
 }
 
 /** Peer function  */
index 9687ce7..91a5b0f 100644 (file)
@@ -30,7 +30,7 @@ static int pinger(int argc, char *argv[])
   XBT_INFO("Task received : %s", pong_task->name);
   xbt_free(pong_task->data);
   MSG_task_destroy(pong_task);
-  XBT_INFO("Pong time (bandwidth bound): %e", communication_time);
+  XBT_INFO("Pong time (bandwidth bound): %.3f", communication_time);
 
   return 0;
 }
@@ -51,14 +51,14 @@ static int ponger(int argc, char *argv[])
   XBT_INFO("Task received : %s", ping_task->name);
   xbt_free(ping_task->data);
   MSG_task_destroy(ping_task);
-  XBT_INFO(" Ping time (latency bound) %e", communication_time);
+  XBT_INFO(" Ping time (latency bound) %f", communication_time);
 
   /*  - ... Then send a 1GB pong back (bandwidth bound) */
   double now = MSG_get_clock();
   msg_task_t pong_task = MSG_task_create("large communication (bandwidth bound)", 0.0, 1e9, NULL);
   pong_task->data = xbt_new(double, 1);
   *(double *) pong_task->data = now;
-  XBT_INFO("task_bw->data = %e", *((double *) pong_task->data));
+  XBT_INFO("task_bw->data = %.3f", *((double*)pong_task->data));
   MSG_task_send(pong_task, argv[1]);
 
   return 0;
@@ -80,6 +80,6 @@ int main(int argc, char *argv[])
 
   msg_error_t res = MSG_main();             /* - Run the simulation */
 
-  XBT_INFO("Total simulation time: %e", MSG_get_clock());
+  XBT_INFO("Total simulation time: %.3f", MSG_get_clock());
   return res!=MSG_OK;
 }
index d7e1a3a..a8108ff 100644 (file)
@@ -6,11 +6,11 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xm
 > [  0.000000] (1:pinger@Tremblay) Ping -> Jupiter
 > [  0.000000] (2:ponger@Jupiter) Pong -> Tremblay
 > [  0.019014] (2:ponger@Jupiter) Task received : small communication (latency bound)
-> [  0.019014] (2:ponger@Jupiter)  Ping time (latency bound) 1.901449e-02
-> [  0.019014] (2:ponger@Jupiter) task_bw->data = 1.901449e-02
+> [  0.019014] (2:ponger@Jupiter)  Ping time (latency bound) 0.019014
+> [  0.019014] (2:ponger@Jupiter) task_bw->data = 0.019
 > [150.178356] (1:pinger@Tremblay) Task received : large communication (bandwidth bound)
-> [150.178356] (1:pinger@Tremblay) Pong time (bandwidth bound): 1.501593e+02
-> [150.178356] (0:maestro@) Total simulation time: 1.501784e+02
+> [150.178356] (1:pinger@Tremblay) Pong time (bandwidth bound): 150.159
+> [150.178356] (0:maestro@) Total simulation time: 150.178
 
 p Testing the deprecated CM02 network model
 
@@ -20,11 +20,11 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xm
 > [  0.000000] (1:pinger@Tremblay) Ping -> Jupiter
 > [  0.000000] (2:ponger@Jupiter) Pong -> Tremblay
 > [  0.001462] (2:ponger@Jupiter) Task received : small communication (latency bound)
-> [  0.001462] (2:ponger@Jupiter)  Ping time (latency bound) 1.461663e-03
-> [  0.001462] (2:ponger@Jupiter) task_bw->data = 1.461663e-03
+> [  0.001462] (2:ponger@Jupiter)  Ping time (latency bound) 0.001462
+> [  0.001462] (2:ponger@Jupiter) task_bw->data = 0.001
 > [145.639041] (1:pinger@Tremblay) Task received : large communication (bandwidth bound)
-> [145.639041] (1:pinger@Tremblay) Pong time (bandwidth bound): 1.456376e+02
-> [145.639041] (0:maestro@) Total simulation time: 1.456390e+02
+> [145.639041] (1:pinger@Tremblay) Pong time (bandwidth bound): 145.638
+> [145.639041] (0:maestro@) Total simulation time: 145.639
 
 p Testing the surf network Reno fairness model using lagrangian approach
 
@@ -35,11 +35,11 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xm
 > [  0.000000] (1:pinger@Tremblay) Ping -> Jupiter
 > [  0.000000] (2:ponger@Jupiter) Pong -> Tremblay
 > [  0.015200] (2:ponger@Jupiter) Task received : small communication (latency bound)
-> [  0.015200] (2:ponger@Jupiter)  Ping time (latency bound) 1.519994e-02
-> [  0.015200] (2:ponger@Jupiter) task_bw->data = 1.519994e-02
+> [  0.015200] (2:ponger@Jupiter)  Ping time (latency bound) 0.015200
+> [  0.015200] (2:ponger@Jupiter) task_bw->data = 0.015
 > [158.330528] (1:pinger@Tremblay) Task received : large communication (bandwidth bound)
-> [158.330528] (1:pinger@Tremblay) Pong time (bandwidth bound): 1.583153e+02
-> [158.330528] (0:maestro@) Total simulation time: 1.583305e+02
+> [158.330528] (1:pinger@Tremblay) Pong time (bandwidth bound): 158.315
+> [158.330528] (0:maestro@) Total simulation time: 158.331
 
 p Testing the surf network Vegas fairness model using lagrangian approach
 
@@ -50,8 +50,8 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xm
 > [  0.000000] (1:pinger@Tremblay) Ping -> Jupiter
 > [  0.000000] (2:ponger@Jupiter) Pong -> Tremblay
 > [  0.015200] (2:ponger@Jupiter) Task received : small communication (latency bound)
-> [  0.015200] (2:ponger@Jupiter)  Ping time (latency bound) 1.519994e-02
-> [  0.015200] (2:ponger@Jupiter) task_bw->data = 1.519994e-02
+> [  0.015200] (2:ponger@Jupiter)  Ping time (latency bound) 0.015200
+> [  0.015200] (2:ponger@Jupiter) task_bw->data = 0.015
 > [158.330528] (1:pinger@Tremblay) Task received : large communication (bandwidth bound)
-> [158.330528] (1:pinger@Tremblay) Pong time (bandwidth bound): 1.583153e+02
-> [158.330528] (0:maestro@) Total simulation time: 1.583305e+02
+> [158.330528] (1:pinger@Tremblay) Pong time (bandwidth bound): 158.315
+> [158.330528] (0:maestro@) Total simulation time: 158.331
index 3a6c019..1f046a7 100644 (file)
@@ -11,13 +11,13 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(msg_app_token_ring, "Messages specific for this msg
 static int relay_runner(int argc, char *argv[])
 {
   xbt_assert(argc==0, "The relay_runner function does not accept any parameter from the XML deployment file");
-  unsigned int task_comm_size = 1000000; /* The token is 1MB long*/
   int rank = xbt_str_parse_int(MSG_process_get_name(MSG_process_self()), "Any process of this example must have a numerical name, not %s");
   char mailbox[256];
 
   if (rank == 0) {
     /* The root process (rank 0) first sends the token then waits to receive it back */
     snprintf(mailbox,255, "%d", rank+1);
+    unsigned int task_comm_size = 1000000; /* The token is 1MB long*/
     msg_task_t task = MSG_task_create("Token", 0, task_comm_size, NULL);
     XBT_INFO("Host \"%d\" send '%s' to Host \"%s\"", rank, task->name,mailbox);
     MSG_task_send(task, mailbox);
index 286526c..0c4d599 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2016. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2010-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. */
@@ -10,7 +10,7 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_wait, "Messages specific for this msg exa
 /* Main function of the Sender process */
 static int sender(int argc, char *argv[])
 {
-  xbt_assert(argc==7, "The sender function expects 6 arguments from the XML deployment file"); 
+  xbt_assert(argc==7, "The sender function expects 6 arguments from the XML deployment file");
   long number_of_tasks = xbt_str_parse_int(argv[1], "Invalid amount of tasks: %s");        /* - number of tasks */
   double task_comp_size = xbt_str_parse_double(argv[2], "Invalid computational size: %s"); /* - computational cost */
   double task_comm_size = xbt_str_parse_double(argv[3], "Invalid communication size: %s"); /* - communication cost */
@@ -45,10 +45,10 @@ static int sender(int argc, char *argv[])
 
   for (int i = 0; i < receivers_count; i++) {
     char mailbox[80];
-    snprintf(mailbox,79, "receiver-%ld", i % receivers_count);
+    snprintf(mailbox, 79, "receiver-%d", i);
     msg_task_t task = MSG_task_create("finalize", 0, 0, 0);
     msg_comm_t comm = MSG_task_isend(task, mailbox);
-    XBT_INFO("Send to receiver-%ld finalize", i % receivers_count);
+    XBT_INFO("Send to receiver-%d finalize", i);
     if (sleep_test_time > 0) {
       while (MSG_comm_test(comm) == 0) {
         MSG_process_sleep(sleep_test_time);
index 3bbfe40..c828b13 100644 (file)
@@ -50,7 +50,7 @@ static int receiver(int argc, char *argv[])
 
   char mailbox[80];
   snprintf(mailbox,79, "receiver-%d", id);
-   
+
   MSG_process_sleep(10);
   while (1) {
     XBT_INFO("Wait to receive a task");
index 01ebfc0..95b92aa 100644 (file)
@@ -30,7 +30,7 @@ static int sender(int argc, char *argv[])
     xbt_dynar_push_as(comms, msg_comm_t, comm);
     XBT_INFO("Send to receiver-%ld %s comm_size %f", i % receivers_count, taskname, task_comm_size / coef);
   }
-   
+
   /* Here we are waiting for the completion of all communications */
   while (xbt_dynar_is_empty(comms) == 0) {
     msg_comm_t comm;
@@ -63,7 +63,7 @@ static int receiver(int argc, char *argv[])
 
   char mailbox[80];
   snprintf(mailbox,79, "receiver-%d", id);
-   
+
   MSG_process_sleep(10);
   for (int i = 0; i < task_amount; i++) {
     XBT_INFO("Wait to receive task %d", i);
index 7c633ad..6f9d25d 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2007-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2007-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. */
@@ -85,17 +84,16 @@ static int communication_rx_fun(int argc, char *argv[])
 static void launch_communication_worker(msg_host_t tx_host, msg_host_t rx_host)
 {
   char *mbox = bprintf("MBOX:%s-%s", MSG_host_get_name(tx_host), MSG_host_get_name(rx_host));
-  char **argv = NULL;
-  
   const char *pr_name_tx =  "comm_tx";
-  argv = xbt_new(char *, 3);
+
+  char** argv = xbt_new(char*, 3);
   argv[0] = xbt_strdup(pr_name_tx);
   argv[1] = xbt_strdup(mbox);
   argv[2] = NULL;
 
   MSG_process_create_with_arguments(pr_name_tx, communication_tx_fun, NULL, tx_host, 2, argv);
 
-  const char *pr_name_rx =  "comm_rx";  
+  const char *pr_name_rx =  "comm_rx";
   argv = xbt_new(char *, 3);
   argv[0] = xbt_strdup(pr_name_rx);
   argv[1] = xbt_strdup(mbox);
index 66faa97..1cb3654 100644 (file)
@@ -134,7 +134,7 @@ static void print_finger_table(node_t node)
 }
 
 /* Sets a finger of the current node.
- * 
+ *
  * \param node the current node
  * \param finger_index index of the finger to set (0 to nb_bits - 1)
  * \param id the id to set for this finger
@@ -150,7 +150,7 @@ static void set_finger(node_t node, int finger_index, int id)
 }
 
 /* Sets the predecessor of the current node.
- * 
+ *
  * \param node the current node
  * \param id the id to predecessor, or -1 to unset the predecessor
  */
@@ -169,14 +169,14 @@ static void set_predecessor(node_t node, int predecessor_id)
 }
 
 /* Node main Function
- * 
+ *
  * Arguments:
  * - my id
  * - the id of a guy I know in the system (except for the first node)
  * - the time to sleep before I join (except for the first node)
  */
 /* This function is called when the current node receives a task.
- * 
+ *
  * \param node the current node
  * \param task the task to handle (don't touch it afterward: it will be destroyed, reused or forwarded)
  */
@@ -276,7 +276,7 @@ void create(node_t node)
 }
 
 /* Makes the current node join the ring, knowing the id of a node already in the ring
- * 
+ *
  * \param node the current node
  * \param known_id id of a node already in the ring
  * \return 1 if the join operation succeeded, 0 otherwise
@@ -340,7 +340,7 @@ void quit_notify(node_t node)
 }
 
 /* Makes the current node find the successor node of an id.
- * 
+ *
  * \param node the current node
  * \param id the id to find
  * \return the id of the successor node, or -1 if the request failed
@@ -358,7 +358,7 @@ int find_successor(node_t node, int id)
 }
 
 /* \brief Asks another node the successor node of an id.
- * 
+ *
  * \param node the current node
  * \param ask_to the node to ask to
  * \param id the id to find
@@ -367,7 +367,6 @@ int find_successor(node_t node, int id)
 int remote_find_successor(node_t node, int ask_to, int id)
 {
   int successor = -1;
-  int stop = 0;
   char mailbox[MAILBOX_NAME_SIZE];
   get_mailbox(ask_to, mailbox);
   task_data_t req_data = xbt_new0(s_task_data_t, 1);
@@ -385,6 +384,7 @@ int remote_find_successor(node_t node, int ask_to, int id)
     XBT_DEBUG("Failed to send the 'Find Successor' request (task %p) to %d for id %d", task_sent, ask_to, id);
     task_free(task_sent);
   } else {
+    int stop = 0;
     // receive the answer
     XBT_DEBUG("Sent a 'Find Successor' request (task %p) to %d for key %d, waiting for the answer",
         task_sent, ask_to, id);
@@ -447,7 +447,7 @@ int remote_find_successor(node_t node, int ask_to, int id)
 }
 
 /* Asks its predecessor to a remote node
- * 
+ *
  * \param node the current node
  * \param ask_to the node to ask to
  * \return the id of its predecessor node, or -1 if the request failed
@@ -526,7 +526,7 @@ int remote_get_predecessor(node_t node, int ask_to)
 }
 
 /* Returns the closest preceding finger of an id with respect to the finger table of the current node.
- * 
+ *
  * \param node the current node
  * \param id the id to find
  * \return the closest preceding finger of that id
index b9cac1e..517797e 100644 (file)
@@ -245,13 +245,13 @@ static void handle_task(node_t node, msg_task_t task) {
     /* Try to join the ring */
     case TASK_JOIN:
       next = routing_next(node, task_data->answer_id);
-      XBT_DEBUG("Join request from %08x forwarding to %08x", task_data->answer_id, next);      
+      XBT_DEBUG("Join request from %08x forwarding to %08x", task_data->answer_id, next);
       type = TASK_JOIN_LAST_REPLY;
 
       req_data = xbt_new0(s_task_data_t,1);
       req_data->answer_id = task_data->sender_id;
       req_data->steps = task_data->steps + 1;
-      
+
       // if next different from current node forward the join
       if (next!=node->id) {
         get_mailbox(next, mailbox);
@@ -263,8 +263,8 @@ static void handle_task(node_t node, msg_task_t task) {
           task_free(task_sent);
         }
         type = TASK_JOIN_REPLY;
-      } 
-      
+      }
+
       // send back the current node state to the joining node
       req_data->type = type;
       req_data->sender_id = node->id;
@@ -351,7 +351,7 @@ static void handle_task(node_t node, msg_task_t task) {
       print_node_namespace_set(node);
       int curr_namespace_set[NAMESPACE_SIZE];
       int task_namespace_set[NAMESPACE_SIZE+1];
-      
+
       // Copy the current namespace and the task state namespace with state->id in the middle
       i=0;
       for (; i<NAMESPACE_SIZE/2; i++){
@@ -360,7 +360,7 @@ static void handle_task(node_t node, msg_task_t task) {
       }
       task_namespace_set[i] = task_data->state->id;
       for (; i<NAMESPACE_SIZE; i++){
-        curr_namespace_set[i] = node->namespace_set[i];  
+        curr_namespace_set[i] = node->namespace_set[i];
         task_namespace_set[i+1] = task_data->state->namespace_set[i];
       }
 
@@ -465,8 +465,8 @@ static int join(node_t node){
 static int node(int argc, char *argv[])
 {
   double init_time = MSG_get_clock();
-  msg_task_t task_received = NULL;  
-  int join_success = 0;  
+  msg_task_t task_received = NULL;
+  int join_success = 0;
   double deadline;
   xbt_assert(argc == 3 || argc == 5, "Wrong number of arguments for this node");
   s_node_t node = {0};
@@ -556,9 +556,9 @@ static int node(int argc, char *argv[])
 int main(int argc, char *argv[])
 {
   MSG_init(&argc, argv);
-  xbt_assert(argc > 2, 
+  xbt_assert(argc > 2,
        "Usage: %s [-nb_bits=n] [-timeout=t] platform_file deployment_file\n"
-       "\tExample: %s ../msg_platform.xml pastry10.xml\n", 
+       "\tExample: %s ../msg_platform.xml pastry10.xml\n",
        argv[0], argv[0]);
 
   char **options = &argv[1];
index f0c366e..f60249d 100644 (file)
@@ -4,7 +4,7 @@ p Testing the mechanism for computing host energy consumption
 
 ! output sort 19
 $ ${bindir:=.}/energy-onoff/energy-onoff$EXEEXT ${srcdir:=.}/energy-onoff/platform_onoff.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (1:onoff_test@MyHost2) Energetic profile: 95.0:120.0:200.0,93.0:110.0:170.0,90.0:100.0:150.0, 120:120:120,110:110:110
+> [  0.000000] (1:onoff_test@MyHost2) Energetic profile: 95.0:200.0,93.0:170.0,90.0:150.0, 120:120,110:110
 > [  0.000000] (1:onoff_test@MyHost2) Initial peak speed=1E+08 flop/s; Energy dissipated =0E+00 J
 > [  0.000000] (1:onoff_test@MyHost2) Sleep for 10 seconds
 > [ 10.000000] (1:onoff_test@MyHost2) Done sleeping. Current peak speed=1E+08; Energy dissipated=950.00 J
index b0423a9..5010de2 100644 (file)
       values that are right for you. -->
 
     <host id="MyHost1" speed="100.0Mf,50.0Mf,20.0Mf,                               0.006666667f,0.1429f" pstate="0" >
-      <prop id="watt_per_state" value="95.0:120.0:200.0,93.0:110.0:170.0,90.0:100.0:150.0, 120:120:120,110:110:110" />
+      <prop id="watt_per_state" value="95.0:200.0,93.0:170.0,90.0:150.0, 120:120,110:110" />
       <prop id="watt_off"       value="10" />
     </host>
     <host id="MyHost2" speed="100.0Mf" >
-      <prop id="watt_per_state" value="100.0:120.0:200.0" />
+      <prop id="watt_per_state" value="100.0:200.0" />
       <prop id="watt_off"       value="10" />
     </host>
 
index 2601390..6414155 100644 (file)
@@ -8,8 +8,8 @@ $ ${bindir:=.}/energy-ptask/energy-ptask$EXEEXT ${srcdir:=.}/../platforms/energy
 > [311.000000] (1:test@MyHost1) Then, build a parallel task with no computation nor communication (synchro only)
 > [311.000000] (1:test@MyHost1) Finally, trick the ptask to do a 'remote execution', on host MyHost2
 > [321.000000] (1:test@MyHost1) Goodbye now!
-> [321.000000] (0:maestro@) Total energy consumption: 115160.000000 Joules (used hosts: 115160.000000 Joules; unused/idle hosts: 0.000000)
+> [321.000000] (0:maestro@) Total energy consumption: 157960.888889 Joules (used hosts: 157960.888889 Joules; unused/idle hosts: 0.000000)
 > [321.000000] (0:maestro@) Simulation done.
-> [321.000000] (0:maestro@) Energy consumption of host MyHost1: 38320.000000 Joules
-> [321.000000] (0:maestro@) Energy consumption of host MyHost2: 38520.000000 Joules
-> [321.000000] (0:maestro@) Energy consumption of host MyHost3: 38320.000000 Joules
+> [321.000000] (0:maestro@) Energy consumption of host MyHost1: 30560.888889 Joules
+> [321.000000] (0:maestro@) Energy consumption of host MyHost2: 64200.000000 Joules
+> [321.000000] (0:maestro@) Energy consumption of host MyHost3: 63200.000000 Joules
index 68ca470..c423c26 100644 (file)
@@ -27,20 +27,20 @@ static int dvfs(int argc, char *argv[])
   XBT_INFO("Creating and starting two VMs");
   msg_vm_t vm_host1 = MSG_vm_create(host1, "vm_host1", 1, 2048, 10, 50);
   MSG_vm_start(vm_host1);
-  msg_vm_t vm_host3 = MSG_vm_create(host3, "vm_host3", 1, 2048, 10, 50);
-  MSG_vm_start(vm_host3);
+  msg_vm_t vm_host2 = MSG_vm_create(host2, "vm_host3", 1, 2048, 10, 50);
+  MSG_vm_start(vm_host2);
 
   XBT_INFO("Create two tasks on Host1: one inside a VM, the other directly on the host");
   MSG_process_create("p11", worker_func, NULL, vm_host1);
-  MSG_process_create("p12", worker_func, NULL, host1);
+  MSG_process_create("p12", worker_func, NULL, vm_host1);
 
   XBT_INFO("Create two tasks on Host2: both directly on the host");
-  MSG_process_create("p21", worker_func, NULL, host2);
+  MSG_process_create("p21", worker_func, NULL, vm_host2);
   MSG_process_create("p22", worker_func, NULL, host2);
 
   XBT_INFO("Create two tasks on Host3: both inside a VM");
-  MSG_process_create("p31", worker_func, NULL, vm_host3);
-  MSG_process_create("p32", worker_func, NULL, vm_host3);
+  MSG_process_create("p31", worker_func, NULL, host3);
+  MSG_process_create("p32", worker_func, NULL, host3);
 
   XBT_INFO("Wait 5 seconds. The tasks are still running (they run for 3 seconds, but 2 tasks are co-located, "
            "so they run for 6 seconds)");
@@ -49,9 +49,9 @@ static int dvfs(int argc, char *argv[])
   MSG_process_sleep(5);
 
   MSG_vm_shutdown(vm_host1);
-  MSG_vm_shutdown(vm_host3);
+  MSG_vm_shutdown(vm_host2);
   MSG_vm_destroy(vm_host1);
-  MSG_vm_destroy(vm_host3);
+  MSG_vm_destroy(vm_host2);
 
   return 0;
 }
@@ -69,7 +69,9 @@ int main(int argc, char *argv[])
 
   msg_error_t res = MSG_main();
 
-  XBT_INFO("Total simulation time: %.2f; All hosts must have the exact same energy consumption.", MSG_get_clock());
+  XBT_INFO("Total simulation time: %.2f; Host2 and Host3 must have the exact same energy consumption; Host1 is "
+           "multi-core and will differ.",
+           MSG_get_clock());
 
   return res != MSG_OK;
 }
index c89dd5d..965e8ac 100644 (file)
@@ -9,14 +9,14 @@ $ ${bindir:=.}/energy-vm/energy-vm$EXEEXT ${srcdir:=.}/../platforms/energy_platf
 > [  0.000000] (1:dvfs@MyHost1) Create two tasks on Host3: both inside a VM
 > [  0.000000] (1:dvfs@MyHost1) Wait 5 seconds. The tasks are still running (they run for 3 seconds, but 2 tasks are co-located, so they run for 6 seconds)
 > [  5.000000] (1:dvfs@MyHost1) Wait another 5 seconds. The tasks stop at some point in between
-> [  6.000000] (4:p21@MyHost2) This worker is done.
+> [  6.000000] (6:p31@MyHost3) This worker is done.
+> [  6.000000] (7:p32@MyHost3) This worker is done.
 > [  6.000000] (5:p22@MyHost2) This worker is done.
-> [  6.000000] (3:p12@MyHost1) This worker is done.
+> [  6.000000] (3:p12@vm_host1) This worker is done.
+> [  6.000000] (4:p21@vm_host3) This worker is done.
 > [  6.000000] (2:p11@vm_host1) This worker is done.
-> [  6.000000] (6:p31@vm_host3) This worker is done.
-> [  6.000000] (7:p32@vm_host3) This worker is done.
-> [ 10.000000] (0:maestro@) Total energy consumption: 3360.000000 Joules (used hosts: 3360.000000 Joules; unused/idle hosts: 0.000000)
-> [ 10.000000] (0:maestro@) Total simulation time: 10.00; All hosts must have the exact same energy consumption.
+> [ 10.000000] (0:maestro@) Total energy consumption: 4320.000000 Joules (used hosts: 4320.000000 Joules; unused/idle hosts: 0.000000)
+> [ 10.000000] (0:maestro@) Total simulation time: 10.00; Host2 and Host3 must have the exact same energy consumption; Host1 is multi-core and will differ.
 > [ 10.000000] (0:maestro@) Energy consumption of host MyHost1: 1120.000000 Joules
-> [ 10.000000] (0:maestro@) Energy consumption of host MyHost2: 1120.000000 Joules
-> [ 10.000000] (0:maestro@) Energy consumption of host MyHost3: 1120.000000 Joules
+> [ 10.000000] (0:maestro@) Energy consumption of host MyHost2: 1600.000000 Joules
+> [ 10.000000] (0:maestro@) Energy consumption of host MyHost3: 1600.000000 Joules
index 3e9d272..4f7f079 100644 (file)
@@ -76,10 +76,10 @@ static int host(int argc, char *argv[])
             filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st));
 
   if (MSG_process_self_PID() == 1){
-    XBT_INFO("\tUnlink file '%s'",MSG_file_get_name(file));
+    XBT_INFO("\tUnlink file '%s'", MSG_file_get_name(file));
     MSG_file_unlink(file);
   } else {
-    XBT_INFO("\tClose file '%s'",filename);
+    XBT_INFO("\tClose file '%s'", filename);
     MSG_file_close(file);
   }
   return 0;
index 85dc770..948950b 100644 (file)
@@ -69,7 +69,7 @@ int main(int argc, char **argv)
   xbt_dynar_foreach(storages, cur, st){
     XBT_INFO("Init: %llu MiB used on '%s'", MSG_storage_get_used_size(st)/INMEGA, MSG_storage_get_name(st));
   }
-  xbt_dynar_free_container(&storages);
+  xbt_dynar_free(&storages);
 
   XBT_INFO("Simulation time %g", MSG_get_clock());
   return res != MSG_OK;
index 4094c93..298e6e6 100644 (file)
@@ -73,6 +73,7 @@ static int host(int argc, char *argv[]){
   /* - Then retrieve this data */
   char *data = MSG_file_get_data(file);
   XBT_INFO("User data attached to the file: %s", data);
+  xbt_free(data);
 
   MSG_file_close(file);
   free(file_name);
@@ -92,18 +93,17 @@ static int host(int argc, char *argv[]){
 
   /* - Finally dump disks contents */
   XBT_INFO("*** Dump content of %s ***",MSG_host_get_name(MSG_host_self()));
-  xbt_dict_t contents = NULL;
-  contents = MSG_host_get_storage_content(MSG_host_self()); // contents is a dict of dicts
+  xbt_dict_t contents = MSG_host_get_storage_content(MSG_host_self()); // contents is a dict of dicts
   xbt_dict_cursor_t curs;
   xbt_dict_cursor_t curs2 = NULL;
   char* mountname;
   xbt_dict_t content;
   char* path;
-  sg_size_t *size;
+  sg_size_t* psize;
   xbt_dict_foreach(contents, curs, mountname, content){
     XBT_INFO("Print the content of mount point: %s",mountname);
-    xbt_dict_foreach(content,curs2,path,size){
-       XBT_INFO("%s size: %llu bytes", path,*((sg_size_t*)size));
+    xbt_dict_foreach (content, curs2, path, psize) {
+      XBT_INFO("%s size: %llu bytes", path, *psize);
     }
     xbt_dict_free(&content);
   }
index c1ab4d2..3b37c1c 100644 (file)
@@ -5,10 +5,10 @@
 
 /** @addtogroup MSG_examples
  *
- *  - <b>maestro-set/maestro-set.cpp: Switch the system thread hosting our maestro</b>. 
+ *  - <b>maestro-set/maestro-set.cpp: Switch the system thread hosting our maestro</b>.
  *    That's a very advanced example in which we move the maestro thread to another process.
  *    Not many users need it (maybe only one, actually), but this example is also a regression test.
- * 
+ *
  *    This example is in C++ because we use C++11 threads to ensure that the feature is working as
  *    expected. You can still use that feature from a C code.
  */
index 47107f0..05da543 100644 (file)
@@ -21,7 +21,7 @@
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(bugged1_liveness, "my log messages");
 
-int r=0; 
+int r=0;
 int cs=0;
 
 #ifdef GARBAGE_STACK
@@ -43,15 +43,15 @@ static int coordinator(int argc, char *argv[])
   xbt_dynar_t requests = xbt_dynar_new(sizeof(char *), NULL);
   char *req;
 
-  while(1){  
+  while(1){
     MSG_task_receive(&task, "coordinator");
-    const char *kind = MSG_task_get_name(task); 
-    if (!strcmp(kind, "request")) {    
+    const char *kind = MSG_task_get_name(task);
+    if (!strcmp(kind, "request")) {
       req = MSG_task_get_data(task);
-      if (CS_used) {           
+      if (CS_used) {
         XBT_INFO("CS already used. Queue the request.");
         xbt_dynar_push(requests, &req);
-      } else {               
+      } else {
         if(strcmp(req, "1") != 0){
           XBT_INFO("CS idle. Grant immediatly");
           answer = MSG_task_create("grant", 0, 1000, NULL);
@@ -130,7 +130,7 @@ static int client(int argc, char *argv[])
       r=0;
       XBT_INFO("Propositions changed : r=0, cs=0");
     }
-    
+
   }
   return 0;
 }
index c24c967..eaf06f4 100644 (file)
@@ -10,4 +10,4 @@
 int predR(void);
 int predCS(void);
 
-#endif 
+#endif
index 2310f28..67e91ac 100644 (file)
@@ -28,7 +28,7 @@ static int coordinator(int argc, char *argv[])
     const char *kind = MSG_task_get_name(task); //is it a request or a release?
     if (!strcmp(kind, "request")) {     // that's a request
       char *req = MSG_task_get_data(task);
-      if (CS_used) { 
+      if (CS_used) {
         XBT_INFO("CS already used.");
         msg_task_t answer = MSG_task_create("not grant", 0, 1000, NULL);
         MSG_task_send(answer, req);
index b8b2c53..7729c38 100644 (file)
@@ -5,7 +5,7 @@
 
 /******************** Non-deterministic message ordering  *********************/
 /* This example implements one process which receives messages from two other */
-/* processes. There is no bug on it, it is just provided to test the soundness*/ 
+/* processes. There is no bug on it, it is just provided to test the soundness*/
 /* of the state space reduction with DPOR, if the maximum depth (defined with */
 /* --cfg=model-check/max_depth:) is reached.                                  */
 /******************************************************************************/
index 9e1de6d..a7b4d59 100644 (file)
@@ -7,7 +7,7 @@
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(test, "Property test");
 
-static void test_host(const char*hostname) 
+static void test_host(const char*hostname)
 {
   msg_host_t thehost = MSG_host_by_name(hostname);
   xbt_dict_t props = MSG_host_get_properties(thehost);
index 31f6a36..e34e950 100644 (file)
@@ -1,15 +1,13 @@
-/* Copyright (c) 2009-2016. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2009-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. */
 
 #include "simgrid/msg.h"
-#include "xbt/synchro.h"
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_process_migration, "Messages specific for this msg example");
 
-xbt_mutex_t checkpoint = NULL;
-xbt_cond_t identification = NULL;
+msg_bar_t barrier;
 static msg_process_t controlled_process = NULL;
 
 /* The Emigrant process will be moved from host to host. */
@@ -27,10 +25,8 @@ static int emigrant(int argc, char *argv[])
   MSG_process_migrate(MSG_process_self(), MSG_host_by_name("Jacquelin")); /* - Move back to original location */
   MSG_process_migrate(MSG_process_self(), MSG_host_by_name("Boivin"));    /* - Go back to the other host to sleep*/
   MSG_process_sleep(4);
-  xbt_mutex_acquire(checkpoint);                                          /* - Get controlled at checkpoint */
-  controlled_process = MSG_process_self();                                /* - and get moved back by the policeman process */
-  xbt_cond_broadcast(identification);
-  xbt_mutex_release(checkpoint);
+  controlled_process = MSG_process_self(); /* - Get controlled at checkpoint */
+  MSG_barrier_wait(barrier);
   MSG_process_suspend(MSG_process_self());
   msg_host_t h = MSG_process_get_host(MSG_process_self());
   XBT_INFO("I've been moved on this new host: %s", MSG_host_get_name(h));
@@ -41,13 +37,11 @@ static int emigrant(int argc, char *argv[])
 /* The policeman check for emigrants and move them back to 'Jacquelin' */
 static int policeman(int argc, char *argv[])
 {
-  xbt_mutex_acquire(checkpoint);
   XBT_INFO("Wait at the checkpoint.");  /* - block on the mutex+condition */
-  while (controlled_process == NULL) xbt_cond_wait(identification, checkpoint);
+  MSG_barrier_wait(barrier);
   MSG_process_migrate(controlled_process, MSG_host_by_name("Jacquelin")); /* - Move an emigrant to Jacquelin */
   XBT_INFO("I moved the emigrant");
   MSG_process_resume(controlled_process);
-  xbt_mutex_release(checkpoint);
 
   return 0;
 }
@@ -62,12 +56,10 @@ int main(int argc, char *argv[])
   MSG_process_create("emigrant", emigrant, NULL, MSG_get_host_by_name("Jacquelin"));
   MSG_process_create("policeman", policeman, NULL, MSG_get_host_by_name("Boivin"));
 
-  checkpoint      = xbt_mutex_init(); /* - Initiate the mutex and conditions */
-  identification = xbt_cond_init();
+  barrier         = MSG_barrier_init(2);
   msg_error_t res = MSG_main(); /* - Run the simulation */
   XBT_INFO("Simulation time %g", MSG_get_clock());
-  xbt_cond_destroy(identification);
-  xbt_mutex_destroy(checkpoint);
+  MSG_barrier_destroy(barrier);
 
   return res != MSG_OK;
 }
index e385517..19184ef 100644 (file)
@@ -35,10 +35,8 @@ static int lazy_guy(int argc, char *argv[])
 /* The Dream master: */
 static int dream_master(int argc, char *argv[])
 {
-  msg_process_t lazy = NULL;
-
   XBT_INFO("Let's create a lazy guy."); /* - Create a lazy_guy process */
-  lazy = MSG_process_create("Lazy", lazy_guy, NULL, MSG_host_self());
+  msg_process_t lazy = MSG_process_create("Lazy", lazy_guy, NULL, MSG_host_self());
   XBT_INFO("Let's wait a little bit...");
   MSG_process_sleep(10.0);              /* - Wait for 10 seconds */
   XBT_INFO("Let's wake the lazy guy up! >:) BOOOOOUUUHHH!!!!");
index aa8d556..f4312d8 100644 (file)
@@ -11,7 +11,7 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(msg_semaphore_example, "Messages specific for this
 msg_sem_t sem;
 
 static int peer(int argc, char* argv[]){
-  int i = 0; 
+  int i = 0;
   while(i < argc) {
     double wait_time = xbt_str_parse_double(argv[i],"Invalid wait time: %s");
     i++;
@@ -67,6 +67,7 @@ int main(int argc, char* argv[])
   MSG_process_create_with_arguments("Bob", peer, NULL, h, 8, bobTimes);
 
   msg_error_t res = MSG_main();
+  MSG_sem_destroy(sem);
   XBT_INFO("Finished\n");
   return (res != MSG_OK);
 }
index 628427b..4417517 100644 (file)
@@ -4,12 +4,16 @@
   <!--             _________
                   |          |
                   |  router  |
-      ____________|__________|_____________ backbone
+      ____________|__________|_____________ backbone link
         |   |   |              |     |   |  
       l0| l1| l2|           l97| l96 |   | l99
         |   |   |   ........   |     |   |
         |                                |
     node-0.acme.org                  node-99.acme.org
+
+    The route from node-0 to node-2 is: l0.UP ; backbone ; l2.DOWN
+
+    The route from node-0 to the outer world begins with: l0.UP ; backbone
   -->
   <cluster id="acme" prefix="node-" radical="0-99" suffix=".acme.org" speed="1Gf" bw="125MBps" lat="50us"
            bb_bw="2.25GBps"  bb_lat="500us"/>
diff --git a/examples/platforms/cluster_backbone.xml b/examples/platforms/cluster_backbone.xml
new file mode 100644 (file)
index 0000000..36211cb
--- /dev/null
@@ -0,0 +1,92 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+<platform version="4.1">
+  <zone id="world" routing="Full">
+  <!-- this platform models 3 clusters, interconnected over the Internet
+    --
+    -- This example intends to be somewhat exhaustive, your platform should probably be simpler.
+    --
+    -- In particular, the clusters are modeled in very different ways,
+    -- but you should pick the way you prefer, and stick to it.
+    -->
+
+  <!-- Here comes the first cluster, the simplest one.
+     
+       Every nodes are connected through a private link to a router
+       (ie a machine that cannot host computations).
+  
+       node-0.1core.org --[l0]--
+                                \
+       node-1.1core.org --[l1]-- router -- (outer world)
+                ...             /
+       node-7.1core.org --[l9]--
+
+       So the route from node-0 to node-1 is {l0.UP, l1.DOWN}
+    -->
+  <cluster id="simple" prefix="node-" radical="0-7" suffix=".1core.org" speed="1Gf" bw="125MBps" lat="50us" />
+
+
+  <!-- This second cluster has a backbone link, connecting all private links:
+
+       node-0.2cores.org --[l0]-------+
+                                     |
+       node-1.2cores.org --[l1]--[backbone]-- router -- (outer world)
+                ...                  |
+       node-7.2cores.org --[l7]-------+
+
+
+    The route from node-0 to node-1 is: l0.UP ; backbone ; l1.DOWN
+    
+    The route from node-0 to the outer world begins with: l0.UP ; backbone
+  -->    
+  <cluster id="backboned" prefix="node-" radical="0-7" suffix=".2cores.org"
+              speed="1Gf"       core="2" 
+             bw="125MBps"      lat="50us"
+           bb_bw="2.25GBps"  bb_lat="500us"/>
+          
+
+  <!-- This cluster has a backbone link, but no links are fullduplex.
+    -- It means that up and down communications compete as if they
+    -- were using exactly the same resource. If you send and receive
+    -- at the same time, then each get half of the bandwidth.
+    --
+    -- Also, the hosts have 4 cores.
+    -->
+  <cluster id="halfduplex" prefix="node-" radical="0-7" suffix=".4cores.org" speed="1Gf" core="4"
+              bw="125MBps"      lat="50us"     sharing_policy="SHARED"
+          bb_bw="2.25GBps"  bb_lat="500us" bb_sharing_policy="SHARED" />
+
+
+  <!-- And now, we create the routes between the clusters, ie inter-zone routes -->
+  
+  <!-- We have only one outer link, representing the internet 
+    -- Its sharing is FATPIPE, meaning that communications have no impact on each others.
+    -- Any given comm can use the full provided bandwidth. 
+    --
+    -- This models the big links constituting the backbone of the internet, 
+    -- that users cannot saturate. 
+    -- Users' bandwidth is mostly limited by their outgoing connexion,
+    -- not by the network backbone. -->
+
+    <link id="backbone" bandwidth="1.25GBps" latency="500us" sharing_policy="FATPIPE"/>
+
+    <zoneRoute src="simple" dst="backboned" 
+               gw_src="node-simple_router.1core.org"
+               gw_dst="node-backboned_router.2cores.org">
+      <link_ctn id="backbone" />
+    </zoneRoute>
+
+    <zoneRoute src="simple" dst="halfduplex" 
+               gw_src="node-simple_router.1core.org"
+               gw_dst="node-halfduplex_router.4cores.org">
+      <link_ctn id="backbone" />
+    </zoneRoute>
+    
+    <zoneRoute src="backboned" dst="halfduplex" 
+               gw_src="node-backboned_router.2cores.org"
+               gw_dst="node-halfduplex_router.4cores.org">
+      <link_ctn id="backbone" />
+    </zoneRoute>
+</zone>
+</platform>
index 680a30e..fc4e9bb 100644 (file)
@@ -1,7 +1,8 @@
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
 <platform version="4.1">
-  <cluster id="cluster" prefix="MyHost" radical="1-2" suffix="" speed="100.0Mf,50.0Mf,20.0Mf"
+  <cluster id="cluster" prefix="MyHost" radical="1-2" suffix="" 
+           speed="100.0Mf,50.0Mf,20.0Mf" core="4"
            bw="125MBps" lat="50us" bb_bw="2.25GBps"  bb_lat="500us">
     <!--  List of idle_power:min_power:max_power pairs (in Watts) -->
     <!--  The list must contain one speed tupple for each previously defined pstate-->
index 0af3e71..03ce9c7 100644 (file)
@@ -5,19 +5,23 @@
     <!-- Multiple pstate processor capacities can be defined as a list of powers specified for a given host -->
     <!-- Attribute 'pstate' specifies the initialy selected pstate (here, the lowest pstate corresponds to the highest
          processor speed) -->
-    <host id="MyHost1" speed="100.0Mf,50.0Mf,20.0Mf" pstate="0" >
-      <!--  List of min_power:max_power pairs (in Watts) corresponding to the speed consumed when the processor is idle
-            and when it is fully loaded -->
-      <!--  The list must contain one speed pair for each previously defined pstate-->
+    <host id="MyHost1" speed="100.0Mf,50.0Mf,20.0Mf" pstate="0" core="4" >
+      <!--  List of Idle:OneCore:AllCores (in Watts) corresponding to the speed consumed when the processor is idle
+            and when one core is at full speed, and when all cores are fully loaded -->
+      <!--  The list must contain one energetic profile for each previously defined pstate-->
       <prop id="watt_per_state" value="100.0:120.0:200.0, 93.0:110.0:170.0, 90.0:105.0:150.0" />
       <prop id="watt_off" value="10" />
     </host>
-    <host id="MyHost2" speed="100.0Mf,50.0Mf,20.0Mf" pstate="0" >
-      <prop id="watt_per_state" value="100.0:120.0:200.0, 93.0:110.0:170.0, 90.0:105.0:150.0" />
+    
+    <host id="MyHost2" speed="100.0Mf,50.0Mf,20.0Mf" pstate="0" core="1" >
+      <!-- This host is mono-core, so AllCores=OneCore and is omitted -->
+      <prop id="watt_per_state" value="100.0:200.0, 93.0:170.0, 90.0:150.0" />
       <prop id="watt_off" value="10" />
     </host>
-    <host id="MyHost3" speed="100.0Mf,50.0Mf,20.0Mf" pstate="0" >
-      <prop id="watt_per_state" value="100.0:120.0:200.0, 93.0:110.0:170.0, 90.0:105.0:150.0" />
+    
+    <host id="MyHost3" speed="100.0Mf,50.0Mf,20.0Mf" pstate="0" core="1" >
+      <!-- This host is mono-core, so AllCores=OneCore and is omitted -->
+      <prop id="watt_per_state" value="100.0:200.0, 93.0:170.0, 90.0:150.0" />
       <prop id="watt_off" value="10" />
     </host>
 
diff --git a/examples/platforms/two_clusters.xml b/examples/platforms/two_clusters.xml
deleted file mode 100644 (file)
index 29ec619..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4.1">
-<!--                  _________________________________________
-                 ____|_____                                    |
-                |          |                                   |
-                |  router1 |                                   |
-    ____________|__________|_____________ backbone1            |
-      |   |   |              |     |   |                       | backbone
-    l0| l1| l2|            l7|   l8|   |l9                     |
-      |   |   |   ........   |     |   |                       |
-      |                                |                       |
-node-0.acme.org                     node-9.acme.org            |
-                     __________________________________________|
-                 ___|______
-                |          |
-                |  router2 |
-    ____________|__________|_____________ backbone2
-      |   |   |              |     |   |  
-   l10|l11|l12|           l17| l18 |   | l19
-      |   |   |   ........   |     |   |
-      |                                |
-node-10.acme.org               node-19.acme.org -->
-
-  <zone id="AS0" routing="Full">
-    <cluster id="my_cluster_1" prefix="node-" suffix=".acme.org" radical="0-9" speed="1Gf" 
-             bw="125MBps" lat="50us" bb_bw="2.25GBps" bb_lat="500us" />
-
-    <cluster id="my_cluster_2" prefix="node-" suffix=".acme.org" radical="10-19" speed="1Gf" 
-             bw="125MBps" lat="50us" bb_bw="2.25GBps" bb_lat="500us" />
-
-    <link id="backbone" bandwidth="1.25GBps" latency="500us" />
-
-    <zoneRoute src="my_cluster_1" dst="my_cluster_2" gw_src="node-my_cluster_1_router.acme.org"
-             gw_dst="node-my_cluster_2_router.acme.org">
-      <link_ctn id="backbone" />
-    </zoneRoute>
-  </zone>
-</platform>
index b822e63..f6700b0 100644 (file)
@@ -114,5 +114,6 @@ int main(int argc, char** argv)
   e->run();
 
   /* Once the simulation is done, the program is ended */
+  e->shutdown();
   return 0;
 }
index a415bf9..9d76438 100644 (file)
@@ -63,9 +63,8 @@ public:
   int answer_id      = -1;            // answer (used by some types of messages)
   simgrid::s4u::MailboxPtr answer_to; // mailbox to send an answer to (if any)
 
-  explicit ChordMessage(e_message_type_t type) : type(type)
+  explicit ChordMessage(e_message_type_t type) : type(type), issuer_host_name(simgrid::s4u::this_actor::host()->name())
   {
-    issuer_host_name = simgrid::s4u::this_actor::host()->name();
   }
 
   ~ChordMessage() = default;
index a62a5eb..d9cd197 100644 (file)
@@ -11,27 +11,27 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "a sample log category");
 
 class MyHost {
 public:
-
-  void show_info(boost::unordered_map <std::string, simgrid::s4u::Storage*> const&mounts) {
+  void show_info(std::unordered_map<std::string, simgrid::s4u::Storage*> const& mounts)
+  {
     XBT_INFO("Storage info on %s:", simgrid::s4u::Host::current()->cname());
 
     for (const auto&kv : mounts) {
       const char* mountpoint = kv.first.c_str();
-      simgrid::s4u::Storage &storage = *kv.second;
+      simgrid::s4u::Storage* storage = kv.second;
 
       // Retrieve disk's information
-      sg_size_t free_size = storage.sizeFree();
-      sg_size_t used_size = storage.sizeUsed();
-      sg_size_t size = storage.size();
+      sg_size_t free_size = storage->sizeFree();
+      sg_size_t used_size = storage->sizeUsed();
+      sg_size_t size      = storage->size();
 
-      XBT_INFO("    %s (%s) Used: %llu; Free: %llu; Total: %llu.",
-          storage.name(), mountpoint, used_size, free_size, size);
+      XBT_INFO("    %s (%s) Used: %llu; Free: %llu; Total: %llu.", storage->name(), mountpoint, used_size, free_size,
+               size);
     }
   }
 
   void operator()() {
-    boost::unordered_map <std::string, simgrid::s4u::Storage *> const& mounts =
-      simgrid::s4u::Host::current()->mountedStorages();
+    std::unordered_map<std::string, simgrid::s4u::Storage*> const& mounts =
+        simgrid::s4u::Host::current()->mountedStorages();
 
     show_info(mounts);
 
@@ -55,7 +55,7 @@ public:
     write = file->write(100000);  // Write 100,000 bytes
     XBT_INFO("Write %llu bytes on %s", write, filename);
 
-    simgrid::s4u::Storage &storage = simgrid::s4u::Storage::byName("Disk4");
+    simgrid::s4u::Storagestorage = simgrid::s4u::Storage::byName("Disk4");
 
     // Now rename file from ./tmp/data.txt to ./tmp/simgrid.readme
     const char *newpath = "/home/tmp/simgrid.readme";
@@ -71,13 +71,13 @@ public:
     delete file;
 
     // Now attach some user data to disk1
-    XBT_INFO("Get/set data for storage element: %s",storage.name());
-    XBT_INFO("    Uninitialized storage data: '%s'", (char*)storage.userdata());
+    XBT_INFO("Get/set data for storage element: %s", storage->name());
+    XBT_INFO("    Uninitialized storage data: '%s'", (char*)storage->userdata());
 
-    storage.setUserdata(xbt_strdup("Some user data"));
-    XBT_INFO("    Set and get data: '%s'", (char*)storage.userdata());
+    storage->setUserdata(xbt_strdup("Some user data"));
+    XBT_INFO("    Set and get data: '%s'", (char*)storage->userdata());
 
-    xbt_free(storage.userdata());
+    xbt_free(storage->userdata());
   }
 };
 
index 0a17043..84a8d27 100644 (file)
@@ -2,12 +2,12 @@
 
 $ $SG_TEST_EXENV ${bindir:=.}/s4u_io
 > [denise:host:(0) 0.000000] [s4u_test/INFO] Storage info on denise:
-> [denise:host:(0) 0.000000] [s4u_test/INFO]     Disk4 (/home) Used: 13221994; Free: 536857690006; Total: 536870912000.
 > [denise:host:(0) 0.000000] [s4u_test/INFO]     Disk2 (c:) Used: 2391537133; Free: 534479374867; Total: 536870912000.
+> [denise:host:(0) 0.000000] [s4u_test/INFO]     Disk4 (/home) Used: 13221994; Free: 536857690006; Total: 536870912000.
 > [denise:host:(0) 0.003333] [s4u_test/INFO] Create a 200000 bytes file named '/home/tmp/data.txt' on /sd1
 > [denise:host:(0) 0.003333] [s4u_test/INFO] Storage info on denise:
-> [denise:host:(0) 0.003333] [s4u_test/INFO]     Disk4 (/home) Used: 13421994; Free: 536857490006; Total: 536870912000.
 > [denise:host:(0) 0.003333] [s4u_test/INFO]     Disk2 (c:) Used: 2391537133; Free: 534479374867; Total: 536870912000.
+> [denise:host:(0) 0.003333] [s4u_test/INFO]     Disk4 (/home) Used: 13421994; Free: 536857490006; Total: 536870912000.
 > [denise:host:(0) 0.004333] [s4u_test/INFO] Read 200000 bytes on /home/tmp/data.txt
 > [denise:host:(0) 0.006000] [s4u_test/INFO] Write 100000 bytes on /home/tmp/data.txt
 > [denise:host:(0) 0.006000] [s4u_test/INFO] Move '/home/tmp/data.txt' to '/home/tmp/simgrid.readme'
index 1d9c75c..a0b20a0 100644 (file)
@@ -83,7 +83,7 @@ int main(int argc, char **argv)
              sg_host_route_latency(hosts[0], hosts[1]));
     XBT_INFO("Jupiter: speed=%.0f", sg_host_speed(hosts[0])* sg_host_get_available_speed(hosts[0]));
     XBT_INFO("Tremblay: speed=%.0f", sg_host_speed(hosts[1])* sg_host_get_available_speed(hosts[1]));
-     
+
     unsigned int ctr;
     SD_task_t task;
     xbt_dynar_foreach(changed_tasks, ctr, task) {
index 6baccb0..176bd08 100644 (file)
@@ -39,7 +39,7 @@ int main(int argc, char **argv)
   char *tracefilename;
   char *last = strrchr(argv[2], '.');
   tracefilename = bprintf("%.*s.trace", (int) (last == NULL ? strlen(argv[2]) : last - argv[2]),argv[2]);
-  if (argc == 4) 
+  if (argc == 4)
     tracefilename = xbt_strdup(argv[3]);
 
   /* Display all the tasks */
index f24b544..0afa3f4 100644 (file)
@@ -4,7 +4,7 @@ p Test the loader of DAG written in the DOT format
 # The order differ when executed with gcc's thread sanitizer
 ! output sort
 
-$ $SG_TEST_EXENV ${bindir:=.}/dag-dotload/sd_dag-dotload --log=no_loc ${srcdir:=.}/../platforms/two_clusters.xml ${srcdir:=.}/dag-dotload/dag.dot
+$ $SG_TEST_EXENV ${bindir:=.}/dag-dotload/sd_dag-dotload --log=no_loc ${srcdir:=.}/../platforms/cluster.xml ${srcdir:=.}/dag-dotload/dag.dot
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
 > [0.000000] [test/INFO] ------------------- Display all tasks of the loaded DAG ---------------------------
 > [0.000000] [sd_task/INFO] Displaying task root
@@ -189,35 +189,35 @@ $ $SG_TEST_EXENV ${bindir:=.}/dag-dotload/sd_dag-dotload --log=no_loc ${srcdir:=
 > [0.000000] [sd_task/INFO]     7->end
 > [0.000000] [test/INFO] ------------------- Schedule tasks ---------------------------
 > [0.000000] [test/INFO] ------------------- Run the schedule ---------------------------
-> [110.005082] [test/INFO] ------------------- Produce the trace file---------------------------
-> [110.005082] [test/INFO] Producing the trace of the run into dag.trace
+> [110.004162] [test/INFO] ------------------- Produce the trace file---------------------------
+> [110.004162] [test/INFO] Producing the trace of the run into dag.trace
 
 $ cat ${srcdir:=.}/dag-dotload/dag.trace
 > [0.000000->0.000000] node-0.acme.org compute 0.000000 flops # root
 > [0.000000->10.000000] node-1.acme.org compute 10000000129.452715 flops # 0
-> [10.001680->20.001680] node-10.acme.org compute 10000000131.133657 flops # 1
-> [20.002360->30.002360] node-11.acme.org compute 10000000121.124870 flops # 2
-> [30.003040->40.003041] node-12.acme.org compute 10000000230.608025 flops # 3
-> [40.003041->50.003041] node-13.acme.org compute 10000000004.994019 flops # 4
-> [50.003721->60.003721] node-14.acme.org compute 10000000046.016401 flops # 5
-> [60.003721->70.003721] node-15.acme.org compute 10000000091.598791 flops # 6
-> [70.004401->80.004401] node-16.acme.org compute 10000000040.679438 flops # 7
-> [80.005081->90.005081] node-17.acme.org compute 10000000250.490017 flops # 8
-> [90.005081->100.005081] node-18.acme.org compute 10000000079.267649 flops # 9
-> [10.000000 -> 10.001680] node-1.acme.org -> node-10.acme.org transfer of 10001 bytes # 0->1
-> [20.001680 -> 20.002360] node-10.acme.org -> node-11.acme.org transfer of 10004 bytes # 1->2
-> [30.002360 -> 30.003040] node-11.acme.org -> node-12.acme.org transfer of 10002 bytes # 2->3
-> [50.003041 -> 50.003721] node-13.acme.org -> node-14.acme.org transfer of 10029 bytes # 4->5
-> [70.003721 -> 70.004401] node-15.acme.org -> node-16.acme.org transfer of 10005 bytes # 6->7
-> [80.004401 -> 80.005081] node-16.acme.org -> node-17.acme.org transfer of 10000 bytes # 7->8
-> [80.004401 -> 80.086113] node-16.acme.org -> node-0.acme.org transfer of 10014000 bytes # 7->end
-> [0.000000 -> 0.081712] node-0.acme.org -> node-14.acme.org transfer of 10014000 bytes # root->5
-> [100.005081->110.005082] node-0.acme.org compute 10000000129.452715 flops # end
+> [10.000680->20.000680] node-10.acme.org compute 10000000131.133657 flops # 1
+> [20.001360->30.001360] node-11.acme.org compute 10000000121.124870 flops # 2
+> [30.002040->40.002041] node-12.acme.org compute 10000000230.608025 flops # 3
+> [40.002041->50.002041] node-13.acme.org compute 10000000004.994019 flops # 4
+> [50.002721->60.002721] node-14.acme.org compute 10000000046.016401 flops # 5
+> [60.002721->70.002721] node-15.acme.org compute 10000000091.598791 flops # 6
+> [70.003401->80.003401] node-16.acme.org compute 10000000040.679438 flops # 7
+> [80.004161->90.004161] node-17.acme.org compute 10000000250.490017 flops # 8
+> [90.004161->100.004161] node-18.acme.org compute 10000000079.267649 flops # 9
+> [10.000000 -> 10.000680] node-1.acme.org -> node-10.acme.org transfer of 10001 bytes # 0->1
+> [20.000680 -> 20.001360] node-10.acme.org -> node-11.acme.org transfer of 10004 bytes # 1->2
+> [30.001360 -> 30.002040] node-11.acme.org -> node-12.acme.org transfer of 10002 bytes # 2->3
+> [50.002041 -> 50.002721] node-13.acme.org -> node-14.acme.org transfer of 10029 bytes # 4->5
+> [70.002721 -> 70.003401] node-15.acme.org -> node-16.acme.org transfer of 10005 bytes # 6->7
+> [80.003401 -> 80.004161] node-16.acme.org -> node-17.acme.org transfer of 10000 bytes # 7->8
+> [80.003401 -> 80.084193] node-16.acme.org -> node-0.acme.org transfer of 10014000 bytes # 7->end
+> [0.000000 -> 0.080712] node-0.acme.org -> node-14.acme.org transfer of 10014000 bytes # root->5
+> [100.004161->110.004162] node-0.acme.org compute 10000000129.452715 flops # end
 
 $ rm -f ${srcdir:=.}/dag-dotload/dag.trace ${srcdir:=.}/dot.dot
 
 ! expect return 2
-$ $SG_TEST_EXENV ${bindir:=.}/dag-dotload/sd_dag-dotload --log=no_loc ${srcdir:=.}/../platforms/two_clusters.xml ${srcdir:=.}/dag-dotload/dag_with_cycle.dot
+$ $SG_TEST_EXENV ${bindir:=.}/dag-dotload/sd_dag-dotload --log=no_loc ${srcdir:=.}/../platforms/cluster.xml ${srcdir:=.}/dag-dotload/dag_with_cycle.dot
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
 > [0.000000] [sd_daxparse/WARNING] the task root is not marked
 > [0.000000] [sd_daxparse/WARNING] the task 1 is in a cycle
index e3af541..ef3d029 100644 (file)
@@ -42,7 +42,7 @@ int main(int argc, char **argv)
   if (!dax){
     XBT_ERROR("A problem occurred during DAX parsing (cycle or syntax). Do not continue this test");
     free(tracefilename);
-  
+
     exit(255);
   }
 
index f081afd..3417134 100644 (file)
@@ -2,7 +2,7 @@
 p Test the DAX loader on a small DAX instance
 
 ! output sort
-$ $SG_TEST_EXENV ${bindir:=.}/daxload/sd_daxload --log=no_loc ${srcdir:=.}/../platforms/two_clusters.xml ${srcdir:=.}/daxload/smalldax.xml
+$ $SG_TEST_EXENV ${bindir:=.}/daxload/sd_daxload --log=no_loc ${srcdir:=.}/../platforms/cluster.xml ${srcdir:=.}/daxload/smalldax.xml
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
 > [0.000000] [sd_daxparse/WARNING] Ignore file o1 size redefinition from 1000000 to 304
 > [0.000000] [sd_daxparse/WARNING] Ignore file o2 size redefinition from 1000000 to 304
@@ -101,32 +101,32 @@ $ $SG_TEST_EXENV ${bindir:=.}/daxload/sd_daxload --log=no_loc ${srcdir:=.}/../pl
 > [0.000000] [sd_task/INFO]     3@task1_o3_end
 > [0.000000] [test/INFO] ------------------- Schedule tasks ---------------------------
 > [0.000000] [test/INFO] ------------------- Run the schedule ---------------------------
-> [84.068138] [test/INFO] ------------------- Produce the trace file---------------------------
-> [84.068138] [test/INFO] Producing the trace of the run into smalldax.trace
+> [84.067138] [test/INFO] ------------------- Produce the trace file---------------------------
+> [84.067138] [test/INFO] Producing the trace of the run into smalldax.trace
 
 $ cat ${srcdir:=.}/daxload/smalldax.trace
 > [0.000000] node-0.acme.org compute 0.000000 # root
-> [0.015600] node-1.acme.org compute 42000000000.000000 # 1@task1
+> [0.016600] node-1.acme.org compute 42000000000.000000 # 1@task1
 > [0.016600] node-10.acme.org compute 42000000000.000000 # 2@task2
 > [42.033200] node-11.acme.org compute 42000000000.000000 # 3@task1
 > [0.000000] node-0.acme.org send node-10.acme.org 1000000.000000 # root_i2_2@task2
 > [0.016600] node-10.acme.org recv node-0.acme.org 1000000.000000 # root_i2_2@task2
-> [42.015600] node-1.acme.org send node-11.acme.org 1000000.000000 # 1@task1_o1_3@task1
+> [42.016600] node-1.acme.org send node-11.acme.org 1000000.000000 # 1@task1_o1_3@task1
 > [42.033200] node-11.acme.org recv node-1.acme.org 1000000.000000 # 1@task1_o1_3@task1
 > [42.016600] node-10.acme.org send node-11.acme.org 1000000.000000 # 2@task2_o2_3@task1
 > [42.033200] node-11.acme.org recv node-10.acme.org 1000000.000000 # 2@task2_o2_3@task1
 > [84.033200] node-11.acme.org send node-0.acme.org 4167312.000000 # 3@task1_o3_end
-> [84.068138] node-0.acme.org recv node-11.acme.org 4167312.000000 # 3@task1_o3_end
+> [84.067138] node-0.acme.org recv node-11.acme.org 4167312.000000 # 3@task1_o3_end
 > [0.000000] node-0.acme.org send node-1.acme.org 1000000.000000 # root_i1_1@task1
-> [0.015600] node-1.acme.org recv node-0.acme.org 1000000.000000 # root_i1_1@task1
-> [84.068138] node-0.acme.org compute 0.000000 # end
+> [0.016600] node-1.acme.org recv node-0.acme.org 1000000.000000 # root_i1_1@task1
+> [84.067138] node-0.acme.org compute 0.000000 # end
 
 $ cmake -E remove -f ${srcdir:=.}/dax.dot ${srcdir:=.}/daxload/smalldax.trace
 
 p Test the DAX loader with a DAX comprising a cycle.
 
 ! expect return 255
-$ $SG_TEST_EXENV ${bindir:=.}/daxload/sd_daxload --log=no_loc ${srcdir:=.}/../platforms/two_clusters.xml ${srcdir:=.}/daxload/simple_dax_with_cycle.xml
+$ $SG_TEST_EXENV ${bindir:=.}/daxload/sd_daxload --log=no_loc ${srcdir:=.}/../platforms/cluster.xml ${srcdir:=.}/daxload/simple_dax_with_cycle.xml
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
 > [0.000000] [sd_daxparse/WARNING] the task root is not marked
 > [0.000000] [sd_daxparse/WARNING] the task 1@task1 is in a cycle
index 6dfc394..b5d73b4 100644 (file)
@@ -1,6 +1,6 @@
-/* Example of scatter communication, accepting a large amount of processes. 
+/* Example of scatter communication, accepting a large amount of processes.
  * This based the experiment of Fig. 4 in http://hal.inria.fr/hal-00650233/
- * That experiment is a comparison to the LogOPSim simulator, that takes 
+ * That experiment is a comparison to the LogOPSim simulator, that takes
  * GOAL files as an input, thus the file name. But there is no actual link
  * to the GOAL formalism beside of this.
  */
index 240d2c1..9b4ec8e 100644 (file)
@@ -4,7 +4,7 @@ p Test the loader of PTG (Parallel Task Graph) written in the DOT format
 # The order differ when executed with gcc's thread sanitizer
 ! output sort
 
-$ $SG_TEST_EXENV ${bindir:=.}/ptg-dotload/sd_ptg-dotload  ${srcdir:=.}/../platforms/two_clusters.xml ${srcdir:=.}/ptg-dotload/ptg.dot
+$ $SG_TEST_EXENV ${bindir:=.}/ptg-dotload/sd_ptg-dotload  ${srcdir:=.}/../platforms/cluster.xml ${srcdir:=.}/ptg-dotload/ptg.dot
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
 > [0.000000] [test/INFO] ------------------- Display all tasks of the loaded DAG ---------------------------
 > [0.000000] [sd_task/INFO] Displaying task root
@@ -93,5 +93,5 @@ $ $SG_TEST_EXENV ${bindir:=.}/ptg-dotload/sd_ptg-dotload  ${srcdir:=.}/../platfo
 > [0.000000] [sd_task/INFO]     c3->end
 > [0.000000] [test/INFO] ------------------- Schedule tasks ---------------------------
 > [0.000000] [test/INFO] ------------------- Run the schedule ---------------------------
-> [3.126200] [test/INFO] Makespan: 3.126200
+> [2.931978] [test/INFO] Makespan: 2.931978
 
index 7badb06..4beb06d 100644 (file)
@@ -2,7 +2,7 @@
 p Test the loader of DAG written in the DOT format
 
 ! expect return 2
-$ $SG_TEST_EXENV ${bindir:=.}/schedule-dotload/sd_schedule-dotload --log=no_loc  "--log=sd_dotparse.thres:verbose" ${srcdir:=.}/../platforms/two_clusters.xml ${srcdir:=.}/schedule-dotload/dag_with_bad_schedule.dot
+$ $SG_TEST_EXENV ${bindir:=.}/schedule-dotload/sd_schedule-dotload --log=no_loc  "--log=sd_dotparse.thres:verbose" ${srcdir:=.}/../platforms/cluster.xml ${srcdir:=.}/schedule-dotload/dag_with_bad_schedule.dot
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
 > [0.000000] [sd_dotparse/VERBOSE] The schedule is ignored, task 'end' can not be scheduled on -1 hosts
 > [0.000000] [sd_dotparse/VERBOSE] The schedule is ignored, task '1' can not be scheduled on 0 hosts
@@ -15,7 +15,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/schedule-dotload/sd_schedule-dotload --log=no_loc
 # The order differ when executed with gcc's thread sanitizer
 ! output sort
 
-$ $SG_TEST_EXENV ${bindir:=.}/schedule-dotload/sd_schedule-dotload --log=no_loc ${srcdir:=.}/../platforms/two_clusters.xml ${srcdir:=.}/schedule-dotload/dag_with_good_schedule.dot
+$ $SG_TEST_EXENV ${bindir:=.}/schedule-dotload/sd_schedule-dotload --log=no_loc ${srcdir:=.}/../platforms/cluster.xml ${srcdir:=.}/schedule-dotload/dag_with_good_schedule.dot
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
 > [0.000000] [test/INFO] ------------------- Display all tasks of the loaded DAG ---------------------------
 > [0.000000] [sd_task/INFO] Displaying task root
index 8705836..bb53f2b 100644 (file)
@@ -65,14 +65,14 @@ static xbt_dynar_t get_ready_tasks(xbt_dynar_t dax)
 static double finish_on_at(SD_task_t task, sg_host_t host)
 {
   double result;
-  unsigned int i;
-  double data_available = 0.;
-  double redist_time = 0;
-  double last_data_available;
 
   xbt_dynar_t parents = SD_task_get_parents(task);
 
   if (!xbt_dynar_is_empty(parents)) {
+    unsigned int i;
+    double data_available = 0.;
+    double redist_time    = 0;
+    double last_data_available;
     /* compute last_data_available */
     SD_task_t parent;
     last_data_available = -1.0;
index e58c296..c0cd2e6 100644 (file)
@@ -4,7 +4,7 @@ p Modify the rate of communication tasks even when they are auto-scheduled
 # We need to sort this out because the order changes with the sanitizers (at least)
 ! output sort
 
-$ $SG_TEST_EXENV ./throttling/sd_throttling ${srcdir:=.}/../platforms/two_clusters.xml
+$ $SG_TEST_EXENV ./throttling/sd_throttling ${srcdir:=.}/../platforms/cluster.xml
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
 > [5.000000] [sd_comm_throttling/INFO] Simulation stopped after 5.0000 seconds
 > [5.000000] [sd_comm_throttling/INFO] Task 'Task A' start time: 0.000000, finish time: 5.000000
index cfa9910..9da9ebb 100644 (file)
@@ -2,12 +2,12 @@
 p Usage test of simdag's typed tasks
 
 ! output sort
-$ $SG_TEST_EXENV ./typed_tasks/sd_typed_tasks ${srcdir:=.}/../platforms/two_clusters.xml
+$ $SG_TEST_EXENV ./typed_tasks/sd_typed_tasks ${srcdir:=.}/../platforms/cluster.xml
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
 > [2.080600] [sd_typed_tasks_test/INFO] Task 'Par. Comp. 3' start time: 0.000000, finish time: 0.400000
 > [2.080600] [sd_typed_tasks_test/INFO] Task 'Par. Comp. 1' start time: 0.000000, finish time: 0.400000
 > [2.080600] [sd_typed_tasks_test/INFO] Task 'Seq. comp. 1' start time: 0.000000, finish time: 1.000000
-> [2.080600] [sd_typed_tasks_test/INFO] Task 'MxN redist' start time: 0.400000, finish time: 0.721600
-> [2.080600] [sd_typed_tasks_test/INFO] Task 'Par. Comp. 2' start time: 0.721600, finish time: 0.921600
+> [2.080600] [sd_typed_tasks_test/INFO] Task 'MxN redist' start time: 0.400000, finish time: 0.720600
+> [2.080600] [sd_typed_tasks_test/INFO] Task 'Par. Comp. 2' start time: 0.720600, finish time: 0.920600
 > [2.080600] [sd_typed_tasks_test/INFO] Task 'E2E comm.' start time: 1.000000, finish time: 1.080600
 > [2.080600] [sd_typed_tasks_test/INFO] Task 'Seq. comp 2.' start time: 1.080600, finish time: 2.080600
index 530bf3e..ad4f682 100644 (file)
@@ -37,7 +37,7 @@ void nodeShow(DGNode* nd){
 /*
   if(nd->verified==1) fprintf(stderr,"%ld.%s\t: usable.",nd->id,nd->name);
   else if(nd->verified==0)  fprintf(stderr,"%ld.%s\t: unusable.",nd->id,nd->name);
-  else  fprintf(stderr,"%ld.%s\t: notverified.",nd->id,nd->name);   
+  else  fprintf(stderr,"%ld.%s\t: notverified.",nd->id,nd->name);
 */
 }
 
@@ -83,7 +83,7 @@ int AttachNode(DGraph* dg, DGNode* nd) {
       }
       memcpy( &(tmpnd->inArc[ tmpnd->inDegree]), nd->inArc, nd->inDegree*sizeof( DGArc *));
       tmpnd->inDegree += nd->inDegree;
-    }   
+    }
     if ( nd->outDegree > 0 ) {
       tmpnd->maxOutDegree += nd->maxOutDegree;
       ar =(DGArc **) calloc(tmpnd->maxOutDegree,sizeof(DGArc*));
@@ -96,7 +96,7 @@ int AttachNode(DGraph* dg, DGNode* nd) {
       memcpy( &(tmpnd->outArc[tmpnd->outDegree]),nd->outArc,nd->outDegree*sizeof( DGArc *));
       tmpnd->outDegree += nd->outDegree;
     }
-    free(nd); 
+    free(nd);
     return i;
   }
   nd->id = dg->numNodes;
index 55b29dd..7dacc29 100644 (file)
@@ -1,10 +1,10 @@
 /*************************************************************************
- *                                                                       * 
+ *                                                                       *
  *    N  A  S   P A R A L L E L   B E N C H M A R K S  3.3     *
  *                                     *
  *                  D T       *
  *                                     *
- ************************************************************************* 
+ *************************************************************************
  *                                     *
  *   This benchmark is part of the NAS Parallel Benchmark 3.3 suite.   *
  *                                     *
@@ -31,7 +31,7 @@
  *     E-mail:  npb@nas.nasa.gov                   *
  *     Fax:   (650) 604-3957                     *
  *                                     *
- ************************************************************************* 
+ *************************************************************************
  *                                     *
  *   Author: M. Frumkin         *       *
  *                                     *
@@ -263,7 +263,7 @@ static DGraph *buildWH(const char cls){
     numPrevLayerNodes=numLayerNodes;
   }
   source=newNode((char*)"Source");
-  AttachNode(dg,source);   
+  AttachNode(dg,source);
   for(i=0;i<numPrevLayerNodes;i++){
     nd=dg->node[firstLayerNode+i];
     ar=newArc(source,nd);
@@ -323,7 +323,7 @@ static DGraph *buildBH(const char cls){
     numPrevLayerNodes=numLayerNodes;
   }
   sink=newNode((char*)"Sink");
-  AttachNode(dg,sink);   
+  AttachNode(dg,sink);
   for(i=0;i<numPrevLayerNodes;i++){
     nd=dg->node[firstLayerNode+i];
     ar=newArc(nd,sink);
@@ -428,7 +428,7 @@ static Arr* WindowFilter(Arr *a, Arr* b,int w){
   int i=0,j=0,k=0;
   double rms0=0.0,rms1=0.0,rmsm1=0.0;
   double weight=((double) (w+1))/(w+2);
+
   w+=1;
   if(timer_on){
     timer_clear(w);
index 8dde5cb..24257dc 100644 (file)
@@ -24,7 +24,7 @@ int main(int argc, char **argv) {
   int    m;
   int    mk=16;
   int    nk = (int)(pow(2,mk)),
-         nq=10, 
+         nq=10,
          np, node, no_nodes, i, ik, kk, l, k, nit, no_large_nodes, np_add, k_offset;
   int    verified;
   char   size[500]; // mind the size of the string to represent a big number
index e29b87c..7314dee 100644 (file)
@@ -1,42 +1,42 @@
 /*************************************************************************
- *                                                                       * 
+ *                                                                       *
  *        N  A  S     P A R A L L E L     B E N C H M A R K S  3.3       *
- *                                                                       * 
- *                                  I S                                  * 
- *                                                                       * 
- ************************************************************************* 
- *                                                                       * 
+ *                                                                       *
+ *                                  I S                                  *
+ *                                                                       *
+ *************************************************************************
+ *                                                                       *
  *   This benchmark is part of the NAS Parallel Benchmark 3.3 suite.     *
- *   It is described in NAS Technical Report 95-020.                     * 
- *                                                                       * 
- *   Permission to use, copy, distribute and modify this software        * 
- *   for any purpose with or without fee is hereby granted.  We          * 
- *   request, however, that all derived work reference the NAS           * 
+ *   It is described in NAS Technical Report 95-020.                     *
+ *                                                                       *
+ *   Permission to use, copy, distribute and modify this software        *
+ *   for any purpose with or without fee is hereby granted.  We          *
+ *   request, however, that all derived work reference the NAS           *
  *   Parallel Benchmarks 3.3. This software is provided "as is"          *
- *   without express or implied warranty.                                * 
- *                                                                       * 
+ *   without express or implied warranty.                                *
+ *                                                                       *
  *   Information on NPB 3.3, including the technical report, the         *
- *   original specifications, source code, results and information       * 
- *   on how to submit new results, is available at:                      * 
- *                                                                       * 
- *          http://www.nas.nasa.gov/Software/NPB                         * 
- *                                                                       * 
- *   Send comments or suggestions to  npb@nas.nasa.gov                   * 
- *   Send bug reports to              npb-bugs@nas.nasa.gov              * 
- *                                                                       * 
- *         NAS Parallel Benchmarks Group                                 * 
- *         NASA Ames Research Center                                     * 
- *         Mail Stop: T27A-1                                             * 
- *         Moffett Field, CA   94035-1000                                * 
- *                                                                       * 
- *         E-mail:  npb@nas.nasa.gov                                     * 
- *         Fax:     (650) 604-3957                                       * 
- *                                                                       * 
- ************************************************************************* 
- *                                                                       * 
- *   Author: M. Yarrow                                                   * 
- *           H. Jin                                                      * 
- *                                                                       * 
+ *   original specifications, source code, results and information       *
+ *   on how to submit new results, is available at:                      *
+ *                                                                       *
+ *          http://www.nas.nasa.gov/Software/NPB                         *
+ *                                                                       *
+ *   Send comments or suggestions to  npb@nas.nasa.gov                   *
+ *   Send bug reports to              npb-bugs@nas.nasa.gov              *
+ *                                                                       *
+ *         NAS Parallel Benchmarks Group                                 *
+ *         NASA Ames Research Center                                     *
+ *         Mail Stop: T27A-1                                             *
+ *         Moffett Field, CA   94035-1000                                *
+ *                                                                       *
+ *         E-mail:  npb@nas.nasa.gov                                     *
+ *         Fax:     (650) 604-3957                                       *
+ *                                                                       *
+ *************************************************************************
+ *                                                                       *
+ *   Author: M. Yarrow                                                   *
+ *           H. Jin                                                      *
+ *                                                                       *
  *************************************************************************/
 
 #include "smpi/mpi.h"
@@ -221,7 +221,7 @@ static void rank( global_data* gd, int iteration )
   INT_TYPE    min_key_val, max_key_val;
   INT_TYPE    *key_buff_ptr;
 
-/*  Iteration alteration of keys */  
+/*  Iteration alteration of keys */
   if(gd->my_rank == 0){
     gd->key_array[iteration] = iteration;
     gd->key_array[iteration+MAX_ITERATIONS] = max_key - iteration;
@@ -579,7 +579,7 @@ int main( int argc, char **argv )
              1220703125.00 ),   /* Random number gen mult */
              1220703125.00 );   /* Random number gen mult */
 
-/*  Do one interation for free (i.e., untimed) to guarantee initialization of  
+/*  Do one interation for free (i.e., untimed) to guarantee initialization of
     all data and code pages and respective tables */
   rank(gd, 1 );
 
index d3503e3..d21b832 100644 (file)
@@ -5,16 +5,16 @@ $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile  -platf
 > [0.000000] [rank 0] Current pstate: 0; Current power: 100000000
 > [0.000000] [rank 1] Current pstate: 0; Current power: 100000000
 > [10.000000] [rank 0] Energy consumed: 1200 Joules.
-> [10.000000] [rank 1] Energy consumed: 1200 Joules.
+> [10.000000] [rank 1] Energy consumed: 2000 Joules.
 > [10.000000] [rank 0] Current pstate: 1; Current power: 50000000
 > [10.000000] [rank 1] Current pstate: 1; Current power: 50000000
 > [30.000000] [rank 0] Energy consumed: 3400 Joules.
-> [30.000000] [rank 1] Energy consumed: 3400 Joules.
+> [30.000000] [rank 1] Energy consumed: 5400 Joules.
 > [30.000000] [rank 0] Current pstate: 2; Current power: 20000000
 > [30.000000] [rank 1] Current pstate: 2; Current power: 20000000
 > [80.000000] [rank 0] Energy consumed: 8650 Joules.
-> [80.000000] [rank 1] Energy consumed: 8650 Joules.
-> [80.000000] [surf_energy/INFO] Total energy consumption: 25300.000000 Joules (used hosts: 17300.000000 Joules; unused/idle hosts: 8000.000000)
+> [80.000000] [rank 1] Energy consumed: 12900 Joules.
+> [80.000000] [surf_energy/INFO] Total energy consumption: 29550.000000 Joules (used hosts: 21550.000000 Joules; unused/idle hosts: 8000.000000)
 > [80.000000] [surf_energy/INFO] Energy consumption of host MyHost1: 8650.000000 Joules
-> [80.000000] [surf_energy/INFO] Energy consumption of host MyHost2: 8650.000000 Joules
+> [80.000000] [surf_energy/INFO] Energy consumption of host MyHost2: 12900.000000 Joules
 > [80.000000] [surf_energy/INFO] Energy consumption of host MyHost3: 8000.000000 Joules
index 3ea74d9..a3391a6 100644 (file)
@@ -12,16 +12,16 @@ $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile  -platf
 > [     0.00000000] [rank  0] Current pstate:  0; Current power:  100000000.0000
 > [     0.00000000] [rank  1] Current pstate:  0; Current power:  100000000.0000
 > [    10.00000000] [rank  0] Energy consumed (Joules):       1200.0000
-> [    10.00000000] [rank  1] Energy consumed (Joules):       1200.0000
+> [    10.00000000] [rank  1] Energy consumed (Joules):       2000.0000
 > [    10.00000000] [rank  0] Current pstate:  1; Current power:   50000000.0000
 > [    10.00000000] [rank  1] Current pstate:  1; Current power:   50000000.0000
 > [    30.00000000] [rank  0] Energy consumed (Joules):       3400.0000
-> [    30.00000000] [rank  1] Energy consumed (Joules):       3400.0000
+> [    30.00000000] [rank  1] Energy consumed (Joules):       5400.0000
 > [    30.00000000] [rank  0] Current pstate:  2; Current power:   20000000.0000
 > [    30.00000000] [rank  1] Current pstate:  2; Current power:   20000000.0000
 > [    80.00000000] [rank  0] Energy consumed (Joules):       8650.0000
-> [    80.00000000] [rank  1] Energy consumed (Joules):       8650.0000
-> [80.000000] [surf_energy/INFO] Total energy consumption: 25300.000000 Joules (used hosts: 17300.000000 Joules; unused/idle hosts: 8000.000000)
+> [    80.00000000] [rank  1] Energy consumed (Joules):      12900.0000
+> [80.000000] [surf_energy/INFO] Total energy consumption: 29550.000000 Joules (used hosts: 21550.000000 Joules; unused/idle hosts: 8000.000000)
 > [80.000000] [surf_energy/INFO] Energy consumption of host MyHost1: 8650.000000 Joules
-> [80.000000] [surf_energy/INFO] Energy consumption of host MyHost2: 8650.000000 Joules
+> [80.000000] [surf_energy/INFO] Energy consumption of host MyHost2: 12900.000000 Joules
 > [80.000000] [surf_energy/INFO] Energy consumption of host MyHost3: 8000.000000 Joules
index aa6cd21..9c9f947 100644 (file)
@@ -1,5 +1,5 @@
 p Test smpi bindings for dvfs functions (Fortran 90 example)
-! output sort 1
+
 $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile  -platform ${srcdir:=.}/../../platforms/energy_platform.xml --cfg=smpi/simulate-computation:no ${bindir:=.}/f90/sef90 --cfg=plugin:Energy  --log=smpi_kernel.thres:warning --log=xbt_cfg.thres:warning
 > [     0.00000000] [rank  0]  3 pstates available
 > [     0.00000000] [rank  1]  3 pstates available
@@ -12,16 +12,16 @@ $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile  -platf
 > [     0.00000000] [rank  0] Current pstate:  0; Current power:  100000000.0000
 > [     0.00000000] [rank  1] Current pstate:  0; Current power:  100000000.0000
 > [    10.00000000] [rank  0] Energy consumed (Joules):       1200.0000
-> [    10.00000000] [rank  1] Energy consumed (Joules):       1200.0000
+> [    10.00000000] [rank  1] Energy consumed (Joules):       2000.0000
 > [    10.00000000] [rank  0] Current pstate:  1; Current power:   50000000.0000
 > [    10.00000000] [rank  1] Current pstate:  1; Current power:   50000000.0000
 > [    30.00000000] [rank  0] Energy consumed (Joules):       3400.0000
-> [    30.00000000] [rank  1] Energy consumed (Joules):       3400.0000
+> [    30.00000000] [rank  1] Energy consumed (Joules):       5400.0000
 > [    30.00000000] [rank  0] Current pstate:  2; Current power:   20000000.0000
 > [    30.00000000] [rank  1] Current pstate:  2; Current power:   20000000.0000
 > [    80.00000000] [rank  0] Energy consumed (Joules):       8650.0000
-> [    80.00000000] [rank  1] Energy consumed (Joules):       8650.0000
-> [80.000000] [surf_energy/INFO] Total energy consumption: 25300.000000 Joules (used hosts: 17300.000000 Joules; unused/idle hosts: 8000.000000)
+> [    80.00000000] [rank  1] Energy consumed (Joules):      12900.0000
+> [80.000000] [surf_energy/INFO] Total energy consumption: 29550.000000 Joules (used hosts: 21550.000000 Joules; unused/idle hosts: 8000.000000)
 > [80.000000] [surf_energy/INFO] Energy consumption of host MyHost1: 8650.000000 Joules
-> [80.000000] [surf_energy/INFO] Energy consumption of host MyHost2: 8650.000000 Joules
+> [80.000000] [surf_energy/INFO] Energy consumption of host MyHost2: 12900.000000 Joules
 > [80.000000] [surf_energy/INFO] Energy consumption of host MyHost3: 8000.000000 Joules
index 5ec2c2b..317eecc 100644 (file)
 int r, cs;
 
 int main(int argc, char **argv){
-  int err, size, rank;
+  int size;
+  int rank;
   int recv_buff;
   MPI_Status status;
   xbt_dynar_t requests = xbt_dynar_new(sizeof(int), NULL);
 
   /* Initialize MPI */
-  err = MPI_Init(&argc, &argv);
+  int err = MPI_Init(&argc, &argv);
   if(err !=  MPI_SUCCESS){
     printf("MPI initialization failed !\n");
     exit(1);
index dd529f8..d3baebf 100644 (file)
 
 int main(int argc, char **argv)
 {
-  int x,y, err, size, rank;
+  int x;
+  int y;
+  int size;
+  int rank;
   MPI_Status status;
 
   /* Initialize MPI */
-  err = MPI_Init(&argc, &argv);
+  int err = MPI_Init(&argc, &argv);
   if (err != MPI_SUCCESS) {
     printf("MPI initialization failed!\n");
     exit(1);
index c63b9fd..35f7b82 100644 (file)
 #define RELEASE_TAG 2
 
 int main(int argc, char **argv){
-  int err, size, rank;
+  int size;
+  int rank;
   int recv_buff;
   MPI_Status status;
   int CS_used = 0;
   xbt_dynar_t requests = xbt_dynar_new(sizeof(int), NULL);
 
   /* Initialize MPI */
-  err = MPI_Init(&argc, &argv);
+  int err = MPI_Init(&argc, &argv);
   if(err !=  MPI_SUCCESS){
     printf("MPI initialization failed !\n");
     exit(1);
index 24f0593..3ec31a2 100644 (file)
@@ -6,7 +6,9 @@ int x = 5;
 int y = 8;
 
 int main(int argc, char **argv) {
-  int recv_buff, size, rank;
+  int recv_buff;
+  int size;
+  int rank;
   MPI_Status status;
 
   MPI_Init(&argc, &argv);
index aafca4d..60aa0a8 100644 (file)
@@ -5,7 +5,9 @@
 int x;
 
 int main(int argc, char **argv) {
-  int recv_buff, size, rank;
+  int recv_buff;
+  int size;
+  int rank;
   MPI_Status status;
 
   MPI_Init(&argc, &argv);
index efdaa3c..0e0f56f 100644 (file)
@@ -6,7 +6,10 @@ int x = 0;
 int y = 0;
 
 int main(int argc, char **argv) {
-  int recv_x, recv_y, size, rank;
+  int recv_x;
+  int recv_y;
+  int size;
+  int rank;
   MPI_Status status;
 
   MPI_Init(&argc, &argv);
index 5e7add0..a0792ed 100644 (file)
@@ -5,7 +5,9 @@
 int x = 20;
 
 int main(int argc, char **argv) {
-  int recv_x = 1, size, rank;
+  int recv_x = 1;
+  int size;
+  int rank;
   MPI_Status status;
 
   MPI_Init(&argc, &argv);
index 01188f1..8c9108c 100644 (file)
 
 int main(int argc, char **argv)
 {
-  int recv_buff, err, size, rank;
+  int recv_buff;
+  int size;
+  int rank;
   MPI_Status status;
 
   /* Initialize MPI */
-  err = MPI_Init(&argc, &argv);
+  int err = MPI_Init(&argc, &argv);
   if (err != MPI_SUCCESS) {
     printf("MPI initialization failed!\n");
     exit(1);
index 51cc923..90091d7 100644 (file)
@@ -72,7 +72,7 @@ static int alltoall_mpi(int argc, char *argv[])
   XBT_INFO("alltoall for rank %d", rank);
   int* out=malloc(1000*size*sizeof(int));
   int* in=malloc(1000*size*sizeof(int));
-  MPI_Alltoall(out, 1000, MPI_INT,in, 1000, MPI_INT, MPI_COMM_WORLD); 
+  MPI_Alltoall(out, 1000, MPI_INT,in, 1000, MPI_INT, MPI_COMM_WORLD);
 
   XBT_INFO("after alltoall %d", rank);
   free(out);
index 35bf69e..815e937 100644 (file)
@@ -21,7 +21,7 @@ struct vm_params {
   int skip_stage2;
   double max_downtime;
 
-  double dp_rate;
+  double dp_intensity; // Percentage of pages that get dirty compared to netspeed [0;1]
   double dp_cap; /* bytes per 1 flop execution */
 
   /* set migration speed */
index 82b6c58..3776800 100644 (file)
@@ -17,14 +17,28 @@ namespace simgrid {
 namespace kernel {
 namespace activity {
   class ActivityImpl;
+  using ActivityImplPtr = boost::intrusive_ptr<ActivityImpl>;
   XBT_PUBLIC(void) intrusive_ptr_add_ref(ActivityImpl* activity);
   XBT_PUBLIC(void) intrusive_ptr_release(ActivityImpl* activity);
+
+  class CommImpl;
+  using CommImplPtr = boost::intrusive_ptr<CommImpl>;
+  class ExecImpl;
+  using ExecImplPtr = boost::intrusive_ptr<ExecImpl>;
+  class IoImpl;
+  using IoImplPtr = boost::intrusive_ptr<IoImpl>;
+  class RawImpl;
+  using RawImplPtr = boost::intrusive_ptr<RawImpl>;
+  class SleepImpl;
+  using SleepImplPtr = boost::intrusive_ptr<SleepImpl>;
 }
 namespace routing {
   class NetPoint;
 }
 }
 namespace simix {
+  class ActorImpl;
+  using ActorImplPtr = boost::intrusive_ptr<ActorImpl>;
   class Host;
 }
 namespace surf {
@@ -33,6 +47,7 @@ namespace surf {
   class LinkImpl;
   class HostImpl;
   class StorageImpl;
+  class FileImpl;
 }
 namespace trace_mgr {
   class trace;
@@ -43,8 +58,10 @@ namespace trace_mgr {
 typedef simgrid::s4u::Actor s4u_Actor;
 typedef simgrid::s4u::Host s4u_Host;
 typedef simgrid::s4u::Link s4u_Link;
+typedef simgrid::s4u::File s4u_File;
+typedef simgrid::s4u::Storage s4u_Storage;
 typedef simgrid::s4u::NetZone s4u_NetZone;
-typedef simgrid::kernel::activity::ActivityImpl* smx_activity_t;
+typedef boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl> smx_activity_t;
 typedef simgrid::kernel::routing::NetPoint routing_NetPoint;
 typedef simgrid::surf::Resource surf_Resource;
 typedef simgrid::trace_mgr::trace tmgr_Trace;
@@ -54,6 +71,8 @@ typedef simgrid::trace_mgr::trace tmgr_Trace;
 typedef struct s4u_Actor s4u_Actor;
 typedef struct s4u_Host s4u_Host;
 typedef struct s4u_Link s4u_Link;
+typedef struct s4u_File s4u_File;
+typedef struct s4u_Storage s4u_Storage;
 typedef struct s4u_NetZone s4u_NetZone;
 typedef struct kernel_Activity* smx_activity_t;
 typedef struct routing_NetPoint routing_NetPoint;
@@ -65,14 +84,12 @@ typedef struct Trace tmgr_Trace;
 typedef s4u_NetZone* sg_netzone_t;
 typedef s4u_Host* sg_host_t;
 typedef s4u_Link* sg_link_t;
-
+typedef s4u_Storage* sg_storage_t;
+typedef s4u_File* sg_file_t;
 
 typedef routing_NetPoint* sg_netpoint_t;
 typedef surf_Resource *sg_resource_t;
 
-// Types which are in fact dictelmt:
-typedef struct s_xbt_dictelm *sg_storage_t;
-
 typedef tmgr_Trace *tmgr_trace_t; /**< Opaque structure defining an availability trace */
 
 typedef struct s_smx_simcall s_smx_simcall_t;
index 98580d4..6eb90dd 100644 (file)
@@ -7,10 +7,20 @@
 #ifndef MSG_H
 #define MSG_H
 
-#include "xbt/lib.h"
 #include "simgrid/forward.h"
 #include "simgrid/simix.h"
 
+#ifdef __cplusplus
+namespace simgrid {
+namespace msg {
+class Comm;
+}
+}
+typedef simgrid::msg::Comm sg_msg_Comm;
+#else
+typedef struct msg_Comm sg_msg_Comm;
+#endif
+
 SG_BEGIN_DECL()
 
 /* *************************** Network Zones ******************************** */
@@ -58,46 +68,16 @@ typedef struct msg_task *msg_task_t;
 typedef msg_host_t msg_vm_t;
 
 /* ******************************** File ************************************ */
-
-typedef struct simdata_file* simdata_file_t;
-
-typedef struct msg_file_priv {
-  char *fullpath;
-  sg_size_t size;
-  char* mount_point;
-  char* storageId;
-  char* storage_type;
-  int desc_id;
-  void *data;
-  simdata_file_t simdata;
-} s_msg_file_priv_t;
-
-typedef struct msg_file_priv* msg_file_t;
+typedef sg_file_t msg_file_t;
 
 /* ******************************** Storage ************************************ */
-/* TODO: PV: to comment */
-
-extern int MSG_STORAGE_LEVEL;
 
 /** @brief Storage datatype.
  *  @ingroup msg_storage_management
  *
  *  You should consider this as an opaque object.
  */
-typedef xbt_dictelm_t msg_storage_t;
-
-struct msg_storage_priv  {
-  const char* name;
-  const char* hostname;
-  sg_size_t size;
-  void* data;
-};
-typedef struct msg_storage_priv  s_msg_storage_priv_t;
-typedef struct msg_storage_priv* msg_storage_priv_t;
-
-static inline msg_storage_priv_t MSG_storage_priv(msg_storage_t storage){
-  return (msg_storage_priv_t )xbt_lib_get_level(storage, MSG_STORAGE_LEVEL);
-}
+typedef sg_storage_t msg_storage_t;
 
 /**
  * \brief @brief Communication action.
@@ -105,7 +85,7 @@ static inline msg_storage_priv_t MSG_storage_priv(msg_storage_t storage){
  *
  * Object representing an ongoing communication between processes. Such beast is usually obtained by using #MSG_task_isend, #MSG_task_irecv or friends.
  */
-typedef struct msg_comm *msg_comm_t;
+typedef sg_msg_Comm* msg_comm_t;
 
 /** \brief Default value for an uninitialized #msg_task_t.
     \ingroup m_task_management
@@ -229,7 +209,6 @@ XBT_PUBLIC(void) MSG_file_dump(msg_file_t fd);
 XBT_PUBLIC(msg_error_t) MSG_file_unlink(msg_file_t fd);
 XBT_PUBLIC(msg_error_t) MSG_file_seek(msg_file_t fd, sg_offset_t offset, int origin);
 XBT_PUBLIC(sg_size_t) MSG_file_tell (msg_file_t fd);
-XBT_PUBLIC(void) __MSG_file_get_info(msg_file_t fd);
 XBT_PUBLIC(const char *) MSG_file_get_name(msg_file_t file);
 XBT_PUBLIC(msg_error_t) MSG_file_move(msg_file_t fd, const char* fullpath);
 XBT_PUBLIC(msg_error_t) MSG_file_rcopy(msg_file_t fd, msg_host_t host, const char* fullpath);
index 06d1de8..a4d9be7 100644 (file)
 SG_BEGIN_DECL()
 
 XBT_PUBLIC(void) sg_host_energy_plugin_init();
+XBT_PUBLIC(void) sg_host_energy_update_all();
 XBT_PUBLIC(double) sg_host_get_consumed_energy(sg_host_t host);
 XBT_PUBLIC(double) sg_host_get_wattmin_at(sg_host_t host, int pstate);
 XBT_PUBLIC(double) sg_host_get_wattmax_at(sg_host_t host, int pstate);
+XBT_PUBLIC(double) sg_host_get_current_consumption(sg_host_t host);
 
 #define MSG_host_energy_plugin_init() sg_energy_plugin_init()
 #define MSG_host_get_consumed_energy(host) sg_host_get_consumed_energy(host)
 #define MSG_host_get_wattmin_at(host,pstate) sg_host_get_wattmin_at(host,pstate)
 #define MSG_host_get_wattmax_at(host,pstate) sg_host_get_wattmax_at(host,pstate)
+#define MSG_host_get_current_consumption(host) sg_host_get_current_consumption(host)
 
 SG_END_DECL()
 
index aaa9e38..d0c8b54 100644 (file)
@@ -25,7 +25,7 @@ XBT_PUBLIC_CLASS Activity {
 
 protected:
   Activity()  = default;
-  ~Activity() = default;
+  virtual ~Activity() = default;
 
 public:
   Activity(Activity const&) = delete;
@@ -61,7 +61,7 @@ public:
   void *getUserData() { return userData_; }
 
 private:
-  simgrid::kernel::activity::ActivityImpl *pimpl_ = nullptr;
+  simgrid::kernel::activity::ActivityImplPtr pimpl_ = nullptr;
   e_s4u_activity_state_t state_ = inited;
   double remains_ = 0;
   void *userData_ = nullptr;
index 5517dc6..5b0378c 100644 (file)
@@ -175,6 +175,12 @@ public:
    */
   static ActorPtr createActor(const char* name, s4u::Host* host, std::function<void()> code);
 
+  static ActorPtr createActor(const char* name, s4u::Host* host, std::function<void(std::vector<std::string>*)> code,
+                              std::vector<std::string>* args)
+  {
+    return createActor(name, host, [code](std::vector<std::string>* args) { code(args); }, args);
+  }
+
   /** Create an actor using code
    *
    *  Using this constructor, move-only type can be used. The consequence is
@@ -256,7 +262,7 @@ public:
    * This blocks the calling actor until the actor on which we call join() is terminated
    */
   void join();
-  
+
   // Static methods on all actors:
 
   /** Ask kindly to all actors to die. Only the issuer will survive. */
@@ -275,15 +281,16 @@ public:
  *  @brief Static methods working on the current actor (see @ref s4u::Actor) */
 namespace this_actor {
 
-  /** Block the actor sleeping for that amount of seconds (may throws hostFailure) */
-  XBT_PUBLIC(void) sleep_for(double duration);
-  XBT_PUBLIC(void) sleep_until(double timeout);
+XBT_PUBLIC(bool) isMaestro();
 
-  template<class Rep, class Period>
-  inline void sleep_for(std::chrono::duration<Rep, Period> duration)
-  {
-    auto seconds = std::chrono::duration_cast<SimulationClockDuration>(duration);
-    this_actor::sleep_for(seconds.count());
+/** Block the actor sleeping for that amount of seconds (may throws hostFailure) */
+XBT_PUBLIC(void) sleep_for(double duration);
+XBT_PUBLIC(void) sleep_until(double timeout);
+
+template <class Rep, class Period> inline void sleep_for(std::chrono::duration<Rep, Period> duration)
+{
+  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)
index 45db6ec..4adecc0 100644 (file)
@@ -26,41 +26,27 @@ public:
 
   virtual ~Comm();
 
-  /*! take a range of s4u::Comm* (last excluded) and return when one of them is finished. The return value is an
+  /*! take a range of s4u::CommPtr (last excluded) and return when one of them is finished. The return value is an
    * iterator on the finished Comms. */
   template <class I> static I wait_any(I first, I last)
   {
-    // Map to dynar<Synchro*>:
-    xbt_dynar_t comms = xbt_dynar_new(sizeof(simgrid::kernel::activity::ActivityImpl*), NULL);
-    for (I iter = first; iter != last; iter++) {
-      Comm& comm = **iter;
-      if (comm.state_ == inited)
-        comm.start();
-      xbt_assert(comm.state_ == started);
-      xbt_dynar_push_as(comms, simgrid::kernel::activity::ActivityImpl*, comm.pimpl_);
-    }
-    // Call the underlying simcall:
-    int idx = simcall_comm_waitany(comms, -1);
-    xbt_dynar_free(&comms);
-    // Not found:
-    if (idx == -1)
-      return last;
-    // Lift the index to the corresponding iterator:
-    auto res       = std::next(first, idx);
-    (*res)->state_ = finished;
-    return res;
+    return wait_any_for(first, last, -1);
   }
-  /*! Same as wait_any, but with a timeout. If wait_any_for return because of the timeout last is returned.*/
+  /*! Same as wait_any, but with a timeout. If the timeout occurs, parameter last is returned.*/
   template <class I> static I wait_any_for(I first, I last, double timeout)
   {
     // Map to dynar<Synchro*>:
-    xbt_dynar_t comms = xbt_dynar_new(sizeof(simgrid::kernel::activity::ActivityImpl*), NULL);
+    xbt_dynar_t comms = xbt_dynar_new(sizeof(simgrid::kernel::activity::ActivityImpl*), [](void*ptr){
+      intrusive_ptr_release(*(simgrid::kernel::activity::ActivityImpl**)ptr);
+    });
     for (I iter = first; iter != last; iter++) {
-      Comm& comm = **iter;
-      if (comm.state_ == inited)
-        comm.start();
-      xbt_assert(comm.state_ == started);
-      xbt_dynar_push_as(comms, simgrid::kernel::activity::ActivityImpl*, comm.pimpl_);
+      CommPtr comm = *iter;
+      if (comm->state_ == inited)
+        comm->start();
+      xbt_assert(comm->state_ == started);
+      simgrid::kernel::activity::ActivityImpl* ptr = comm->pimpl_.get();
+      intrusive_ptr_add_ref(ptr);
+      xbt_dynar_push_as(comms, simgrid::kernel::activity::ActivityImpl*, ptr);
     }
     // Call the underlying simcall:
     int idx = simcall_comm_waitany(comms, timeout);
index 9aab4fe..94dc8d1 100644 (file)
@@ -28,13 +28,11 @@ namespace s4u {
  */
 XBT_PUBLIC_CLASS Engine
 {
-private:
-  ~Engine();
-
 public:
   /** Constructor, taking the command line parameters of your main function */
   Engine(int* argc, char** argv);
 
+  ~Engine();
   /** Finalize the default engine and all its dependencies */
   static void shutdown();
 
index d9d0080..75050dd 100644 (file)
@@ -9,12 +9,11 @@
 #include <xbt/base.h>
 
 #include <simgrid/simix.h>
+#include <string>
 
 namespace simgrid {
 namespace s4u {
 
-class Storage;
-
 /** @brief A simulated file
  *
  * Used to simulate the time it takes to access to a file, but does not really store any information.
@@ -27,6 +26,7 @@ XBT_PUBLIC_CLASS File
 {
 public:
   File(const char* fullpath, void* userdata);
+  File(const char* fullpath, sg_host_t host, void* userdata);
   ~File();
 
   /** Retrieves the path to the file */
@@ -38,12 +38,10 @@ public:
    *  Any storage is considered as local, and no network communication ever occur.
    */
   sg_size_t read(sg_size_t size);
-  /** Simulates a write action. Returns the size of data actually written.
-   *
-   *  FIXME: reading from a remotely mounted disk is not implemented yet.
-   *  Any storage is considered as local, and no network communication ever occur.
-   */
+
+  /** Simulates a write action. Returns the size of data actually written. */
   sg_size_t write(sg_size_t size);
+  sg_size_t write(sg_size_t size, sg_host_t host);
 
   /** Allows to store user data on that host */
   void setUserdata(void* data) { userdata_ = data; }
@@ -65,17 +63,23 @@ public:
 
   /** Remove a file from disk */
   void unlink();
+  void unlink(sg_host_t host);
 
   /* FIXME: add these to the S4U API:
   XBT_PUBLIC(const char *) MSG_file_get_name(msg_file_t file);
   XBT_PUBLIC(msg_error_t) MSG_file_rcopy(msg_file_t fd, msg_host_t host, const char* fullpath);
   XBT_PUBLIC(msg_error_t) MSG_file_rmove(msg_file_t fd, msg_host_t host, const char* fullpath);
   */
+  const char* storage_type;
+  const char* storageId;
+  std::string mount_point;
+  int desc_id = 0;
 
 private:
   smx_file_t pimpl_ = nullptr;
   const char* path_ = nullptr;
   void* userdata_   = nullptr;
+  sg_host_t host_   = nullptr;
 };
 }
 } // namespace simgrid::s4u
index ab1dd5e..31ecd57 100644 (file)
@@ -7,8 +7,7 @@
 #define SIMGRID_S4U_HOST_HPP
 
 #include <string>
-
-#include <boost/unordered_map.hpp>
+#include <unordered_map>
 
 #include "xbt/Extendable.hpp"
 #include "xbt/dict.h"
@@ -95,21 +94,20 @@ public:
   int pstatesCount() const;
   void setPstate(int pstate_index);
   int pstate();
-  xbt_dict_t mountedStoragesAsDict(); // HACK
   void attachedStorages(std::vector<const char*> * storages);
 
   /** Get an associative list [mount point]->[Storage] of all local mount points.
    *
    *  This is defined in the platform file, and cannot be modified programatically (yet).
    */
-  boost::unordered_map<std::string, Storage*> const& mountedStorages();
+  std::unordered_map<std::string, Storage*> const& mountedStorages();
 
   void routeTo(Host * dest, std::vector<Link*> * links, double* latency);
   void routeTo(Host * dest, std::vector<surf::LinkImpl*> * links, double* latency);
 
 private:
   simgrid::xbt::string name_ = "noname";
-  boost::unordered_map<std::string, Storage*>* mounts = nullptr; // caching
+  std::unordered_map<std::string, Storage*>* mounts = nullptr; // caching
 
 public:
   // TODO, this could be a unique_ptr
@@ -145,9 +143,8 @@ public class Host {
    * The external load (coming from an availability trace) is not taken in account.
    *
    * @return      The number of tasks currently running on a host.
-   */ 
+   */
   public native int getLoad();
 
-
 }
 #endif
index 62c36fd..fdd13dd 100644 (file)
@@ -26,7 +26,7 @@ namespace s4u {
  * Rendez-vous point for network communications, similar to URLs on
  * which you could post and retrieve data. Actually, the mailboxes are
  * not involved in the communication once it starts, but only to find
- * the contact with which you want to communicate. 
+ * the contact with which you want to communicate.
 
  * Here are some mechanisms similar to the mailbox in other
  * communication systems: The phone number, which allows the caller to
@@ -93,8 +93,8 @@ namespace s4u {
  * starts to flow as soon as the sender posts it, even if the receiver
  * did not post its recv() yet. This can obviously lead to bad
  * simulation timings, as the simulated communications do not start at
- * the exact same time than the real ones. 
- * 
+ * the exact same time than the real ones.
+ *
  * If the simulation timings are very important to you, you can
  * declare a specific receiver to a given mailbox (with the function
  * setReceiver()). That way, any send() posted to that mailbox will
index 0d1f227..9e8e317 100644 (file)
@@ -23,13 +23,13 @@ class ConditionVariable;
  *  @ingroup s4u_api
  *
  * It is strictly impossible to use a real mutex, such as
- * [std::mutex](http://en.cppreference.com/w/cpp/thread/mutex)
- * or [pthread_mutex_t](http://pubs.opengroup.org/onlinepubs/007908775/xsh/pthread_mutex_lock.html),
+ * <a href="http://en.cppreference.com/w/cpp/thread/mutex">std::mutex</a>
+ * or <a href="http://pubs.opengroup.org/onlinepubs/007908775/xsh/pthread_mutex_lock.html">pthread_mutex_t</a>,
  * because it would block the whole simulation.
  * Instead, you should use the present class, that is a drop-in replacement of
- * [std::mutex](http://en.cppreference.com/w/cpp/thread/mutex).
+ * <a href="http://en.cppreference.com/w/cpp/thread/mutex>std::mutex</a>.
  *
- * As for any S4U object, Mutexes are using the @ref "RAII idiom" s4u_raii for memory management.
+ * As for any S4U object, Mutexes are using the @ref s4u_raii "RAII idiom" for memory management.
  * Use createMutex() to get a ::MutexPtr to a newly created mutex and only manipulate ::MutexPtr.
  *
  */
index 305bbba..f366c3a 100644 (file)
 namespace simgrid {
 namespace s4u {
 
+XBT_ATTRIB_PUBLIC std::map<std::string, Storage*>* allStorages();
+
 XBT_PUBLIC_CLASS Storage
 {
   friend s4u::Engine;
-
-  Storage(std::string name, smx_storage_t inferior);
+  friend simgrid::surf::StorageImpl;
 
 public:
-  Storage() = default;
-  virtual ~Storage();
+  explicit Storage(surf::StorageImpl * pimpl) : pimpl_(pimpl) {}
+  virtual ~Storage() = default;
   /** Retrieve a Storage by its name. It must exist in the platform file */
-  static Storage& byName(const char* name);
+  static Storage* byName(const char* name);
   const char* name();
-  const char* host();
+  const char* type();
+  Host* host();
   sg_size_t sizeFree();
   sg_size_t sizeUsed();
   /** Retrieve the total amount of space of this storage element */
   sg_size_t size();
+
   xbt_dict_t properties();
   const char* property(const char* key);
   void setProperty(const char* key, char* value);
-  std::map<std::string, sg_size_t*>* content();
-  std::unordered_map<std::string, Storage*>* allStorages();
+  std::map<std::string, sg_size_t>* content();
 
-protected:
-  smx_storage_t inferior();
-
-public:
   void setUserdata(void* data) { userdata_ = data; }
   void* userdata() { return userdata_; }
 
-private:
-  static std::unordered_map<std::string, Storage*>* storages_;
+  /* The signals */
+  /** @brief Callback signal fired when a new Link is created */
+  static simgrid::xbt::signal<void(s4u::Storage&)> onCreation;
+
+  /** @brief Callback signal fired when a Link is destroyed */
+  static simgrid::xbt::signal<void(s4u::Storage&)> onDestruction;
 
-  std::string hostname_;
+  Host* attached_to_              = nullptr;
+  surf::StorageImpl* const pimpl_ = nullptr;
+
+private:
   std::string name_;
-  sg_size_t size_      = 0;
-  smx_storage_t pimpl_ = nullptr;
-  void* userdata_      = nullptr;
+  void* userdata_ = nullptr;
 };
 
 } /* namespace s4u */
index cc29359..237a5eb 100644 (file)
@@ -26,6 +26,7 @@ using MailboxPtr = boost::intrusive_ptr<Mailbox>;
 class Mutex;
 class NetZone;
 
+class File;
 class Storage;
 
 XBT_PUBLIC(void) intrusive_ptr_release(Comm* c);
index b317441..27efe34 100644 (file)
@@ -121,8 +121,8 @@ XBT_PUBLIC(void) SD_task_schedulel(SD_task_t task, int count, ...);
 
 /** @} */
 
-/** @addtogroup SD_task_dependency_api 
- * 
+/** @addtogroup SD_task_dependency_api
+ *
  *  This section describes the functions for managing the dependencies between the tasks.
  *
  *  @see SD_task_api
index 64f9aac..b464cf1 100644 (file)
@@ -26,14 +26,6 @@ namespace context {
 
   namespace simix {
 
-  /** @brief Process datatype
-      @ingroup simix_process_management
-
-      A process may be defined as a <em>code</em>, with some <em>private
-      data</em>, executing in a <em>location</em>.
-      \see m_process_management
-    @{ */
-  class ActorImpl;
   class MutexImpl;
 }
 }
@@ -95,9 +87,6 @@ typedef struct s_smx_sem *smx_sem_t;
 /********************************** File *************************************/
 typedef struct s_smx_file *smx_file_t;
 
-/********************************** Storage *************************************/
-typedef xbt_dictelm_t smx_storage_t;
-
 /* ****************************** Process *********************************** */
 
 typedef enum {
@@ -215,6 +204,8 @@ XBT_PUBLIC(int) SIMIX_process_has_pending_comms(smx_actor_t process);
 XBT_PUBLIC(void) SIMIX_process_on_exit_runall(smx_actor_t process);
 XBT_PUBLIC(void) SIMIX_process_on_exit(smx_actor_t process, int_f_pvoid_pvoid_t fun, void *data);
 
+SG_END_DECL()
+
 /****************************** Communication *********************************/
 XBT_PUBLIC(void) SIMIX_comm_set_copy_data_callback(void (*callback) (smx_activity_t, void*, size_t));
 XBT_PUBLIC(void) SIMIX_comm_copy_pointer_callback(smx_activity_t comm, void* buff, size_t buff_size);
@@ -249,6 +240,7 @@ XBT_PUBLIC(void) simcall_execution_set_bound(smx_activity_t execution, double bo
 XBT_PUBLIC(e_smx_state_t) simcall_execution_wait(smx_activity_t execution);
 
 /**************************** Process simcalls ********************************/
+SG_BEGIN_DECL()
 /* Constructor and Destructor */
 XBT_PUBLIC(smx_actor_t)
 simcall_process_create(const char* name, xbt_main_func_t code, void* data, sg_host_t host, int argc, char** argv,
@@ -278,6 +270,7 @@ XBT_PUBLIC(smx_actor_t) simcall_process_restart(smx_actor_t process);
 XBT_PUBLIC(void) simcall_process_join(smx_actor_t process, double timeout);
 /* Sleep control */
 XBT_PUBLIC(e_smx_state_t) simcall_process_sleep(double duration);
+SG_END_DECL()
 
 /************************** Comunication simcalls *****************************/
 
@@ -323,6 +316,7 @@ XBT_PUBLIC(int) simcall_comm_testany(smx_activity_t* comms, size_t count);
 XBT_PUBLIC(void) simcall_set_category(smx_activity_t synchro, const char *category);
 
 /************************** Synchro simcalls **********************************/
+SG_BEGIN_DECL()
 XBT_PUBLIC(smx_mutex_t) simcall_mutex_init();
 XBT_PUBLIC(smx_mutex_t) SIMIX_mutex_ref(smx_mutex_t mutex);
 XBT_PUBLIC(void) SIMIX_mutex_unref(smx_mutex_t mutex);
@@ -351,18 +345,16 @@ XBT_PUBLIC(void *) simcall_file_get_data(smx_file_t fd);
 XBT_PUBLIC(void) simcall_file_set_data(smx_file_t fd, void *data);
 XBT_PUBLIC(sg_size_t) simcall_file_read(smx_file_t fd, sg_size_t size, sg_host_t host);
 XBT_PUBLIC(sg_size_t) simcall_file_write(smx_file_t fd, sg_size_t size, sg_host_t host);
-XBT_PUBLIC(smx_file_t) simcall_file_open(const char* fullpath, sg_host_t host);
+XBT_PUBLIC(smx_file_t) simcall_file_open(const char* mount, const char* path, sg_storage_t st);
 XBT_PUBLIC(int) simcall_file_close(smx_file_t fd, sg_host_t host);
 XBT_PUBLIC(int) simcall_file_unlink(smx_file_t fd, sg_host_t host);
 XBT_PUBLIC(sg_size_t) simcall_file_get_size(smx_file_t fd);
-XBT_PUBLIC(xbt_dynar_t) simcall_file_get_info(smx_file_t fd);
 XBT_PUBLIC(sg_size_t) simcall_file_tell(smx_file_t fd);
 XBT_PUBLIC(int) simcall_file_seek(smx_file_t fd, sg_offset_t offset, int origin);
 XBT_PUBLIC(int) simcall_file_move(smx_file_t fd, const char* fullpath);
-/*****************************   Storage   **********************************/
-XBT_PUBLIC(xbt_dict_t) simcall_storage_get_properties(smx_storage_t storage);
 /************************** MC simcalls   **********************************/
 XBT_PUBLIC(int) simcall_mc_random(int min, int max);
 
 SG_END_DECL()
+
 #endif                          /* _SIMIX_SIMIX_H */
index 11c67ee..39b5483 100644 (file)
@@ -561,8 +561,8 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Put,( void *origin_addr, int origin_count, MPI_Dat
     MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win));
 MPI_CALL(XBT_PUBLIC(int), MPI_Accumulate,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
     int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win));
-MPI_CALL(XBT_PUBLIC(int), MPI_Get_accumulate,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, 
-    void* result_addr, int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, 
+MPI_CALL(XBT_PUBLIC(int), MPI_Get_accumulate,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
+    void* result_addr, int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
     int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win));
 
 MPI_CALL(XBT_PUBLIC(int), MPI_Rget,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
@@ -571,8 +571,8 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Rput,( void *origin_addr, int origin_count, MPI_Da
     MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win, MPI_Request* request));
 MPI_CALL(XBT_PUBLIC(int), MPI_Raccumulate,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
     int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request* request));
-MPI_CALL(XBT_PUBLIC(int), MPI_Rget_accumulate,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, 
-    void* result_addr, int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, 
+MPI_CALL(XBT_PUBLIC(int), MPI_Rget_accumulate,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
+    void* result_addr, int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
     int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request* request));
 
 MPI_CALL(XBT_PUBLIC(int), MPI_Fetch_and_op,( void *origin_addr, void* result_addr, MPI_Datatype datatype,
@@ -603,9 +603,9 @@ typedef void MPI_Handler_function(MPI_Comm*, int*, ...);
 typedef void* MPI_Errhandler;
 
 typedef void MPI_Comm_errhandler_function(MPI_Comm *, int *, ...);
-typedef int MPI_Grequest_query_function(void *extra_state, MPI_Status *status); 
-typedef int MPI_Grequest_free_function(void *extra_state); 
-typedef int MPI_Grequest_cancel_function(void *extra_state, int complete); 
+typedef int MPI_Grequest_query_function(void *extra_state, MPI_Status *status);
+typedef int MPI_Grequest_free_function(void *extra_state);
+typedef int MPI_Grequest_cancel_function(void *extra_state, int complete);
 #define MPI_DUP_FN MPI_Comm_dup
 
 #define MPI_WIN_DUP_FN ((MPI_Win_copy_attr_function*)MPI_DUP_FN)
@@ -723,7 +723,7 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Win_set_errhandler, (MPI_Win win, MPI_Errhandler e
 MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_envelope,(MPI_Datatype datatype,int *num_integers,int *num_addresses,
                             int *num_datatypes, int *combiner));
 MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_contents,(MPI_Datatype datatype, int max_integers, int max_addresses,
-                            int max_datatypes, int* array_of_integers, MPI_Aint* array_of_addresses, 
+                            int max_datatypes, int* array_of_integers, MPI_Aint* array_of_addresses,
                             MPI_Datatype *array_of_datatypes));
 MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_darray,(int size, int rank, int ndims, int* array_of_gsizes,
                             int* array_of_distribs, int* array_of_dargs, int* array_of_psizes,
@@ -866,14 +866,14 @@ XBT_PUBLIC(void) smpi_sample_1(int global, const char *file, int line, int iters
 XBT_PUBLIC(int) smpi_sample_2(int global, const char *file, int line);
 XBT_PUBLIC(void) smpi_sample_3(int global, const char *file, int line);
 
-/** 
- * Need a public setter for SMPI copy_callback function, so users can define 
+/**
+ * Need a public setter for SMPI copy_callback function, so users can define
  * their own while still using default SIMIX_copy_callback for MSG copies.
  */
 XBT_PUBLIC(void) smpi_comm_set_copy_data_callback(void (*callback) (smx_activity_t, void*, size_t));
 
 
-/** 
+/**
  * Functions for call location tracing. These functions will be
  * called from the user's application! (With the __FILE__ and __LINE__ values
  * passed as parameters.)
@@ -961,7 +961,7 @@ static void __attribute__((destructor)) __postfini_##name(void) { \
 
 #define SMPI_VARGET_GLOBAL(name) name[smpi_process_index()]
 
-/** 
+/**
  * This is used for the old privatization method, i.e., on old
  * machines that do not yet support privatization via mmap
  */
diff --git a/include/surf/surf_routing.h b/include/surf/surf_routing.h
deleted file mode 100644 (file)
index 2d19df1..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Copyright (c) 2004-2015. 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. */
-
-#ifndef SURF_SURF_ROUTING_H
-#define SURF_SURF_ROUTING_H
-
-#include "xbt/lib.h"
-
-SG_BEGIN_DECL()
-
-// FIXME: this header file should die
-
-XBT_PUBLIC_DATA(xbt_lib_t) storage_lib;
-XBT_PUBLIC_DATA(int) SURF_STORAGE_LEVEL;  // Surf storage level
-
-SG_END_DECL()
-
-#endif                          /* _SURF_SURF_H */
index 1ba708f..2d0d94e 100644 (file)
@@ -78,7 +78,7 @@ XBT_PUBLIC(void) xbt_automaton_transition_set_source(xbt_automaton_transition_t
 XBT_PUBLIC(void) xbt_automaton_transition_set_destination(xbt_automaton_transition_t t, xbt_automaton_state_t dst);
 XBT_PUBLIC(xbt_dynar_t) xbt_automaton_state_get_out_transitions(xbt_automaton_state_t s);
 XBT_PUBLIC(xbt_dynar_t) xbt_automaton_state_get_in_transitions(xbt_automaton_state_t s);
-XBT_PUBLIC(xbt_automaton_state_t) xbt_automaton_state_exists(xbt_automaton_t a, char *id); 
+XBT_PUBLIC(xbt_automaton_state_t) xbt_automaton_state_exists(xbt_automaton_t a, char *id);
 XBT_PUBLIC(void) xbt_automaton_display(xbt_automaton_t a);
 XBT_PUBLIC(void) xbt_automaton_exp_label_display(xbt_automaton_exp_label_t l);
 
index 108003c..ba5e76f 100644 (file)
 
 /* Build the DLL */
 #if defined(DLL_EXPORT)
+#  define XBT_ATTRIB_PUBLIC           __declspec(dllexport)
 #  define XBT_PUBLIC(type)            __declspec(dllexport) type
 #  define XBT_EXPORT_NO_IMPORT(type)  __declspec(dllexport) type
 #  define XBT_IMPORT_NO_EXPORT(type)  type
 
 /* Link against the DLL */
 #elif (defined(_WIN32) && !defined(DLL_EXPORT))
+#  define XBT_ATTRIB_PUBLIC           __declspec(dllimport)
 #  define XBT_PUBLIC(type)            __declspec(dllimport) type
 #  define XBT_EXPORT_NO_IMPORT(type)  type
 #  define XBT_IMPORT_NO_EXPORT(type)  __declspec(dllimport) type
 #  define XBT_PUBLIC_CLASS            class __declspec(dllimport)
 #  define XBT_PRIVATE
 
-#elif defined(__ELF__) 
+#elif defined(__ELF__)
+#  define XBT_ATTRIB_PUBLIC           __attribute__((visibility("default")))
 #  define XBT_PUBLIC(type)            __attribute__((visibility("default"))) type
 #  define XBT_EXPORT_NO_IMPORT(type)  __attribute__((visibility("default"))) type
 #  define XBT_IMPORT_NO_EXPORT(type)  __attribute__((visibility("default"))) type
 #  define XBT_PRIVATE                 __attribute__((visibility("hidden")))
 
 #else
+#  define XBT_ATTRIB_PUBLIC           /* public */
 #  define XBT_PUBLIC(type)            type
 #  define XBT_EXPORT_NO_IMPORT(type)  type
 #  define XBT_IMPORT_NO_EXPORT(type)  type
index cf7a3ec..c006453 100644 (file)
@@ -36,10 +36,10 @@ XBT_PUBLIC(void) xbt_test_suite_push(xbt_test_suite_t suite, const char *name, t
  * It is a coma (,) separated list of directives. They are applied from left to right.
  *
  * Each of them of form:
- * 
+ *
  * [-|+]suitename[:unitname[:testname]]
- * 
- * * First char: 
+ *
+ * * First char:
  *   if it's a '-', the directive disables something
  *   if it's a '+', the directive enables something
  *   By default, everything is enabled, but you can disable a suite and reenable some parts
@@ -54,24 +54,24 @@ XBT_PUBLIC(void) xbt_test_dump(char *selection);
 /* Cleanup the mess */
 XBT_PUBLIC(void) xbt_test_exit();
 
-/** 
+/**
  * @addtogroup XBT_cunit
  * @brief Unit testing implementation (see @ref inside_tests_add_units)
- *  
+ *
  * This module is mainly intended to allow the tests of SimGrid itself and may lack the level of genericity that you
  * would expect as a user. Only use it in external projects at your own risk (but it works rather well for us). We play
  * with the idea of migrating to an external solution for our unit tests, possibly offering more features, but having
  * absolutely no dependencies is a nice feature of SimGrid (and this code is sufficient to cover our needs, actually,
  * so why should we bother switching?)
- * 
+ *
  * Unit testing is not intended to write integration tests.
  * Please refer to \ref inside_tests_add_integration for that instead.
  *
- * @{ 
+ * @{
  */
 /** @brief Provide information about the suite declared in this file
  *  @hideinitializer
- * 
+ *
  * Actually, this macro is only used by the script extracting the test units, but that should be transparent for you.
  *
  * @param suite_name the short name of this suite, to be used in the --tests argument of testall afterward. Avoid
@@ -101,15 +101,15 @@ XBT_PUBLIC(void) xbt_test_exit();
 XBT_PUBLIC(void) _xbt_test_add(const char *file, int line, const char *fmt, ...) XBT_ATTRIB_PRINTF(3, 4);
 XBT_PUBLIC(void) _xbt_test_fail(const char *file, int line, const char *fmt, ...) XBT_ATTRIB_PRINTF(3, 4);
 XBT_PUBLIC(void) _xbt_test_log(const char *file, int line, const char *fmt, ...) XBT_ATTRIB_PRINTF(3, 4);
-/** @brief Declare that a new test begins (printf-like parameters, describing the test) 
+/** @brief Declare that a new test begins (printf-like parameters, describing the test)
  *  @hideinitializer */
 #define xbt_test_add(...)       _xbt_test_add(__FILE__, __LINE__, __VA_ARGS__)
-/** @brief Declare that the lastly started test failed (printf-like parameters, describing failure cause) 
+/** @brief Declare that the lastly started test failed (printf-like parameters, describing failure cause)
  *  @hideinitializer */
 #define xbt_test_fail(...)      _xbt_test_fail(__FILE__, __LINE__, __VA_ARGS__)
 /** @brief The lastly started test is actually an assert
- *  @hideinitializer 
- * 
+ *  @hideinitializer
+ *
  * - If provided a uniq parameter, this is assumed to be a condition that is expected to be true
  * - If provided more parameters, the first one is a condition, and the other ones are printf-like arguments that are
  *   to be displayed when the condition fails.
index 747e318..86751e8 100644 (file)
@@ -19,7 +19,7 @@ SG_BEGIN_DECL()
   * @brief DynArr are dynamically sized vector which may contain any type of variables.
   *
   * These are the SimGrid version of the dynamically size arrays, which all C programmer recode one day or another.
-  *  
+  *
   * For performance concerns, the content of DynArr must be homogeneous (in contrary to dictionnaries -- see the
   * \ref XBT_dict section). You thus have to provide the function which will be used to free the content at
   * structure creation (of type void_f_pvoid_t).
@@ -40,7 +40,7 @@ SG_BEGIN_DECL()
   * \until xbt_dynar_free
   *
   * \section XBT_dynar_exptr Example with pointed data
-  * 
+  *
   * \skip test_dynar_string
   * \skip dynar_t
   * \until s2
@@ -147,7 +147,7 @@ XBT_PUBLIC(void *) xbt_dynar_pop_ptr(xbt_dynar_t const dynar);
  *  @{
  */
 
-  /** @brief Quick retrieval of scalar content 
+  /** @brief Quick retrieval of scalar content
    *  @hideinitializer */
 #  define xbt_dynar_get_as(dynar,idx,type) \
           (*(type*)xbt_dynar_get_ptr((dynar),(idx)))
@@ -155,19 +155,19 @@ XBT_PUBLIC(void *) xbt_dynar_pop_ptr(xbt_dynar_t const dynar);
  *  @hideinitializer */
 #  define xbt_dynar_set_as(dynar,idx,type,val) \
          (*(type*)xbt_dynar_set_at_ptr((dynar),(idx))) = val
-  /** @brief Quick retrieval of scalar content 
+  /** @brief Quick retrieval of scalar content
    *  @hideinitializer */
 #  define xbt_dynar_getlast_as(dynar,type) \
           (*(type*)xbt_dynar_get_ptr((dynar),xbt_dynar_length(dynar)-1))
-  /** @brief Quick retrieval of scalar content 
+  /** @brief Quick retrieval of scalar content
    *  @hideinitializer */
 #  define xbt_dynar_getfirst_as(dynar,type) \
           (*(type*)xbt_dynar_get_ptr((dynar),0))
-  /** @brief Quick insertion of scalar content 
+  /** @brief Quick insertion of scalar content
    *  @hideinitializer */
 #  define xbt_dynar_insert_at_as(dynar,idx,type,value) \
           *(type*)xbt_dynar_insert_at_ptr(dynar,idx)=value
-  /** @brief Quick insertion of scalar content 
+  /** @brief Quick insertion of scalar content
    *  @hideinitializer */
 #  define xbt_dynar_push_as(dynar,type,value) \
           *(type*)xbt_dynar_push_ptr(dynar)=value
@@ -190,7 +190,7 @@ XBT_PUBLIC(void *) xbt_dynar_pop_ptr(xbt_dynar_t const dynar);
 
 XBT_PUBLIC(void) xbt_dynar_cursor_rm(xbt_dynar_t dynar, unsigned int *const cursor);
 
-/* 
+/*
  * \warning DO NOT USE THIS STRUCTURE DIRECTLY! Instead, use the public interface:
  *          This was made public to allow:
  *           - the inlining of the foreach elements
@@ -222,8 +222,8 @@ static inline int _xbt_dynar_cursor_get(const xbt_dynar_t dynar, unsigned int id
   return TRUE;
 }
 
-/** @brief Iterates over the whole dynar. 
- * 
+/** @brief Iterates over the whole dynar.
+ *
  *  @param _dynar what to iterate over
  *  @param _cursor an integer used as cursor
  *  @param _data
@@ -238,7 +238,7 @@ xbt_dynar_foreach (dyn,cpt,str) {
   printf("Seen %s\n",str);
 }
 \endcode
- * 
+ *
  * Note that underneath, that's a simple for loop with no real black  magic involved. It's perfectly safe to interrupt
  * a foreach with a break or a return statement.
  */
index ea18bc0..6e80198 100644 (file)
@@ -43,8 +43,7 @@ typedef std::vector<xbt_backtrace_location_t> Backtrace;
 class ThrowPoint {
  public:
   ThrowPoint() = default;
-  ThrowPoint(const char* file, int line, const char* function) :
-    file(file), line(line), function(function) {}
+  explicit ThrowPoint(const char* file, int line, const char* function) : file(file), line(line), function(function) {}
   const char* file = nullptr;
   int line = 0;
   const char* function = nullptr;
@@ -62,7 +61,7 @@ class ThrowPoint {
  *  You are not expected to inherit from it. Instead of you use should
  *  @ref XBT_THROW an exception which will throw a subclass of your original
  *  exception with those additional features.
- * 
+ *
  *  However, you can try `dynamic_cast` an exception to this type in order to
  *  get contextual information about the exception.
  */
diff --git a/include/xbt/lib.h b/include/xbt/lib.h
deleted file mode 100644 (file)
index 56a9007..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/* xbt/lib.h - api to a generic library                                     */
-
-/* Copyright (c) 2011, 2013-2014. 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. */
-
-#ifndef XBT_LIB_H
-#define XBT_LIB_H
-
-#include <xbt/dict.h>
-
-SG_BEGIN_DECL()
-
-/** Container for all the objects of a given type
- *
- *  * each item is identified by a string name/identifier;
- *
- *  * the lib itself is a dictionary from the element id to the element;
- *
- *  * the element itself is represented aby the xbt_dictelm_t;
- *
- *  * the element can store any number of associated facets/data structures (corresponding to the different layers of
- *    SimGrid or its extensions) in ((void**)dictelt->content)[level];
- *
- *  * each level is allocated in the lib with `xbt_lib_add_level`.
- *
- *  <pre>
- *  // Define a collection for the foo objects and two associated facets:
- *  typedef xbt_dictelm_t foo_t;
- *  xbt_lib_t foo_lib = xbt_lib_new();
- *  int BAR_FOO_LEVEL  = xbt_lib_add_level(foo_lib, free_bar);
- *  int AUTH_FOO_LEVEL = xbt_lib_add_level(foo_lib, free_auth);
- *
- *  // Store a bar:
- *  bar_t bar = bar_new();
- *  char* id = bar_name(bar);
- *  xbt_lib_set(id, id, BAR_FOO_LEVEL, bar);
- *
- *  // Find the corresponding foo and the facet again:
- *  foo_t foo = xbt_lib_get_elm_or_null(foo_lib, id);
- *  bar_t bar2 = (bar_t) xbt_lib_get_level(foo, BAR_FOO_LEVEL);
- *  assert(bar == bar2);
- *
- *  // Add authentication facet for the previous object:
- *  auth_t auth = auth_new();
- *  xbt_lib_set(foo_lib, id, AUTH_FOO_LEVEL, auth);
- *  </pre>
- */
-struct s_xbt_lib {
-  xbt_dict_t dict;
-  int levels;
-  void_f_pvoid_t *free_f;       /* This is actually a table */
-};
-typedef struct s_xbt_lib  s_xbt_lib_t;
-typedef struct s_xbt_lib* xbt_lib_t;
-
-#define xbt_lib_cursor_t xbt_dict_cursor_t
-
-XBT_PUBLIC(xbt_lib_t) xbt_lib_new(void);
-XBT_PUBLIC(void) xbt_lib_free(xbt_lib_t * lib);
-XBT_PUBLIC(int) xbt_lib_add_level(xbt_lib_t lib, void_f_pvoid_t free_f);
-XBT_PUBLIC(void) xbt_lib_set(xbt_lib_t lib, const char *name, int level, void *obj);
-XBT_PUBLIC(void) xbt_lib_unset(xbt_lib_t lib, const char *key, int level, int invoke_callback);
-XBT_PUBLIC(void *) xbt_lib_get_or_null(xbt_lib_t lib, const char *name, int level);
-XBT_PUBLIC(xbt_dictelm_t) xbt_lib_get_elm_or_null(xbt_lib_t lib, const char *key);
-XBT_PUBLIC(void *) xbt_lib_get_level(xbt_dictelm_t elm, int level);
-XBT_PUBLIC(void) xbt_lib_remove(xbt_lib_t lib, const char *key);
-
-#define xbt_lib_length(lib) xbt_dict_length((lib)->dict)
-
-/** @def xbt_lib_foreach
-    @hideinitializer */
-#define xbt_lib_foreach(lib, cursor, key, data)         \
-  xbt_dict_foreach((lib)->dict, cursor, key, data)
-
-SG_END_DECL()
-
-#endif                          /* _XBT_LIB_H */
index a6be428..be33e86 100644 (file)
 
 /** \defgroup XBT_log_cats Existing log categories
  *  \ingroup XBT_log
- *  \brief (automatically extracted) 
+ *  \brief (automatically extracted)
  *
  *  This is the list of all existing log categories in SimGrid.
  *  This list is automatically extracted from the source code by the tools/doxygen/xbt_log_extract_hierarchy.pl utility.
  *
- *  It should thus contain every categories that are defined in the SimGrid library. 
+ *  It should thus contain every categories that are defined in the SimGrid library.
  *  If you want to see the one defined in your code in addition, provide `--help-logs` on the command line of your simulator.
  */
 
@@ -150,14 +150,14 @@ typedef enum {
  * \param desc string describing the purpose of this category
  * \hideinitializer
  *
- * Defines a new subcategory of the parent. 
+ * Defines a new subcategory of the parent.
  */
 #define XBT_LOG_NEW_SUBCATEGORY(catName, parent, desc)    \
   XBT_LOG_EXTERNAL_CATEGORY(parent);                      \
   XBT_LOG_NEW_SUBCATEGORY_helper(catName, parent, desc)   \
 
 /**
- * \ingroup XBT_log  
+ * \ingroup XBT_log
  * \param catName name of new category
  * \param desc string describing the purpose of this category
  * \hideinitializer
@@ -168,7 +168,7 @@ typedef enum {
    XBT_LOG_NEW_SUBCATEGORY_helper(catName, XBT_LOG_ROOT_CAT, desc)
 
 /**
- * \ingroup XBT_log  
+ * \ingroup XBT_log
  * \param cname name of the cat
  * \hideinitializer
  *
@@ -183,7 +183,7 @@ typedef enum {
 #endif
 
 /**
- * \ingroup XBT_log  
+ * \ingroup XBT_log
  * \param cname name of the cat
  * \param desc string describing the purpose of this category
  * \hideinitializer
@@ -196,7 +196,7 @@ typedef enum {
     XBT_LOG_DEFAULT_CATEGORY(cname)
 
 /**
- * \ingroup XBT_log  
+ * \ingroup XBT_log
  * \param cname name of the cat
  * \param parent name of the parent
  * \param desc string describing the purpose of this category
@@ -210,7 +210,7 @@ typedef enum {
     XBT_LOG_DEFAULT_CATEGORY(cname)
 
 /**
- * \ingroup XBT_log  
+ * \ingroup XBT_log
  * \param cname name of the cat
  * \hideinitializer
  *
@@ -283,7 +283,7 @@ struct xbt_log_event_s {
 XBT_PUBLIC(void) xbt_log_threshold_set(xbt_log_category_t cat, e_xbt_log_priority_t thresholdPriority);
 
 /**
- * \ingroup XBT_log_implem  
+ * \ingroup XBT_log_implem
  * \param cat the category (not only its name, but the variable)
  * \param app the appender
  *
@@ -291,7 +291,7 @@ XBT_PUBLIC(void) xbt_log_threshold_set(xbt_log_category_t cat, e_xbt_log_priorit
  */
 XBT_PUBLIC(void) xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t app);
 /**
- * \ingroup XBT_log_implem  
+ * \ingroup XBT_log_implem
  * \param cat the category (not only its name, but the variable)
  * \param lay the layout
  *
@@ -300,7 +300,7 @@ XBT_PUBLIC(void) xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t
 XBT_PUBLIC(void) xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay);
 
 /**
- * \ingroup XBT_log_implem  
+ * \ingroup XBT_log_implem
  * \param cat the category (not only its name, but the variable)
  * \param additivity whether logging actions must be passed to parent.
  *
@@ -309,7 +309,7 @@ XBT_PUBLIC(void) xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay
  */
 XBT_PUBLIC(void) xbt_log_additivity_set(xbt_log_category_t cat, int additivity);
 
-/** @brief create a new simple layout 
+/** @brief create a new simple layout
  *
  * This layout is not as flexible as the pattern one
  */
@@ -343,7 +343,7 @@ extern xbt_log_layout_t xbt_log_default_layout;
 /* ********************** */
 
 /**
- * \ingroup XBT_log 
+ * \ingroup XBT_log
  * \param catName name of the category
  * \param priority minimal priority to be enabled to return true (must be #e_xbt_log_priority_t)
  * \hideinitializer
index e607e10..d0b0f36 100644 (file)
@@ -15,7 +15,7 @@ SG_BEGIN_DECL()
 
 /** @addtogroup XBT_mallocator
  *  @brief The mallocator system
- * 
+ *
  *  This section describes the API to a mallocator.
  *  A mallocator allows you to recycle the objects you don't need anymore  instead of freeing them. A mallocator is a
  *  stack which stores the unused objects  or a given type. If you often need to malloc() / free() objects of a certain
index 89a8434..905b12c 100644 (file)
@@ -16,7 +16,7 @@
 SG_BEGIN_DECL()
 
 /** \addtogroup XBT_parmap
-  * \ingroup XBT_misc  
+  * \ingroup XBT_misc
   * \brief Parallel map.
   *
   * A function is applied to all elements of a dynar in parallel with n worker threads.
index 9343ce6..cafddcb 100644 (file)
@@ -165,10 +165,7 @@ public:
     return data()[i];
   }
   // Conversion
-  operator std::string() const
-  {
-    return std::string(this->c_str(), this->size());
-  }
+  operator std::string() const { return std::string(this->c_str(), this->size()); }
 
   // Iterators
   iterator begin()               { return data(); }
index 5c1ff35..0f25e2b 100644 (file)
 
 SG_BEGIN_DECL()
 
-/** 
+/**
  * @addtogroup XBT_swag
  * @brief a O(1) set based on linked lists
- * 
+ *
  *  Warning, this module is done to be efficient and performs tons of cast and dirty things. So make sure you know what
  *  you are doing while using it.
  *  It is basically a fifo but with restrictions so that it can be used as a set. Any operation (add, remove, belongs)
@@ -29,7 +29,7 @@ SG_BEGIN_DECL()
 /** @defgroup XBT_swag_type Swag types
     @ingroup XBT_swag
 
-    Specific set. 
+    Specific set.
 
     These typedefs are public so that the compiler can do his job but believe me, you don't want to try to play with
     those structs directly. Use them as an abstract datatype.
@@ -39,7 +39,7 @@ typedef struct xbt_swag_hookup {
   void *next;
   void *prev;
 } s_xbt_swag_hookup_t;
-/**< This type should be added to a type that is to be used in a swag. 
+/**< This type should be added to a type that is to be used in a swag.
  *
  *  Whenever a new object with this struct is created, all fields have to be set to NULL
  *
@@ -78,9 +78,9 @@ typedef struct xbt_swag* xbt_swag_t;
 /**< A typical swag */
 /* @} */
 
-/** @defgroup XBT_swag_func SWAG functions 
+/** @defgroup XBT_swag_func SWAG functions
  *  @ingroup XBT_swag
+
  *  @{
  */
 
@@ -136,7 +136,7 @@ static inline void *xbt_swag_getFirst(xbt_swag_t swag)
  * \defgroup XBT_swag_curs Swag cursor
  * @ingroup XBT_swag
 
- * Iterates over the whole swag. 
+ * Iterates over the whole swag.
  *
  * @{ */
 
@@ -157,13 +157,13 @@ static inline void *xbt_swag_getFirst(xbt_swag_t swag)
        (obj)=(decltype(obj)) xbt_swag_getNext((obj),(swag)->offset))
 #endif
 /**
- * @brief A safe swag iterator 
+ * @brief A safe swag iterator
  * @param obj the indice of the loop
  * @param obj_next the object that is right after (if any) \a obj in the swag
  * @param swag what to iterate over
  * @hideinitializer
 
-    You can safely modify the \a swag while using this loop. 
+    You can safely modify the \a swag while using this loop.
     Well, safely... Err. You can remove \a obj without having any trouble at least.  */
 
 #ifndef __cplusplus
index 8890263..fa4c014 100644 (file)
@@ -17,10 +17,10 @@ typedef pthread_key_t xbt_os_thread_key_t;
 
 /** @addtogroup XBT_thread
  *  @brief Thread portability layer
- * 
+ *
  *  This section describes the thread portability layer. It defines types and functions very close to the pthread API,
  *  but it's portable to windows too.
- * 
+ *
  *  @{
  */
 
index 47f33be..e7b2c24 100644 (file)
@@ -13,7 +13,7 @@
 
 SG_BEGIN_DECL()
 
-/** @brief get time in seconds 
+/** @brief get time in seconds
  *
  * gives  the  number  of  seconds since the Epoch (00:00:00 UTC, January 1, 1970).
  */
index abb1bac..b732649 100644 (file)
@@ -90,10 +90,7 @@ static void __JAVA_host_priv_free(void *host)
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_init(JNIEnv * env, jclass cls, jobjectArray jargs)
 {
-  int index;
   int argc = 0;
-  jstring jval;
-  const char *tmp;
 
   XBT_LOG_CONNECT(java);
   XBT_LOG_CONNECT(jtrace);
@@ -115,9 +112,9 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_init(JNIEnv * env, jclass cls, j
   char** argv = new char*[argc + 1];
   argv[0] = xbt_strdup("java");
 
-  for (index = 0; index < argc - 1; index++) {
-    jval = (jstring) env->GetObjectArrayElement(jargs, index);
-    tmp = env->GetStringUTFChars(jval, 0);
+  for (int index = 0; index < argc - 1; index++) {
+    jstring jval    = (jstring)env->GetObjectArrayElement(jargs, index);
+    const char* tmp = env->GetStringUTFChars(jval, 0);
     argv[index + 1] = xbt_strdup(tmp);
     env->ReleaseStringUTFChars(jval, tmp);
   }
@@ -127,7 +124,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_init(JNIEnv * env, jclass cls, j
 
   JAVA_HOST_LEVEL = simgrid::s4u::Host::extension_create(__JAVA_host_priv_free);
 
-  for (index = 0; index < argc - 1; index++) {
+  for (int index = 0; index < argc - 1; index++) {
     env->SetObjectArrayElement(jargs, index, (jstring)env->NewStringUTF(argv[index + 1]));
     free(argv[index]);
   }
index 34ba2a2..c0e7e2d 100644 (file)
@@ -23,7 +23,7 @@ SG_BEGIN_DECL()
 /* end of eclipse-mandated pimple */
 
 extern int JAVA_HOST_LEVEL;
-static std::unordered_map<char*, jobject> java_storage_map;
+static std::unordered_map<msg_storage_t, jobject> java_storage_map;
 
 JavaVM *get_java_VM();
 JNIEnv *get_current_thread_env();
index 2cf5b28..3f41bfd 100644 (file)
@@ -141,7 +141,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Host_on(JNIEnv *env, jobject jhost)
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Host_off(JNIEnv *env, jobject jhost) {
   msg_host_t host = jhost_get_native(env, jhost);
-  MSG_host_off(host); 
+  MSG_host_off(host);
 }
 
 JNIEXPORT jint JNICALL Java_org_simgrid_msg_Host_getCount(JNIEnv * env, jclass cls) {
@@ -336,6 +336,11 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Host_setAsyncMailbox(JNIEnv * env, j
   env->ReleaseStringUTFChars((jstring) jname, name);
 }
 
+JNIEXPORT void JNICALL Java_org_simgrid_msg_Host_updateAllEnergyConsumptions(JNIEnv* env, jclass cls)
+{
+  sg_host_energy_update_all();
+}
+
 JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getConsumedEnergy (JNIEnv *env, jobject jhost)
 {
   msg_host_t host = jhost_get_native(env, jhost);
index ebbc41e..0b9ed50 100644 (file)
@@ -59,6 +59,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_getStorageContent(JNIEn
 JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_all(JNIEnv *env, jclass cls);
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Host_setAsyncMailbox(JNIEnv * env, jclass cls_arg, jobject jname);
 
+JNIEXPORT void JNICALL Java_org_simgrid_msg_Host_updateAllEnergyConsumptions(JNIEnv* env, jclass cls);
 JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getConsumedEnergy (JNIEnv *env, jobject jhost);
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Host_setPstate(JNIEnv* env, jobject jhost, jint pstate);
index e38230c..2d3a029 100644 (file)
@@ -69,7 +69,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Storage_getByName(JNIEnv * env, j
   }
   env->ReleaseStringUTFChars(jname, name);
 
-  if (java_storage_map.find(storage->key) == java_storage_map.end()) {
+  if (java_storage_map.find(storage) == java_storage_map.end()) {
     /* Instantiate a new java storage */
     jstorage = jstorage_new_instance(env);
 
@@ -93,9 +93,9 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Storage_getByName(JNIEnv * env, j
     /* the native storage data field is set with the global reference to the
      * java storage returned by this function
      */
-    java_storage_map.insert({storage->key, jstorage});
+    java_storage_map.insert({storage, jstorage});
   } else
-    jstorage = java_storage_map.at(storage->key);
+    jstorage = java_storage_map.at(storage);
 
   /* return the global reference to the java storage instance */
   return (jobject)jstorage;
@@ -215,8 +215,8 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Storage_all(JNIEnv * env, jc
 
   for (index = 0; index < count; index++) {
     storage = xbt_dynar_get_as(table,index,msg_storage_t);
-    if (java_storage_map.find(storage->key) != java_storage_map.end()) {
-      jstorage = java_storage_map.at(storage->key);
+    if (java_storage_map.find(storage) != java_storage_map.end()) {
+      jstorage = java_storage_map.at(storage);
     } else {
       jname = env->NewStringUTF(MSG_storage_get_name(storage));
       jstorage = Java_org_simgrid_msg_Storage_getByName(env, cls_arg, jname);
index 26c64da..c33ba63 100644 (file)
@@ -25,7 +25,7 @@ SG_BEGIN_DECL()
 JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostStateDeclare(JNIEnv * env, jclass cls, jstring js)
 {
   const char *s = env->GetStringUTFChars(js, 0);
-  TRACE_host_state_declare(s);  
+  TRACE_host_state_declare(s);
   env->ReleaseStringUTFChars(js, s);
 }
 
@@ -36,7 +36,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostStateDeclareValue (JNIEn
   const char *value = env->GetStringUTFChars(js_value, 0);
   const char *color = env->GetStringUTFChars(js_color, 0);
 
-  TRACE_host_state_declare_value(state, value, color);  
+  TRACE_host_state_declare_value(state, value, color);
 
   env->ReleaseStringUTFChars(js_state, state);
   env->ReleaseStringUTFChars(js_value, value);
@@ -50,7 +50,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostSetState (JNIEnv *env, j
   const char *state = env->GetStringUTFChars(js_state, 0);
   const char *value = env->GetStringUTFChars(js_value, 0);
 
-  TRACE_host_set_state(host, state, value);  
+  TRACE_host_set_state(host, state, value);
 
   env->ReleaseStringUTFChars(js_host, host);
   env->ReleaseStringUTFChars(js_state, state);
@@ -64,7 +64,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostPushState (JNIEnv *env,
   const char *state = env->GetStringUTFChars(js_state, 0);
   const char *value = env->GetStringUTFChars(js_value, 0);
 
-  TRACE_host_push_state(host, state, value);  
+  TRACE_host_push_state(host, state, value);
 
   env->ReleaseStringUTFChars(js_host, host);
   env->ReleaseStringUTFChars(js_state, state);
@@ -77,7 +77,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostPopState (JNIEnv *env, j
   const char *host = env->GetStringUTFChars(js_host, 0);
   const char *state = env->GetStringUTFChars(js_state, 0);
 
-  TRACE_host_pop_state(host, state);  
+  TRACE_host_pop_state(host, state);
 
   env->ReleaseStringUTFChars(js_host, host);
   env->ReleaseStringUTFChars(js_state, state);
index 9165a10..a5f32b1 100644 (file)
@@ -1,7 +1,6 @@
 /* Bindings to the MSG hosts */
 
-/* Copyright (c) 2006-2014. 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. */
@@ -133,7 +132,16 @@ public class Host {
        /** This methods returns the list of storages (names) attached to an host */
        public native String[] getAttachedStorage();
 
-       /** Returns the amount of Joules consumed by that host so far */
+       /** After this call, sg_host_get_consumed_energy() will not interrupt your process
+        * (until after the