Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'energy-pstate' of https://github.com/Takishipp/simgrid into Takishipp...
authorMartin Quinson <martin.quinson@loria.fr>
Sat, 2 Dec 2017 21:01:28 +0000 (22:01 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Sat, 2 Dec 2017 21:10:10 +0000 (22:10 +0100)
187 files changed:
.gitignore
CMakeLists.txt
ChangeLog
FindSimGrid.cmake
examples/msg/CMakeLists.txt
examples/msg/README.doc
examples/msg/app-chainsend/app-chainsend.tesh
examples/msg/app-masterworker/app-masterworker-multicore.tesh
examples/msg/app-masterworker/app-masterworker-vivaldi.tesh
examples/msg/app-masterworker/app-masterworker.tesh
examples/msg/app-pingpong/app-pingpong.tesh
examples/msg/app-token-ring/app-token-ring.tesh
examples/msg/cloud-capping/cloud-capping.tesh
examples/msg/cloud-masterworker/cloud-masterworker.tesh
examples/msg/cloud-migration/cloud-migration.tesh
examples/msg/cloud-simple/cloud-simple.tesh
examples/msg/cloud-two-tasks/cloud-two-tasks.tesh
examples/msg/dht-kademlia/dht-kademlia.tesh
examples/msg/dht-pastry/dht-pastry.tesh
examples/msg/energy-consumption/energy-consumption.tesh
examples/msg/energy-onoff/energy-onoff.tesh
examples/msg/energy-pstate/energy-pstate.tesh
examples/msg/energy-vm/energy-vm.tesh
examples/msg/io-file/io-file.tesh
examples/msg/io-remote/io-remote.c
examples/msg/io-remote/io-remote.tesh
examples/msg/io-storage/io-storage.c [deleted file]
examples/msg/io-storage/io-storage.tesh [deleted file]
examples/msg/network-ns3/network-ns3.tesh
examples/msg/platform-failures/platform-failures.tesh
examples/msg/platform-properties/platform-properties.tesh
examples/msg/plugin-hostload/plugin-hostload.tesh
examples/msg/process-create/process-create.tesh
examples/msg/process-join/process-join.tesh
examples/msg/process-startkilltime/process-startkilltime.tesh
examples/msg/synchro-semaphore/synchro-semaphore.tesh
examples/msg/task-priority/task-priority.tesh
examples/msg/trace-categories/trace-categories.tesh
examples/msg/trace-host-user-variables/trace-host-user-variables.tesh
examples/msg/trace-link-user-variables/trace-link-user-variables.tesh
examples/msg/trace-masterworker/trace-masterworker.tesh
examples/msg/trace-platform/trace-platform.tesh
examples/msg/trace-process-migration/trace-process-migration.tesh
examples/msg/trace-route-user-variables/trace-route-user-variables.tesh
examples/s4u/CMakeLists.txt
examples/s4u/README.doc
examples/s4u/actions-comm/s4u-actions-comm.tesh
examples/s4u/actions-storage/s4u-actions-storage.cpp
examples/s4u/actions-storage/s4u-actions-storage.tesh
examples/s4u/actor-daemon/s4u-actor-daemon.tesh
examples/s4u/actor-execute/s4u-actor-execute.tesh
examples/s4u/actor-kill/s4u-actor-kill.cpp
examples/s4u/actor-kill/s4u-actor-kill.tesh
examples/s4u/actor-lifetime/s4u-actor-lifetime.tesh
examples/s4u/actor-migration/s4u-actor-migration.tesh
examples/s4u/actor-priority/s4u-actor-priority.tesh
examples/s4u/actor-suspend/s4u-actor-suspend.tesh
examples/s4u/actor-yield/s4u-actor-yield.tesh
examples/s4u/app-bittorrent/s4u-app-bittorrent.tesh
examples/s4u/app-masterworker/s4u-app-masterworker.tesh
examples/s4u/app-pingpong/s4u-app-pingpong.tesh
examples/s4u/app-token-ring/s4u-app-token-ring.tesh
examples/s4u/async-wait/s4u-async-wait.tesh
examples/s4u/async-waitall/s4u-async-waitall.tesh
examples/s4u/async-waitany/s4u-async-waitany.tesh
examples/s4u/dht-chord/s4u-dht-chord.tesh
examples/s4u/energy-link/s4u-energy-link.tesh
examples/s4u/energy-pstate/s4u-energy-pstate.tesh
examples/s4u/energy-ptask/s4u-energy-ptask.cpp [new file with mode: 0644]
examples/s4u/energy-ptask/s4u-energy-ptask.tesh [new file with mode: 0644]
examples/s4u/io-file-remote/s4u-io-file-remote.cpp [new file with mode: 0644]
examples/s4u/io-file-remote/s4u-io-file-remote.tesh [new file with mode: 0644]
examples/s4u/io-file-remote/s4u-io-file-remote_d.xml [new file with mode: 0644]
examples/s4u/io-storage-raw/s4u-io-storage-raw.cpp [new file with mode: 0644]
examples/s4u/io-storage-raw/s4u-io-storage-raw.tesh [new file with mode: 0644]
examples/s4u/io/s4u-io.cpp
examples/s4u/platform-properties/s4u-platform-properties.cpp [new file with mode: 0644]
examples/s4u/platform-properties/s4u-platform-properties.tesh [new file with mode: 0644]
examples/s4u/platform-properties/s4u-platform-properties_d.xml [new file with mode: 0644]
examples/s4u/plugin-hostload/s4u-plugin-hostload.tesh
examples/smpi/smpi_msg_masterslave/msg_smpi.tesh
include/simgrid/forward.h
include/simgrid/msg.h
include/simgrid/plugins/file_system.h
include/simgrid/s4u.hpp
include/simgrid/s4u/Actor.hpp
include/simgrid/s4u/Storage.hpp
src/bindings/java/jmsg_file.h
src/bindings/java/jmsg_host.h
src/bindings/java/jmsg_storage.cpp
src/include/surf/datatypes.hpp [deleted file]
src/include/surf/surf.hpp
src/kernel/context/ContextThread.cpp
src/kernel/lmm/fair_bottleneck.cpp
src/kernel/lmm/lagrange.cpp
src/kernel/lmm/maxmin.cpp
src/kernel/lmm/maxmin.hpp [moved from src/include/surf/maxmin.hpp with 73% similarity]
src/msg/msg_global.cpp
src/msg/msg_host.cpp
src/msg/msg_io.cpp
src/msg/msg_private.hpp
src/plugins/file_system/FileSystem.hpp [moved from include/simgrid/s4u/File.hpp with 69% similarity]
src/plugins/file_system/s4u_FileSystem.cpp [new file with mode: 0644]
src/plugins/vm/VirtualMachineImpl.cpp
src/s4u/s4u_actor.cpp
src/s4u/s4u_file.cpp [deleted file]
src/s4u/s4u_link.cpp
src/s4u/s4u_storage.cpp
src/simgrid/sg_config.cpp
src/simix/ActorImpl.cpp
src/smpi/bindings/smpi_pmpi_coll.cpp
src/smpi/bindings/smpi_pmpi_request.cpp
src/smpi/bindings/smpi_pmpi_win.cpp
src/smpi/include/smpi_datatype.hpp
src/smpi/internals/smpi_replay.cpp
src/smpi/mpi/smpi_datatype.cpp
src/surf/StorageImpl.cpp
src/surf/StorageImpl.hpp
src/surf/cpu_cas01.cpp
src/surf/cpu_interface.hpp
src/surf/network_cm02.cpp
src/surf/network_ib.cpp
src/surf/network_interface.hpp
src/surf/ptask_L07.cpp
src/surf/storage_n11.cpp
teshsuite/msg/CMakeLists.txt
teshsuite/msg/actions-comm/actions-comm.tesh
teshsuite/msg/actions-storage/actions-storage.tesh
teshsuite/msg/app-bittorrent/app-bittorrent.tesh
teshsuite/msg/async-wait/async-wait.c [moved from examples/msg/async-wait/async-wait.c with 62% similarity]
teshsuite/msg/async-wait/async-wait.tesh [moved from examples/msg/async-wait/async-wait.tesh with 88% similarity]
teshsuite/msg/async-wait/async-wait2_d.xml [moved from examples/msg/async-wait/async-wait2_d.xml with 100% similarity]
teshsuite/msg/async-wait/async-wait3_d.xml [moved from examples/msg/async-wait/async-wait3_d.xml with 100% similarity]
teshsuite/msg/async-wait/async-wait4_d.xml [moved from examples/msg/async-wait/async-wait4_d.xml with 100% similarity]
teshsuite/msg/async-wait/async-wait_d.xml [moved from examples/msg/async-wait/async-wait_d.xml with 100% similarity]
teshsuite/msg/async-waitall/async-waitall.c [moved from examples/msg/async-waitall/async-waitall.c with 71% similarity]
teshsuite/msg/async-waitall/async-waitall.tesh [moved from examples/msg/async-waitall/async-waitall.tesh with 86% similarity]
teshsuite/msg/async-waitall/async-waitall_d.xml [moved from examples/msg/async-waitall/async-waitall_d.xml with 100% similarity]
teshsuite/msg/async-waitany/async-waitany.c [moved from examples/msg/async-waitany/async-waitany.c with 72% similarity]
teshsuite/msg/async-waitany/async-waitany.tesh [moved from examples/msg/async-waitany/async-waitany.tesh with 91% similarity]
teshsuite/msg/async-waitany/async-waitany_d.xml [moved from examples/msg/async-waitany/async-waitany_d.xml with 100% similarity]
teshsuite/msg/cloud-sharing/cloud-sharing.tesh
teshsuite/msg/energy-ptask/energy-ptask.c [moved from examples/msg/energy-ptask/energy-ptask.c with 75% similarity]
teshsuite/msg/energy-ptask/energy-ptask.tesh [moved from examples/msg/energy-ptask/energy-ptask.tesh with 88% similarity]
teshsuite/msg/get_sender/get_sender.tesh
teshsuite/msg/host_on_off/host_on_off.tesh
teshsuite/msg/host_on_off_processes/host_on_off_processes.tesh
teshsuite/msg/host_on_off_recv/host_on_off_recv.tesh
teshsuite/msg/io-raw-storage/io-raw-storage.c [new file with mode: 0644]
teshsuite/msg/io-raw-storage/io-raw-storage.tesh [new file with mode: 0644]
teshsuite/msg/process-daemon/process-daemon.c [moved from examples/msg/process-daemon/process-daemon.c with 100% similarity]
teshsuite/msg/process-daemon/process-daemon.tesh [moved from examples/msg/process-daemon/process-daemon.tesh with 79% similarity]
teshsuite/msg/process-kill/process-kill.c [moved from examples/msg/process-kill/process-kill.c with 62% similarity]
teshsuite/msg/process-kill/process-kill.tesh [moved from examples/msg/process-kill/process-kill.tesh with 58% similarity]
teshsuite/msg/process-migration/process-migration.c [moved from examples/msg/process-migration/process-migration.c with 84% similarity]
teshsuite/msg/process-migration/process-migration.tesh [moved from examples/msg/process-migration/process-migration.tesh with 83% similarity]
teshsuite/msg/process-suspend/process-suspend.c [moved from examples/msg/process-suspend/process-suspend.c with 75% similarity]
teshsuite/msg/process-suspend/process-suspend.tesh [moved from examples/msg/process-suspend/process-suspend.tesh with 92% similarity]
teshsuite/msg/process-yield/process-yield.tesh
teshsuite/msg/task_destroy_cancel/task_destroy_cancel.tesh
teshsuite/msg/task_listen_from/task_listen_from.tesh
teshsuite/msg/task_progress/task_progress.tesh
teshsuite/msg/trace_integration/trace_integration.tesh
teshsuite/s4u/CMakeLists.txt
teshsuite/s4u/actor/actor.tesh
teshsuite/s4u/concurrent_rw/concurrent_rw.tesh
teshsuite/s4u/host_on_off_wait/host_on_off_wait.tesh
teshsuite/s4u/listen_async/listen_async.tesh
teshsuite/s4u/pid/pid.tesh
teshsuite/s4u/storage_client_server/storage_client_server.cpp
teshsuite/s4u/storage_client_server/storage_client_server.tesh
teshsuite/smpi/CMakeLists.txt
teshsuite/smpi/mpich3-test/rma/CMakeLists.txt
teshsuite/smpi/mpich3-test/rma/rget-testall.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/testlist
teshsuite/smpi/type-vector/type-vector.tesh
teshsuite/surf/CMakeLists.txt
teshsuite/surf/lmm_usage/lmm_usage.cpp
teshsuite/surf/maxmin_bench/maxmin_bench.cpp
teshsuite/surf/maxmin_bench/maxmin_bench_medium.tesh
teshsuite/surf/maxmin_bench/maxmin_bench_small.tesh
teshsuite/surf/surf_usage/surf_usage.tesh
teshsuite/surf/surf_usage2/surf_usage2.tesh
tools/cmake/DefinePackages.cmake
tools/cmake/GCCFlags.cmake
tools/cmake/Java.cmake
tools/jenkins/build.sh

index f9fd051..38cb127 100644 (file)
@@ -121,9 +121,6 @@ doc/msg-tuto-src/masterworker1
 doc/msg-tuto-src/masterworker2
 doc/msg-tuto-src/masterworker3
 doc/msg-tuto-src/masterworker4
-examples/msg/async-wait/async-wait
-examples/msg/async-waitall/async-waitall
-examples/msg/async-waitany/async-waitany
 examples/msg/app-chainsend/chainsend
 examples/msg/cloud-capping/cloud-capping
 examples/msg/cloud-masterworker/cloud-masterworker
@@ -137,7 +134,6 @@ examples/msg/dht-pastry/dht-pastry
 examples/msg/energy-consumption/energy-consumption
 examples/msg/energy-onoff/energy-onoff
 examples/msg/energy-pstate/energy-pstate
-examples/msg/energy-ptask/energy-ptask
 examples/msg/energy-vm/energy-vm
 examples/msg/io-file/io-file
 examples/msg/io-file-unlink/io-file-unlink
@@ -146,12 +142,9 @@ examples/msg/io-storage/io-storage
 examples/msg/platform-failures/platform-failures
 examples/msg/plugin-hostload/plugin-hostload
 examples/msg/process-create/process-create
-examples/msg/process-daemon/process-daemon
 examples/msg/process-kill/process-kill
 examples/msg/process-join/process-join
-examples/msg/process-migration/process-migration
 examples/msg/process-startkilltime/process-startkilltime
-examples/msg/process-suspend/process-suspend
 examples/msg/app-masterworker/app-masterworker
 examples/msg/mc/bugged1
 examples/msg/mc/bugged1_liveness
@@ -210,6 +203,7 @@ examples/s4u/basic/s4u-basic_deployment
 examples/s4u/basic/s4u-basic_function
 examples/s4u/dht-chord/s4u-dht-chord
 examples/s4u/energy-link/s4u-energy-link
+examples/s4u/energy-ptask/s4u-energy-ptask
 examples/s4u/io/s4u-io
 examples/s4u/mutex/s4u-mutex
 examples/s4u/plugin-hostload/s4u-plugin-hostload
@@ -263,8 +257,12 @@ teshsuite/mc/mutex-handling/without-mutex-handling
 teshsuite/msg/actions-comm/actions-comm
 teshsuite/msg/actions-storage/actions-storage
 teshsuite/msg/app-bittorrent/bittorrent
+teshsuite/msg/async-wait/async-wait
+teshsuite/msg/async-waitall/async-waitall
+teshsuite/msg/async-waitany/async-waitany
 teshsuite/msg/cloud-sharing/cloud-sharing
 teshsuite/msg/concurrent_rw/concurrent_rw
+teshsuite/msg/energy-ptask/energy-ptask
 teshsuite/msg/get_sender/get_sender
 teshsuite/msg/host_on_off/host_on_off
 teshsuite/msg/host_on_off_processes/host_on_off_processes
@@ -273,6 +271,9 @@ teshsuite/msg/host_on_off_wait/host_on_off_wait
 teshsuite/msg/listen_async/listen_async
 teshsuite/msg/pid/pid
 teshsuite/msg/process/process
+teshsuite/msg/process-daemon/process-daemon
+teshsuite/msg/process-migration/process-migration
+teshsuite/msg/process-suspend/process-suspend
 teshsuite/msg/process-yield/process-yield
 teshsuite/msg/storage_client_server/storage_client_server
 teshsuite/msg/task_destroy_cancel/task_destroy_cancel
index 58b548b..b2faaf2 100644 (file)
@@ -205,7 +205,7 @@ IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
   if (WIN32)
     message(STATUS "Disable fast raw contexts on Windows.")
   elseif(enable_address_sanitizer)
-    message("Disable fast raw contexts with ASan")
+    message(STATUS "Disable fast raw contexts with ASan")
   else()
     set(HAVE_RAW_CONTEXTS 1)
   endif()
@@ -254,9 +254,9 @@ endif()
 # Not finding this is perfectly OK
 find_package(Boost COMPONENTS unit_test_framework)
 if (Boost_UNIT_TEST_FRAMEWORK_FOUND)
-  message("--   (enabling the Boost-based unit tests)")
+  message(STATUS "Enabling the Boost-based unit tests.")
 else()
-  message("--   (disabling the Boost-based unit tests -- please install libboost-test-dev)")
+  message(STATUS "Disabling the Boost-based unit tests -- please install libboost-test-dev.")
 endif()
 
 
@@ -274,7 +274,7 @@ endif()
 find_package(Boost COMPONENTS context)
 set(Boost_FOUND 1) # This component is optional
 if(Boost_CONTEXT_FOUND)
-  message("Found Boost.Context")
+  message(STATUS "Found Boost.Context")
   set(HAVE_BOOST_CONTEXTS 1)
 else()
   message ("   boost        : found.")
@@ -565,17 +565,17 @@ if(CMAKE_USE_PTHREADS_INIT)
   endif()
 
   set(HAVE_THREAD_CONTEXTS 1)
-  message("-- Support for thread context factory ok.")
+  message(STATUS "Support for thread context factory ok.")
 endif()
 
 set(HAVE_UCONTEXT_CONTEXTS 0)
 if(NOT HAVE_UCONTEXT_H)
-  message("-- No ucontext factory: <ucontext.h> not found.")
+  message(STATUS "No ucontext factory: <ucontext.h> not found.")
 elseif(APPLE)
-  message("-- No ucontext factory: Apple don't want us to use them.")
+  message(STATUS "No ucontext factory: Apple don't want us to use them.")
   set(HAVE_UCONTEXT_H 0)
 elseif(enable_address_sanitizer)
-  message("-- No ucontext factory: ASan does not support it (see http://code.google.com/p/address-sanitizer/issues/detail?id=189)")
+  message(STATUS "No ucontext factory: ASan does not support it (see http://code.google.com/p/address-sanitizer/issues/detail?id=189)")
 else()
   try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
     OUTPUT_VARIABLE compile_makecontext_output)
@@ -583,10 +583,10 @@ else()
   #If can have both context
   if(compile_makecontext)
     set(HAVE_UCONTEXT_CONTEXTS 1)
-    message("-- Support for ucontext factory ok.")
+    message(STATUS "Support for ucontext factory ok.")
   else()
-    message("-- Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
-    message("-- No ucontext factory: makecontext() is not compilable.")
+    message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
+    message(STATUS "No ucontext factory: makecontext() is not compilable.")
   endif()
 
   # Stack setup (size and address)
index eb74d9a..22c53c2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,12 +1,12 @@
 SimGrid (3.18) NOT RELEASED YET (target: December 24 2017)
 
  S4U
- - Link::name() is deprecated and will be removed in v3.21, use instead
-   Link::getCname().
- - Mailbox::getName() changed to return a std::string, use instead
-   Mailbox::getCname() to get a char*.
- - Storage::getName() changed to return a std::string, use intead
-   Storage::getCname() to get a char*.
+ - Link::name() is deprecated and will be removed in v3.21, use
+   Link::getCname() instead.
+ - Mailbox::getName() changed to return a std::string, use
+   Mailbox::getCname() instead to get a char*.
+ - Storage::getName() changed to return a std::string, use
+   Storage::getCname() instead to get a char*.
 
  MSG
  - Deprecate MSG_task_get_flops_amount(). Its semantic was weird:
@@ -25,6 +25,14 @@ SimGrid (3.18) NOT RELEASED YET (target: December 24 2017)
 
  PLUGINS:
  - New link_energy plugin for the consumption of the links.
+ - All of the operations on files and storage contents have been
+   packaged into a plugin (src/plugins/file_system). The current
+   public interface can be found in 
+   include/simgrid/plugins/file_system.h
+   To use these functions you now have to initialize the plugin by 
+   calling MSG_storage_file_system_init() just after calling 
+   MSG_init() or sg_storage_file_system_init() just after creating 
+   the Engine.
 
  XML
  - Remove the undocumented/untested tag <include>
@@ -32,6 +40,9 @@ SimGrid (3.18) NOT RELEASED YET (target: December 24 2017)
  TRACE
  - Remove viva specific tracing as the tool is no longer maintained
 
+ Fixed bugs:
+ - #248: Kill of finished MSG processes leads to segfault
+
 SimGrid (3.17) Released October 8 2017
 
  The Drained Leaks release: (almost) no known leaks despite the tests.
index e92af15..8a79cdf 100644 (file)
@@ -55,6 +55,6 @@ if ("${_SimGrid_CONFIG_H_CONTENTS}" MATCHES "${_SimGrid_VERSION_REGEX}")
 endif ("${_SimGrid_CONFIG_H_CONTENTS}" MATCHES "${_SimGrid_VERSION_REGEX}")
   
 
-message("-- SimGrid found in ${SimGrid_PATH} (version ${SimGrid_VERSION})")
+message(STATUS "SimGrid found in ${SimGrid_PATH} (version ${SimGrid_VERSION})")
 
 
index d55fb5c..b525bb8 100644 (file)
@@ -1,10 +1,10 @@
 # C examples
-foreach(x app-masterworker app-pingpong app-token-ring async-wait async-waitall 
-          async-waitany cloud-capping cloud-masterworker cloud-migration cloud-simple cloud-two-tasks
-          dht-pastry energy-consumption energy-onoff energy-pstate energy-ptask energy-vm platform-failures 
-          io-file io-remote io-storage task-priority 
-          plugin-hostload 
-         process-create process-daemon process-join process-kill process-migration process-suspend 
+foreach(x app-masterworker app-pingpong app-token-ring 
+          cloud-capping cloud-masterworker cloud-migration cloud-simple cloud-two-tasks
+          dht-pastry energy-consumption energy-onoff energy-pstate energy-vm platform-failures 
+          io-file io-remote task-priority 
+          plugin-hostload
+          process-create process-join
           platform-properties process-startkilltime synchro-semaphore trace-categories 
           trace-route-user-variables trace-link-user-variables trace-masterworker trace-platform 
           trace-process-migration trace-host-user-variables)
@@ -44,8 +44,7 @@ foreach (file answer dht-kademlia node routing_table task)
   set(examples_src  ${examples_src}  ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/${file}.c  ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/${file}.h)
 endforeach()
 
-foreach (file app-chainsend app-masterworker app-pingpong async-wait
-         async-waitall async-waitany dht-kademlia dht-pastry io-remote platform-properties 
+foreach (file app-chainsend app-masterworker app-pingpong dht-kademlia dht-pastry io-remote platform-properties 
          task-priority)
   set(xml_files    ${xml_files}     ${CMAKE_CURRENT_SOURCE_DIR}/${file}/${file}_d.xml)
 endforeach()
@@ -63,9 +62,6 @@ set(tesh_files   ${tesh_files}    ${CMAKE_CURRENT_SOURCE_DIR}/app-chainsend/app-
                                   ${CMAKE_CURRENT_SOURCE_DIR}/network-ns3/network-ns3.tesh                 PARENT_SCOPE)
 set(xml_files    ${xml_files}     ${CMAKE_CURRENT_SOURCE_DIR}/app-masterworker/app-masterworker-multicore_d.xml
                                   ${CMAKE_CURRENT_SOURCE_DIR}/app-masterworker/app-masterworker-vivaldi_d.xml
-                                  ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/async-wait2_d.xml
-                                  ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/async-wait3_d.xml
-                                  ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/async-wait4_d.xml
                                   ${CMAKE_CURRENT_SOURCE_DIR}/energy-onoff/platform_onoff.xml
                                   ${CMAKE_CURRENT_SOURCE_DIR}/network-ns3/3hosts_2links_d.xml
                                   ${CMAKE_CURRENT_SOURCE_DIR}/network-ns3/3links-timer_d.xml
@@ -81,34 +77,48 @@ set(xml_files    ${xml_files}     ${CMAKE_CURRENT_SOURCE_DIR}/app-masterworker/a
                                   ${CMAKE_CURRENT_SOURCE_DIR}/process-startkilltime/start_kill_d.xml       PARENT_SCOPE)
 
 foreach(x app-chainsend app-masterworker app-pingpong app-token-ring
-          async-wait async-waitall async-waitany cloud-capping cloud-masterworker cloud-migration cloud-simple 
-          cloud-two-tasks dht-pastry dht-kademlia platform-failures io-file io-remote io-storage task-priority 
-          process-create process-daemon process-join process-kill process-migration process-startkilltime process-suspend 
-         platform-properties synchro-semaphore)
-  ADD_TESH_FACTORIES(msg-${x} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/${x} ${x}.tesh)
+          cloud-capping cloud-masterworker cloud-migration cloud-simple 
+          cloud-two-tasks dht-pastry dht-kademlia platform-failures io-file io-remote task-priority
+         energy-consumption energy-onoff energy-pstate energy-vm
+         plugin-hostload
+          process-create process-join process-startkilltime
+          platform-properties synchro-semaphore)
+  ADD_TESH_FACTORIES(msg-${x} "thread;ucontext;raw;boost" 
+                              --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/${x}
+                             --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/${x} 
+                             --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms 
+                             ${CMAKE_HOME_DIRECTORY}/examples/msg/${x}/${x}.tesh)
 endforeach()
 
-foreach (example consumption onoff pstate vm)
-  ADD_TESH_FACTORIES(msg-energy-${example} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy-${example}/energy-${example}.tesh)
+foreach (x trace-categories trace-route-user-variables trace-link-user-variables trace-masterworker trace-platform trace-process-migration trace-host-user-variables)
+  ADD_TESH(msg-${x} --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/${x}
+                   --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/${x} 
+                   --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms 
+                   ${CMAKE_HOME_DIRECTORY}/examples/msg/${x}/${x}.tesh)
 endforeach()
 
-foreach (x categories route-user-variables link-user-variables masterworker platform process-migration host-user-variables)
-  ADD_TESH(msg-trace-${x} --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/trace-${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/trace-${x} trace-${x}.tesh)
-endforeach()
+ADD_TESH_FACTORIES(msg-dht-kademlia-parallel "thread;ucontext;raw;boost" --cfg contexts/nthreads:4 ${CONTEXTS_SYNCHRO} 
+                                             --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/dht-kademlia 
+                                            --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/dht-kademlia
+                                            --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms
+                                            ${CMAKE_HOME_DIRECTORY}/examples/msg/dht-kademlia/dht-kademlia.tesh)
 
-ADD_TESH_FACTORIES(msg-dht-kademlia-parallel           "thread;ucontext;raw;boost" --cfg contexts/nthreads:4 ${CONTEXTS_SYNCHRO} --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/dht-kademlia --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/dht-kademlia dht-kademlia.tesh)
-ADD_TESH_FACTORIES(msg-energy-pstate-ptask             "thread;ucontext;raw;boost" --cfg host/model:ptask_L07 --log xbt_cfg.threshold:critical --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy-pstate/energy-pstate.tesh)
-ADD_TESH_FACTORIES(msg-energy-consumption-ptask        "thread;ucontext;raw;boost" --cfg host/model:ptask_L07 --log xbt_cfg.threshold:critical --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy-consumption/energy-consumption.tesh)
-ADD_TESH_FACTORIES(msg-energy-ptask                    "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy-ptask/energy-ptask.tesh)
-ADD_TESH_FACTORIES(msg-plugin-hostload "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/ ${CMAKE_HOME_DIRECTORY}/examples/msg/plugin-hostload/plugin-hostload.tesh)
 if(NOT WIN32)
-  ADD_TESH_FACTORIES(msg-maestro-set                     "thread" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/maestro-set/maestro-set.tesh)
+  ADD_TESH_FACTORIES(msg-maestro-set   "thread" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/maestro-set/maestro-set.tesh)
 else()
   message("Test maestro-set disabled on windows: this feature is not working")
 endif()
 
-ADD_TESH_FACTORIES(app-masterworker-multicore   "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/app-masterworker/app-masterworker-multicore.tesh)
-ADD_TESH_FACTORIES(app-masterworker-vivaldi     "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/app-masterworker/app-masterworker-vivaldi.tesh)
+ADD_TESH_FACTORIES(app-masterworker-multicore   "thread;ucontext;raw;boost" 
+                                                --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/app-masterworker 
+                                                --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/app-masterworker
+                                               --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms
+                                               ${CMAKE_HOME_DIRECTORY}/examples/msg/app-masterworker/app-masterworker-multicore.tesh)
+ADD_TESH_FACTORIES(app-masterworker-vivaldi     "thread;ucontext;raw;boost" 
+                                                --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/app-masterworker 
+                                                --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/app-masterworker
+                                               --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms
+                                               ${CMAKE_HOME_DIRECTORY}/examples/msg/app-masterworker/app-masterworker-vivaldi.tesh)
 
 if(SIMGRID_HAVE_NS3)
   ADD_TESH_FACTORIES(msg-network-ns3 "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/network-ns3/network-ns3.tesh)
index eb2d0c5..00c8f32 100644 (file)
@@ -7,7 +7,6 @@ documentation, but it should remain readable directly.
  @brief Find the MSG example fitting your needs from the extensive set provided in the archive.
 
   - @ref msg_ex_basics
-  - @ref msg_ex_async
   - @ref msg_ex_process
   - @ref msg_ex_tracing
     - @ref msg_ex_tracing_user_variables
@@ -39,31 +38,6 @@ documentation, but it should remain readable directly.
    task to dispatch to a set of several Worker processes. It is fully
    commented in @ref msg_ex_master_worker.
 
-@section msg_ex_async Asynchronous communications
-
-In addition to the fully documented example of @ref
-MSG_ex_asynchronous_communications, there are several other examples
-shipped in the archive:
-  
- - <b>Basic asynchronous communications</b>. 
-   @ref examples/msg/async-wait/async-wait.c \n
-   Illustrates how to have non-blocking communications, that are
-   communications running in the background leaving the process free
-   to do something else during their completion. The main functions
-   involved are @ref MSG_task_isend, @ref MSG_task_irecv, and @ref
-   MSG_comm_wait.
- - <b>Waiting for all communications in a set</b>.
-   @ref examples/msg/async-waitall/async-waitall.c\n
-   The @ref MSG_comm_waitall function is useful when you want to block
-   until all activities in a given set have completed.
-   
- - <b>Waiting for the first completed communication in a set</b>.
-   @ref examples/msg/async-waitany/async-waitany.c\n
-   The @ref MSG_comm_waitany function is useful when you want to block
-   until one activity of the set completes, no matter which terminates
-   first.
-   
 @section msg_ex_process Acting on Processes
 
   - <b>Creating processes</b>. 
@@ -71,19 +45,6 @@ shipped in the archive:
     Most processes are started from the deployment XML file, but they
     can also be used with the @ref MSG_process_create() function.
 
-  - <b>Suspend and Resume processes</b>.
-    @ref examples/msg/process-suspend/process-suspend.c \n
-    Processes can be suspended and resumed during their executions
-    thanks to the @ref MSG_process_suspend and @ref MSG_process_resume functions.
-
-  - <b>Kill processes</b>.
-    @ref examples/msg/process-kill/process-kill.c \n
-    Processes can forcefully stop other processes with the @ref MSG_process_kill function.
-     
-  - <b>Migrating processes</b>.
-    @ref examples/msg/process-migration/process-migration.c \n
-    Processes can move or be moved from a host to another with the @ref MSG_process_migrate function.
-    
   - <b>Controling the process life cycle from the XML</b>.
     @ref examples/msg/process-startkilltime/process-startkilltime.c \n
     You can specify a start time and a kill time in the deployment
@@ -188,10 +149,6 @@ TODO: show the XML files instead if it's what is interesting. On a "XML example
 The examples of this section demonstrate how to interact with the
 simulated storages.
 
-  - <b>Basic example</b>.
-    @ref examples/msg/io-storage/io-storage.c \n
-    All main storage and file functions are demoed.
-    
   - <b>File Management</b>. @ref examples/msg/io-file/io-file.c \n
     This example illustrates the use of operations on file
     (@ref MSG_file_open, @ref MSG_file_read, @ref MSG_file_write,
@@ -232,14 +189,7 @@ top of the example file).
 @example examples/msg/app-token-ring/app-token-ring.c
 @example examples/msg/app-masterworker/app-masterworker.c
 
-@example examples/msg/async-wait/async-wait.c
-@example examples/msg/async-waitall/async-waitall.c
-@example examples/msg/async-waitany/async-waitany.c
-
 @example examples/msg/process-create/process-create.c
-@example examples/msg/process-suspend/process-suspend.c
-@example examples/msg/process-kill/process-kill.c
-@example examples/msg/process-migration/process-migration.c
 @example examples/msg/process-startkilltime/process-startkilltime.c
 
 @example examples/msg/trace-platform/trace-platform.c
index e1f45f6..df8015e 100644 (file)
@@ -4,7 +4,7 @@ p Testing the chainsend MSG implementation
 
 ! timeout 60
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/chainsend ${srcdir:=.}/cluster.xml ${srcdir:=.}/../msg/app-chainsend/app-chainsend_d.xml "--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/chainsend ${platfdir}/cluster.xml ${srcdir}/app-chainsend_d.xml "--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n"
 > [    2.214423] (2:peer@node-1.acme.org) ### 2.214423 16777216 bytes (Avg 7.225359 MB/s); copy finished (simulated).
 > [    2.222796] (3:peer@node-2.acme.org) ### 2.222796 16777216 bytes (Avg 7.198141 MB/s); copy finished (simulated).
 > [    2.231170] (4:peer@node-3.acme.org) ### 2.231170 16777216 bytes (Avg 7.171126 MB/s); copy finished (simulated).
index 9974ee0..f7be2b8 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing a simple master/worker example application
 
-$ $SG_TEST_EXENV ./app-masterworker/app-masterworker ${srcdir:=.}/../platforms/multicore_machine.xml ${srcdir:=.}/app-masterworker/app-masterworker-multicore_d.xml --cfg=cpu/model:Cas01 --cfg=cpu/optim:Full "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ./app-masterworker/app-masterworker ${platfdir}/multicore_machine.xml ${srcdir}/app-masterworker-multicore_d.xml --cfg=cpu/model:Cas01 --cfg=cpu/optim:Full "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'Full'
 > [  0.000000] (1:master@Tremblay) Got 6 workers and 20 tasks to process
index 9e49419..bfb58a5 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing a simple master/worker example application
 
-$ $SG_TEST_EXENV ./app-masterworker/app-masterworker  ${srcdir:=.}/../platforms/vivaldi.xml ${srcdir:=.}/app-masterworker/app-masterworker-vivaldi_d.xml --cfg=network/latency-factor:1.0 --cfg=network/bandwidth-factor:1.0 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir}/app-masterworker  ${platfdir}/vivaldi.xml ${srcdir}/app-masterworker-vivaldi_d.xml --cfg=network/latency-factor:1.0 --cfg=network/bandwidth-factor:1.0 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/latency-factor' to '1.0'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/bandwidth-factor' to '1.0'
 > [  0.000000] (1:master@100030591) Got 15 workers and 10 tasks to process
index 988bda3..21623e9 100644 (file)
@@ -3,7 +3,7 @@
 p Testing a simple master/worker example application (mailbox version)
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/app-masterworker$EXEEXT ${srcdir:=.}/small_platform_with_routers.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml --cfg=network/crosstraffic:0 --trace "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/app-masterworker$EXEEXT ${platfdir}/small_platform_with_routers.xml ${srcdir}/app-masterworker_d.xml --cfg=network/crosstraffic:0 --trace "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/crosstraffic' to '0'
 > [  0.000000] (1:master@Tremblay) Got 5 workers and 20 tasks to process
 > [  0.000000] (1:master@Tremblay) Sending "Task_0" (of 20) to mailbox "worker-0"
@@ -34,7 +34,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-masterworker$EXEEXT ${srcdir:=.}/small_platfor
 > [  5.094868] (0:maestro@) Simulation time 5.09487
 > [  5.094868] (6:worker@Bourassa) I'm done. See you!
 
-$ $SG_TEST_EXENV ${bindir:=.}/app-masterworker$EXEEXT ${srcdir:=.}/small_platform_with_routers.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml --trace "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/app-masterworker$EXEEXT ${platfdir}/small_platform_with_routers.xml ${srcdir}/app-masterworker_d.xml --trace "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:master@Tremblay) Got 5 workers and 20 tasks to process
 > [  0.000000] (1:master@Tremblay) Sending "Task_0" (of 20) to mailbox "worker-0"
 > [  0.002265] (1:master@Tremblay) Sending "Task_1" (of 20) to mailbox "worker-1"
index 2792765..b1e237e 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing with default compound
 
-$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-pingpong/app-pingpong_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${platfdir}/small_platform.xml ${srcdir}/app-pingpong_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  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)
@@ -14,7 +14,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xm
 
 p Testing with default compound and Full network optimization
 
-$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-pingpong/app-pingpong_d.xml "--cfg=network/optim:Full" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${platfdir}/small_platform.xml ${srcdir}/app-pingpong_d.xml "--cfg=network/optim:Full" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/optim' to 'Full'
 > [  0.000000] (1:pinger@Tremblay) Ping -> Jupiter
 > [  0.000000] (2:ponger@Jupiter) Pong -> Tremblay
@@ -27,7 +27,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xm
 
 p Testing the deprecated CM02 network model
 
-$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-pingpong/app-pingpong_d.xml --cfg=cpu/model:Cas01 --cfg=network/model:CM02 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${platfdir}/small_platform.xml ${srcdir}/app-pingpong_d.xml --cfg=cpu/model:Cas01 --cfg=network/model:CM02 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (1:pinger@Tremblay) Ping -> Jupiter
@@ -41,7 +41,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xm
 
 p Testing the surf network Reno fairness model using lagrangian approach
 
-$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-pingpong/app-pingpong_d.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Reno" --log=surf_lagrange.thres=critical "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${platfdir}/small_platform.xml ${srcdir}/app-pingpong_d.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Reno" --log=surf_lagrange.thres=critical "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'Reno'
@@ -56,7 +56,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xm
 
 p Testing the surf network Reno2 fairness model using lagrangian approach
 
-$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-pingpong/app-pingpong_d.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Reno2" --log=surf_lagrange.thres=critical "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${platfdir}/small_platform.xml ${srcdir}/app-pingpong_d.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Reno2" --log=surf_lagrange.thres=critical "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'Reno2'
@@ -71,7 +71,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xm
 
 p Testing the surf network Vegas fairness model using lagrangian approach
 
-$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-pingpong/app-pingpong_d.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Vegas" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${platfdir}/small_platform.xml ${srcdir}/app-pingpong_d.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Vegas" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'Vegas'
@@ -86,7 +86,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xm
 
 p Testing the surf network constant model
 
-$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${srcdir:=.}/small_platform_constant.xml ${srcdir:=.}/../msg/app-pingpong/app-pingpong_d.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Constant" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/app-pingpong$EXEEXT ${platfdir}/small_platform_constant.xml ${srcdir}/app-pingpong_d.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Constant" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'Constant'
index 8f52f93..b8fd34c 100644 (file)
@@ -1,6 +1,6 @@
 #! ./tesh
 
-$ $SG_TEST_EXENV ${bindir:=.}/app-token-ring ${srcdir:=.}/routing_cluster.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/app-token-ring ${platfdir}/routing_cluster.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Number of hosts '6'
 > [  0.000000] (1:0@host1) Host "0" send 'Token' to Host "1"
 > [  0.017354] (2:1@host2) Host "1" received "Token"
@@ -16,7 +16,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-token-ring ${srcdir:=.}/routing_cluster.xml "-
 > [  0.131796] (1:0@host1) Host "0" received "Token"
 > [  0.131796] (0:maestro@) Simulation time 0.131796
 
-$ $SG_TEST_EXENV ${bindir:=.}/app-token-ring ${srcdir:=.}/two_peers.xml "--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/app-token-ring ${platfdir}/two_peers.xml "--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n"
 > [    0.000000] (0:maestro@) Number of hosts '2'
 > [    0.000000] (1:0@100030591) Host "0" send 'Token' to Host "1"
 > [    0.624423] (2:1@100036570) Host "1" received "Token"
@@ -24,7 +24,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/app-token-ring ${srcdir:=.}/two_peers.xml "--log=r
 > [    1.248846] (1:0@100030591) Host "0" received "Token"
 > [    1.248846] (0:maestro@) Simulation time 1.24885
 
-$ $SG_TEST_EXENV ${bindir:=.}/app-token-ring ${srcdir:=.}/meta_cluster.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/app-token-ring ${platfdir}/meta_cluster.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Number of hosts '60'
 > [  0.000000] (1:0@host-1.cluster1) Host "0" send 'Token' to Host "1"
 > [  0.030364] (2:1@host-1.cluster2) Host "1" received "Token"
index 75aeb14..86278aa 100644 (file)
@@ -1,4 +1,4 @@
-$ $SG_TEST_EXENV ${bindir:=.}/cloud-capping ${srcdir:=.}/small_platform.xml --log=no_loc "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/cloud-capping ${platfdir}/small_platform.xml --log=no_loc "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:master_@Fafard) # 1. Put a single task on a PM. 
 > [  0.000000] (1:master_@Fafard) ### Test: with/without MSG_task_set_bound
 > [  0.000000] (1:master_@Fafard) ### Test: no bound for Task1@Fafard
index 27cf050..12e3506 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing the Cloud API with a simple master/workers
 
-$ $SG_TEST_EXENV ${bindir:=.}/cloud-masterworker$EXEEXT --log=no_loc ${srcdir:=.}/cluster.xml
+$ $SG_TEST_EXENV ${bindir:=.}/cloud-masterworker$EXEEXT --log=no_loc ${platfdir}/cluster.xml
 > [node-0.acme.org:master:(1) 0.000000] [msg_test/INFO] # Launch 2 VMs
 > [node-0.acme.org:master:(1) 0.000000] [msg_test/INFO] create VM00 on PM(node-1.acme.org)
 > [node-0.acme.org:master:(1) 0.000000] [msg_test/INFO] put a process (WRK00) on VM00
index 3e06598..8eecba2 100644 (file)
@@ -1,4 +1,4 @@
-$ $SG_TEST_EXENV ${bindir:=.}/cloud-migration ${srcdir:=.}/small_platform.xml --log=no_loc "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/cloud-migration ${platfdir}/small_platform.xml --log=no_loc "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:master_@Fafard) Test: Migrate a VM with 1000 Mbytes RAM
 > [  0.000000] (3:__pr_mig_tx:VM0(Fafard-Tremblay)@Fafard) use the default max_downtime value 30ms
 > [132.765801] (1:master_@Fafard) VM0 migrated: Fafard->Tremblay in 132.766 s
index 1f719e8..8ee67e0 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing a vm with two successive tasks
 
-$ $SG_TEST_EXENV ${bindir:=.}/cloud-simple$EXEEXT --log=no_loc ${srcdir:=.}/small_platform.xml
+$ $SG_TEST_EXENV ${bindir:=.}/cloud-simple$EXEEXT --log=no_loc ${platfdir}/small_platform.xml
 > [Fafard:master_:(1) 0.000000] [msg_test/INFO] ## Test 1 (started): check computation on normal PMs
 > [Fafard:master_:(1) 0.000000] [msg_test/INFO] ### Put a task on a PM
 > [Fafard:compute:(2) 0.013107] [msg_test/INFO] Fafard:compute task executed 0.0131068
index cf9082f..b20f55c 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing a vm with two successive tasks
 
-$ $SG_TEST_EXENV ${bindir:=.}/cloud-two-tasks$EXEEXT ${srcdir:=.}/small_platform.xml
+$ $SG_TEST_EXENV ${bindir:=.}/cloud-two-tasks$EXEEXT ${platfdir}/small_platform.xml
 > [VM0:compute:(2) 0.000000] [msg_test/INFO] VM0:compute task 1 created 0
 > [Fafard:master_:(1) 0.000000] [msg_test/INFO] aTask remaining duration: 1e+09
 > [Fafard:master_:(1) 1.000000] [msg_test/INFO] aTask remaining duration: 9.23704e+08
index cecf9b6..6e513c0 100644 (file)
@@ -3,7 +3,7 @@
 p Testing the Kademlia implementation with MSG
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/dht-kademlia ${srcdir:=.}/cluster.xml ${srcdir:=.}/../msg/dht-kademlia/dht-kademlia_d.xml "--log=root.fmt:[%10.6r]%e(%02i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/dht-kademlia ${platfdir}/cluster.xml ${srcdir}/dht-kademlia_d.xml "--log=root.fmt:[%10.6r]%e(%02i:%P@%h)%e%m%n"
 > [  0.000000] ( 1:node@node-0.acme.org) Hi, I'm going to create the network with id 0
 > [  0.000000] ( 2:node@node-1.acme.org) Hi, I'm going to join the network with id 1
 > [  0.000000] ( 3:node@node-2.acme.org) Hi, I'm going to join the network with id 3
index f83ff8f..407ac70 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing the Pastry implementation with MSG
 
-$ $SG_TEST_EXENV ${bindir:=.}/dht-pastry$EXEEXT -nb_bits=6 ${srcdir:=.}/cluster.xml ${srcdir:=.}/../msg/dht-pastry/dht-pastry_d.xml --log=msg_pastry.thres:verbose "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/dht-pastry$EXEEXT -nb_bits=6 ${platfdir}/cluster.xml ${srcdir}/dht-pastry_d.xml --log=msg_pastry.thres:verbose "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [ 25.007806] (1:node@node-0.acme.org) Task update from 366680 !!!
 > [ 25.007806] (1:node@node-0.acme.org) Node:
 > [ 25.007806] (1:node@node-0.acme.org)  Id: 42 '0000002a' 
index b0fde0b..f1ba449 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing the mechanism for computing host energy consumption
 
-$ ${bindir:=.}/energy-consumption/energy-consumption$EXEEXT ${srcdir:=.}/../platforms/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/energy-consumption$EXEEXT ${platfdir}/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:dvfs_test@MyHost1) Energetic profile: 100.0:120.0:200.0, 93.0:110.0:170.0, 90.0:105.0:150.0
 > [  0.000000] (1:dvfs_test@MyHost1) Initial peak speed=1E+08 flop/s; Energy dissipated =0E+00 J
 > [  0.000000] (1:dvfs_test@MyHost1) Sleep for 10 seconds
@@ -22,7 +22,9 @@ $ ${bindir:=.}/energy-consumption/energy-consumption$EXEEXT ${srcdir:=.}/../plat
 > [ 30.000000] (0:maestro@) Energy consumption of host MyHost2: 2100.000000 Joules
 > [ 30.000000] (0:maestro@) Energy consumption of host MyHost3: 3000.000000 Joules
 
-$ ${bindir:=.}/energy-consumption/energy-consumption$EXEEXT ${srcdir:=.}/../platforms/energy_cluster.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/energy-consumption$EXEEXT ${platfdir}/energy_cluster.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" --cfg=host/model:ptask_L07
+> [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'ptask_L07'
+> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
 > [  0.000000] (1:dvfs_test@MyHost1) Energetic profile: 100.0:120.0:200.0, 93.0:110.0:170.0, 90.0:105.0:150.0
 > [  0.000000] (1:dvfs_test@MyHost1) Initial peak speed=1E+08 flop/s; Energy dissipated =0E+00 J
 > [  0.000000] (1:dvfs_test@MyHost1) Sleep for 10 seconds
index f60249d..94f529a 100644 (file)
@@ -3,7 +3,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"
+$ ${bindir:=.}/energy-onoff$EXEEXT ${srcdir:=.}/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: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
@@ -24,3 +24,29 @@ $ ${bindir:=.}/energy-onoff/energy-onoff$EXEEXT ${srcdir:=.}/energy-onoff/platfo
 > [176.997893] (0:maestro@) Energy consumption of host MyHost2: 17699.789313 Joules
 > [176.997893] (1:onoff_test@MyHost2) Switch back to previously selected pstate 0
 > [176.997893] (1:onoff_test@MyHost2) Host1 is now ON again. Current peak speed=1E+08 flop/s; Energy dissipated=19820 J
+
+! output sort 19
+$ ${bindir:=.}/energy-onoff$EXEEXT ${srcdir:=.}/platform_onoff.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" --cfg=host/model:ptask_L07
+> [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'ptask_L07'
+> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
+> [  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
+> [ 10.000000] (1:onoff_test@MyHost2) Switch to virtual pstate 4, that encodes the shutting down state in the XML file of that example
+> [ 10.000000] (1:onoff_test@MyHost2) Simulate the shutdown by executing one flop on that remote host (using a parallel task)
+> [ 16.997901] (1:onoff_test@MyHost2) Switch back to previously selected pstate 0
+> [ 16.997901] (1:onoff_test@MyHost2) Actually shutdown the host
+> [ 16.997901] (1:onoff_test@MyHost2) Host1 is now OFF. Current peak speed=1E+08 flop/s; Energy dissipated=1720 J
+> [ 16.997901] (1:onoff_test@MyHost2) Sleep for 10 seconds
+> [ 26.997901] (1:onoff_test@MyHost2) Done sleeping. Current peak speed=1E+08; Energy dissipated=1819.77 J
+> [ 26.997901] (1:onoff_test@MyHost2) Switch to virtual pstate 3, that encodes the shutting down state in the XML file of that example
+> [ 26.997901] (1:onoff_test@MyHost2) Actually start the host
+> [ 26.997901] (1:onoff_test@MyHost2) Simulate the boot up by executing one flop on that host
+> [176.997893] (0:maestro@) Total energy consumption: 37519.557482 Joules (used hosts: 37519.557482 Joules; unused/idle hosts: 0.000000)
+> [176.997893] (0:maestro@) Total simulation time: 177.00
+> [176.997893] (0:maestro@) Energy consumption of host MyHost1: 19819.768169 Joules
+> [176.997893] (0:maestro@) Energy consumption of host MyHost2: 17699.789313 Joules
+> [176.997893] (1:onoff_test@MyHost2) Switch back to previously selected pstate 0
+> [176.997893] (1:onoff_test@MyHost2) Host1 is now ON again. Current peak speed=1E+08 flop/s; Energy dissipated=19820 J
+
index 48a3f1a..3d915e1 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing the DVFS-related functions
 
-$ ${bindir:=.}/energy-pstate/energy-pstate$EXEEXT ${srcdir:=.}/../platforms/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/energy-pstate$EXEEXT ${platfdir}/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:dvfs_test@MyHost1) Count of Processor states=3
 > [  0.000000] (1:dvfs_test@MyHost1) Current power peak=100000000.000000
 > [  0.000000] (2:dvfs_test@MyHost2) Count of Processor states=3
@@ -21,7 +21,9 @@ $ ${bindir:=.}/energy-pstate/energy-pstate$EXEEXT ${srcdir:=.}/../platforms/ener
 > [  6.000000] (2:dvfs_test@MyHost2) Current power peak=20000000.000000
 > [  6.000000] (0:maestro@) Total simulation time: 6.000000e+00
 
-$ ${bindir:=.}/energy-pstate/energy-pstate$EXEEXT ${srcdir:=.}/../platforms/energy_cluster.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/energy-pstate$EXEEXT ${platfdir}/energy_cluster.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" --cfg=host/model:ptask_L07
+> [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'ptask_L07'
+> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
 > [  0.000000] (1:dvfs_test@MyHost1) Count of Processor states=3
 > [  0.000000] (1:dvfs_test@MyHost1) Current power peak=100000000.000000
 > [  0.000000] (2:dvfs_test@MyHost2) Count of Processor states=3
index 2735dac..d64b38b 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing the mechanism for computing host energy consumption in case of VMs
 
-$ ${bindir:=.}/energy-vm/energy-vm$EXEEXT ${srcdir:=.}/../platforms/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/energy-vm$EXEEXT ${platfdir}/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:dvfs@MyHost1) Creating and starting two VMs
 > [  0.000000] (1:dvfs@MyHost1) Create two tasks on Host1: one inside a VM, the other directly on the host
 > [  0.000000] (1:dvfs@MyHost1) Create two tasks on Host2: both directly on the host
index 34f4ef0..aa9b287 100644 (file)
@@ -1,6 +1,6 @@
 #! ./tesh
 
-$ ${bindir:=.}/io-file ${srcdir:=.}/storage/storage.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/io-file ${platfdir}/storage/storage.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Number of host '4'
 > [  0.000000] (1:host@alice)  Open file 'c:\Windows\setupact.log'
 > [  0.000000] (1:host@alice)  Capacity of the storage element 'c:\Windows\setupact.log' is stored on: 2391537133 / 536870912000
index aaece80..626bd39 100644 (file)
@@ -4,7 +4,7 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "simgrid/msg.h"
-#include "simgrid/plugins/file_system.h"
+#include <simgrid/plugins/file_system.h>
 
 #define INMEGA (1024*1024)
 
@@ -64,13 +64,15 @@ int main(int argc, char **argv)
 
   xbt_dynar_t storages = MSG_storages_as_dynar();
   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_INFO("Init: %llu/%llu MiB used/free on '%s'", MSG_storage_get_used_size(st) / INMEGA,
+             MSG_storage_get_free_size(st) / INMEGA, MSG_storage_get_name(st));
   }
 
   int res = MSG_main();
 
   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_INFO("End: %llu/%llu MiB used/free on '%s'", MSG_storage_get_used_size(st) / INMEGA,
+             MSG_storage_get_free_size(st) / INMEGA, MSG_storage_get_name(st));
   }
   xbt_dynar_free(&storages);
 
index 390369c..34c72ad 100644 (file)
@@ -1,8 +1,8 @@
 #! ./tesh
 
-$ ${bindir:=.}/io-remote$EXEEXT ${srcdir:=.}/storage/remote_io.xml ${srcdir:=.}/../msg/io-remote/io-remote_d.xml "--log=root.fmt:[%10.6r]%e(%i@%5h)%e%m%n"
-> [  0.000000] (0@     ) Init: 12 MiB used on 'Disk1'
-> [  0.000000] (0@     ) Init: 2280 MiB used on 'Disk2'
+$ ${bindir:=.}/io-remote$EXEEXT ${platfdir}/storage/remote_io.xml ${srcdir}/io-remote_d.xml "--log=root.fmt:[%10.6r]%e(%i@%5h)%e%m%n"
+> [  0.000000] (0@     ) Init: 12/476824 MiB used/free on 'Disk1'
+> [  0.000000] (0@     ) Init: 2280/474556 MiB used/free on 'Disk2'
 > [  0.000000] (1@alice) Opened file 'c:\Windows\setupact.log'
 > [  0.000000] (1@alice) File Descriptor information:
 >              Full path: 'c:\Windows\setupact.log'
@@ -59,6 +59,6 @@ $ ${bindir:=.}/io-remote$EXEEXT ${srcdir:=.}/storage/remote_io.xml ${srcdir:=.}/
 > [  0.528211] (4@ dave) Move 'c:\Windows\Professional.xml' (of size 32646144) from 'dave' to 'carl'
 > [  0.819921] (2@  bob) Have written 17436672 bytes to '/scratch/doc/simgrid/examples/platforms/g5k.xml'.
 > [  0.819921] (2@  bob) Copy '/scratch/doc/simgrid/examples/platforms/g5k.xml' (of size 17436672) from 'bob' to 'alice'
-> [  1.843969] (0@     ) Init: 60 MiB used on 'Disk1'
-> [  1.843969] (0@     ) Init: 2297 MiB used on 'Disk2'
+> [  1.843969] (0@     ) End: 60/476776 MiB used/free on 'Disk1'
+> [  1.843969] (0@     ) End: 2297/474539 MiB used/free on 'Disk2'
 > [  1.843969] (0@     ) Simulation time 1.84397
diff --git a/examples/msg/io-storage/io-storage.c b/examples/msg/io-storage/io-storage.c
deleted file mode 100644 (file)
index 69d0713..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Copyright (c) 2006-2016. 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 "simgrid/plugins/file_system.h"
-
-XBT_LOG_NEW_DEFAULT_CATEGORY(storage,"Messages specific for this simulation");
-
-static int host(int argc, char *argv[]){
-  const char* host_name = MSG_host_get_name(MSG_host_self());
-
-  /* - Display information on the disks mounted by the current host */
-  XBT_INFO("*** Storage info on %s ***", host_name);
-
-  xbt_dict_cursor_t cursor = NULL;
-  char* mount_name;
-  char* storage_name;
-  msg_storage_t storage = NULL;
-
-  /* - Retrieve all mount points of current host */
-  xbt_dict_t storage_list = MSG_host_get_mounted_storage_list(MSG_host_self());
-
-  xbt_dict_foreach(storage_list,cursor,mount_name,storage_name)  {
-    /* - For each disk mounted on host:
-           - Retrieve disk's information */
-    XBT_INFO("Storage name: %s, mount name: %s", storage_name, mount_name);
-    storage = MSG_storage_get_by_name(storage_name);
-
-    sg_size_t free_size = MSG_storage_get_free_size(storage);
-    sg_size_t used_size = MSG_storage_get_used_size(storage);
-    sg_size_t size = MSG_storage_get_size(storage);
-
-    XBT_INFO("Total size: %llu bytes", size);
-    XBT_INFO("Free size: %llu bytes", free_size);
-    XBT_INFO("Used size: %llu bytes", used_size);
-  }
-  xbt_dict_free(&storage_list);
-
-  /* - Create a 200,000 bytes file named './tmp/data.txt' on /sd1 */
-  char* file_name = xbt_strdup("/home/tmp/data.txt");
-
-  /* - Open an non-existing file which amounts to create it. */
-  msg_file_t file = MSG_file_open(file_name, NULL);
-  sg_size_t write = MSG_file_write(file, 200000);  // Write 200,000 bytes
-  XBT_INFO("Create a %llu bytes file named '%s' on /sd1", write, file_name);
-  MSG_file_dump(file);
-
-  /* - Check that sizes have changed */
-  XBT_INFO("Free size: %llu bytes", MSG_storage_get_free_size(storage));
-  XBT_INFO("Used size: %llu bytes", MSG_storage_get_used_size(storage));
-
-  /*  - Retrieve the size of created file and read it completely */
-  sg_size_t file_size = MSG_file_get_size(file);
-  MSG_file_seek(file, 0, SEEK_SET);
-  sg_size_t read = MSG_file_read(file, file_size);
-  XBT_INFO("Read %llu bytes on %s", read, file_name);
-
-  /* - Then write 100,000 bytes in tmp/data.txt */
-  write = MSG_file_write(file, 100000);  // Write 100,000 bytes
-  XBT_INFO("Write %llu bytes on %s", write, file_name);
-  MSG_file_dump(file);
-
-  storage_name = xbt_strdup("Disk4");
-  storage = MSG_storage_get_by_name(storage_name);
-
-  /*  - Move file from ./tmp/data.txt to ./tmp/simgrid.readme */
-  XBT_INFO("*** Move '/tmp/data.txt' into '/tmp/simgrid.readme'");
-  MSG_file_move(file, "/home/tmp/simgrid.readme");
-
-  /* - Attach some user data to the file */
-  MSG_file_set_data(file, xbt_strdup("777"));
-  /* - 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);
-
-  /* - Attach some user data to disk1 */
-  XBT_INFO("*** Get/set data for storage element: %s ***",storage_name);
-
-  data = MSG_storage_get_data(storage);
-
-  XBT_INFO("Get storage data: '%s'", data);
-
-  MSG_storage_set_data(storage, xbt_strdup("Some user data"));
-  data = MSG_storage_get_data(storage);
-  XBT_INFO("Set and get data: '%s'", data);
-  xbt_free(data);
-  xbt_free(storage_name);
-
-  /* - Finally dump disks contents */
-  XBT_INFO("*** Dump content of %s ***",MSG_host_get_name(MSG_host_self()));
-  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* psize;
-  xbt_dict_foreach(contents, curs, mountname, content){
-    XBT_INFO("Print the content of mount point: %s",mountname);
-    xbt_dict_foreach (content, curs2, path, psize) {
-      XBT_INFO("%s size: %llu bytes", path, *psize);
-    }
-    xbt_dict_free(&content);
-  }
-  xbt_dict_free(&contents);
-  return 1;
-}
-
-int main(int argc, char *argv[])
-{
-  MSG_init(&argc, argv);
-  MSG_storage_file_system_init();
-
-  MSG_create_environment(argv[1]);
-  MSG_function_register("host", host);
-  xbt_dynar_t hosts =  MSG_hosts_as_dynar();
-  MSG_process_create(NULL, host, NULL, xbt_dynar_get_as(hosts, 3, msg_host_t));
-  xbt_dynar_free(&hosts);
-
-  msg_error_t res = MSG_main();
-  XBT_INFO("Simulated time: %g", MSG_get_clock());
-
-  return res != MSG_OK;
-}
diff --git a/examples/msg/io-storage/io-storage.tesh b/examples/msg/io-storage/io-storage.tesh
deleted file mode 100644 (file)
index 78cc08d..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#! ./tesh
-
-$ ${bindir:=.}/io-storage$EXEEXT ${srcdir:=.}/storage/storage.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (1:@denise) *** Storage info on denise ***
-> [  0.000000] (1:@denise) Storage name: Disk2, mount name: c:
-> [  0.000000] (1:@denise) Total size: 536870912000 bytes
-> [  0.000000] (1:@denise) Free size: 534479374867 bytes
-> [  0.000000] (1:@denise) Used size: 2391537133 bytes
-> [  0.000000] (1:@denise) Storage name: Disk4, mount name: /home
-> [  0.000000] (1:@denise) Total size: 536870912000 bytes
-> [  0.000000] (1:@denise) Free size: 536857690006 bytes
-> [  0.000000] (1:@denise) Used size: 13221994 bytes
-> [  0.003333] (1:@denise) Create a 200000 bytes file named '/home/tmp/data.txt' on /sd1
-> [  0.003333] (1:@denise) File Descriptor information:
->              Full path: '/home/tmp/data.txt'
->              Size: 200000
->              Mount point: '/home'
->              Storage Id: 'Disk4'
->              Storage Type: 'single_SSD'
->              File Descriptor Id: 0
-> [  0.003333] (1:@denise) Free size: 536857490006 bytes
-> [  0.003333] (1:@denise) Used size: 13421994 bytes
-> [  0.004333] (1:@denise) Read 200000 bytes on /home/tmp/data.txt
-> [  0.006000] (1:@denise) Write 100000 bytes on /home/tmp/data.txt
-> [  0.006000] (1:@denise) File Descriptor information:
->              Full path: '/home/tmp/data.txt'
->              Size: 300000
->              Mount point: '/home'
->              Storage Id: 'Disk4'
->              Storage Type: 'single_SSD'
->              File Descriptor Id: 0
-> [  0.006000] (1:@denise) *** Move '/tmp/data.txt' into '/tmp/simgrid.readme'
-> [  0.006000] (1:@denise) User data attached to the file: 777
-> [  0.006000] (1:@denise) *** Get/set data for storage element: Disk4 ***
-> [  0.006000] (1:@denise) Get storage data: '(null)'
-> [  0.006000] (1:@denise) Set and get data: 'Some user data'
-> [  0.006000] (1:@denise) *** Dump content of denise ***
-> [  0.006000] (1:@denise) Print the content of mount point: c:
-> [  0.006000] (1:@denise) \Windows\win.ini size: 92 bytes
-> [  0.006000] (1:@denise) \Windows\mib.bin size: 43131 bytes
-> [  0.006000] (1:@denise) \Windows\DtcInstall.log size: 1955 bytes
-> [  0.006000] (1:@denise) \Windows\vmgcoinstall.log size: 1585 bytes
-> [  0.006000] (1:@denise) \Windows\Starter.xml size: 31537 bytes
-> [  0.006000] (1:@denise) \Windows\_isusr32.dll size: 180320 bytes
-> [  0.006000] (1:@denise) \Windows\winhlp32.exe size: 10752 bytes
-> [  0.006000] (1:@denise) \Windows\setuperr.log size: 0 bytes
-> [  0.006000] (1:@denise) \Windows\system.ini size: 219 bytes
-> [  0.006000] (1:@denise) \Windows\Professional.xml size: 31881 bytes
-> [  0.006000] (1:@denise) \Windows\hapint.exe size: 382056 bytes
-> [  0.006000] (1:@denise) \Windows\regedit.exe size: 159232 bytes
-> [  0.006000] (1:@denise) \Windows\setupact.log size: 101663 bytes
-> [  0.006000] (1:@denise) \Windows\WindowsUpdate.log size: 1518934 bytes
-> [  0.006000] (1:@denise) \Windows\explorer.exe size: 2380944 bytes
-> [  0.006000] (1:@denise) \Windows\DirectX.log size: 10486 bytes
-> [  0.006000] (1:@denise) \Windows\WMSysPr9.prx size: 316640 bytes
-> [  0.006000] (1:@denise) \Windows\PFRO.log size: 6770 bytes
-> [  0.006000] (1:@denise) \Windows\csup.txt size: 12 bytes
-> [  0.006000] (1:@denise) \Windows\WLXPGSS.SCR size: 322048 bytes
-> [  0.006000] (1:@denise) \Windows\avastSS.scr size: 41664 bytes
-> [  0.006000] (1:@denise) \Windows\font1.sii size: 4907 bytes
-> [  0.006000] (1:@denise) \Windows\write.exe size: 10752 bytes
-> [  0.006000] (1:@denise) \Windows\font2.sii size: 8698 bytes
-> [  0.006000] (1:@denise) \Windows\CoreSingleLanguage.xml size: 31497 bytes
-> [  0.006000] (1:@denise) \Windows\dchcfg64.exe size: 335464 bytes
-> [  0.006000] (1:@denise) \Windows\notepad.exe size: 243712 bytes
-> [  0.006000] (1:@denise) \Windows\HelpPane.exe size: 883712 bytes
-> [  0.006000] (1:@denise) \Windows\hh.exe size: 17408 bytes
-> [  0.006000] (1:@denise) \Windows\DPINST.LOG size: 18944 bytes
-> [  0.006000] (1:@denise) \Windows\bfsvc.exe size: 75264 bytes
-> [  0.006000] (1:@denise) \Windows\splwow64.exe size: 126464 bytes
-> [  0.006000] (1:@denise) \Windows\MEMORY.DMP size: 2384027342 bytes
-> [  0.006000] (1:@denise) \Windows\dcmdev64.exe size: 93288 bytes
-> [  0.006000] (1:@denise) \Windows\twain_32.dll size: 50176 bytes
-> [  0.006000] (1:@denise) \Windows\bootstat.dat size: 67584 bytes
-> [  0.006000] (1:@denise) Print the content of mount point: /home
-> [  0.006000] (1:@denise) /include/simix/simix.h size: 13003 bytes
-> [  0.006000] (1:@denise) /include/mc/modelchecker.h size: 96 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/msg/README size: 4805 bytes
-> [  0.006000] (1:@denise) /include/instr/instr.h size: 5750 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/smpi/mc_bugged2.c size: 1387 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/html/group__XBT__str.html size: 36192 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/smpi/NAS/EP/README size: 347 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/smpi/NAS/DT/README size: 999 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/smpi/NAS/FT/README size: 276 bytes
-> [  0.006000] (1:@denise) /lib/libsimgrid.so.3.6.2 size: 12710497 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/smpi/NAS/sys/README size: 1461 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/msg/alias/masterslave_forwarder_with_alias.c size: 6217 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/smpi/NAS/SP/README size: 926 bytes
-> [  0.006000] (1:@denise) /tmp/simgrid.readme size: 300000 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/msg/parallel_task/test_ptask_deployment.xml size: 654 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/msg/icomms/small_platform.xml size: 972 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/smpi/NAS/MG/README size: 5465 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/msg/trace/test9.xml size: 598 bytes
-> [  0.006000] (1:@denise) /include/smpi/mpif.h size: 4826 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/smpi/NAS/README size: 1857 bytes
-> [  0.006000] (1:@denise) /bin/tesh size: 356434 bytes
-> [  0.006000] (1:@denise) /include/simdag/simdag.h size: 10325 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/xbt/sem_basic.c size: 1970 bytes
-> [  0.006000] (1:@denise) /include/xbt/fifo.h size: 3626 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/smpi/NAS/common/randdp.c size: 1441 bytes
-> [  0.006000] (1:@denise) /include/msg/datatypes.h size: 4635 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/smpi/NAS/EP/randlc.c size: 3300 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/smpi/NAS/MPI_dummy/README size: 2406 bytes
-> [  0.006000] (1:@denise) /doc/simgrid/examples/platforms/g5k.xml size: 17028 bytes
-> [  0.006000] (1:@denise) /include/surf/simgrid_dtd.h size: 23583 bytes
-> [  0.006000] (1:@denise) /bin/smpicc size: 918 bytes
-> [  0.006000] (0:maestro@) Simulated time: 0.006
index 56410a0..78ab94b 100644 (file)
@@ -5,19 +5,20 @@ p We just want to check that the NS3 bindings of SimGrid are working correctly,
 
 p 3hosts 2links
 
-$ ${bindir:=.}/network-ns3/network-ns3 ${srcdir:=.}/examples/platforms/small_platform_one_link_routes.xml ${srcdir:=.}/examples/msg/network-ns3/3hosts_2links_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
+$ ${bindir:=.}/network-ns3/network-ns3
+${platfdir}/small_platform_one_link_routes.xml ${srcdir}/network-ns3/3hosts_2links_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
 > [:maestro(0)] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'NS3'
 > [Jupiter:worker(2)] [msg_test/INFO] FLOW[1] : Receive 100 bytes from Tremblay to Jupiter
 
 p 6hosts 3links
 
-$ ${bindir:=.}/network-ns3/network-ns3 ${srcdir:=.}/examples/platforms/small_platform_one_link_routes.xml ${srcdir:=.}/examples/msg/network-ns3/3links_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
+$ ${bindir:=.}/network-ns3/network-ns3 ${platfdir}/small_platform_one_link_routes.xml ${srcdir}/network-ns3/3links_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
 > [:maestro(0)] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'NS3'
 > [Jupiter:worker(2)] [msg_test/INFO] FLOW[1] : Receive 10000 bytes from Tremblay to Jupiter
 > [Ginette:worker(4)] [msg_test/INFO] FLOW[2] : Receive 10000 bytes from Fafard to Ginette
 > [Lovelace:worker(6)] [msg_test/INFO] FLOW[3] : Receive 10000 bytes from Bourassa to Lovelace
 
-$ ${bindir:=.}/network-ns3/network-ns3 ${srcdir:=.}/examples/platforms/small_platform_one_link_routes.xml ${srcdir:=.}/examples/msg/network-ns3/3links-timer_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
+$ ${bindir:=.}/network-ns3/network-ns3 ${platfdir}/small_platform_one_link_routes.xml ${srcdir}/network-ns3/3links-timer_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
 > [:maestro(0)] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'NS3'
 > [Jupiter:worker(2)] [msg_test/INFO] FLOW[1] : Receive 10000 bytes from Tremblay to Jupiter
 > [Ginette:worker(4)] [msg_test/INFO] FLOW[2] : Receive 10000 bytes from Fafard to Ginette
@@ -26,20 +27,20 @@ $ ${bindir:=.}/network-ns3/network-ns3 ${srcdir:=.}/examples/platforms/small_pla
 
 p One cluster
 
-$ ${bindir:=.}/network-ns3/network-ns3 ${srcdir:=.}/examples/platforms/cluster.xml ${srcdir:=.}/examples/msg/network-ns3/one_cluster_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
+$ ${bindir:=.}/network-ns3/network-ns3 ${platfdir}/cluster.xml ${srcdir}/network-ns3/one_cluster_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
 > [:maestro(0)] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'NS3'
 > [node-6.acme.org:worker(2)] [msg_test/INFO] FLOW[1] : Receive 100 bytes from node-2.acme.org to node-6.acme.org
 
 p Two clusters
 
-$ ${bindir:=.}/network-ns3/network-ns3 ${srcdir:=.}/examples/platforms/two_clusters.xml ${srcdir:=.}/examples/msg/network-ns3/two_clusters_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
+$ ${bindir:=.}/network-ns3/network-ns3 ${platfdir}/two_clusters.xml ${srcdir}/network-ns3/two_clusters_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
 > [:maestro(0)] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'NS3'
 > [node-16.acme.org:worker(2)] [msg_test/INFO] FLOW[1] : Receive 100 bytes from node-3.acme.org to node-16.acme.org
 
 p Dogbone
 
 ! timeout 10
-$ ${bindir:=.}/network-ns3/network-ns3 ${srcdir:=.}/examples/platforms/dogbone.xml ${srcdir:=.}/examples/msg/network-ns3/dogbone_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
+$ ${bindir:=.}/network-ns3/network-ns3 ${platfdir}/dogbone.xml ${srcdir}/network-ns3/dogbone_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
 > [:maestro(0)] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'NS3'
 > [:maestro(0)] [ns3/WARNING] Ignoring a route between S1 and C1 of length 3: Only routes of length 1 are considered with NS3.
 > WARNING: You can ignore this warning if your hosts can still communicate when only considering routes of length 1.
@@ -49,14 +50,14 @@ $ ${bindir:=.}/network-ns3/network-ns3 ${srcdir:=.}/examples/platforms/dogbone.x
 
 p 2hosts 1link
 
-$ ${bindir:=.}/network-ns3/network-ns3 ${srcdir:=.}/examples/platforms/onelink.xml ${srcdir:=.}/examples/msg/network-ns3/onelink_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
+$ ${bindir:=.}/network-ns3/network-ns3 ${platfdir}/onelink.xml ${srcdir}/network-ns3/onelink_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
 > [:maestro(0)] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'NS3'
 > [C1:worker(2)] [msg_test/INFO] FLOW[1] : Receive 10000 bytes from S1 to C1
 
 p Crosstraffic TCP option DISABLED
 ! output ignore 
-$ ${bindir:=.}/network-ns3/network-ns3 ${srcdir:=.}/examples/platforms/crosstraffic.xml ${srcdir:=.}/examples/msg/network-ns3/crosstraffic_d.xml --cfg=network/model:NS3 --cfg=network/crosstraffic:0 
+$ ${bindir:=.}/network-ns3/network-ns3 ${platfdir}/crosstraffic.xml ${srcdir}/network-ns3/crosstraffic_d.xml --cfg=network/model:NS3 --cfg=network/crosstraffic:0 
 
 p Crosstraffic TCP option ENABLED
 ! output ignore
-$ ${bindir:=.}/network-ns3/network-ns3 ${srcdir:=.}/examples/platforms/crosstraffic.xml ${srcdir:=.}/examples/msg/network-ns3/crosstraffic_d.xml --cfg=network/model:NS3 --cfg=network/crosstraffic:1
+$ ${bindir:=.}/network-ns3/network-ns3 ${platfdir}/crosstraffic.xml ${srcdir}/network-ns3/crosstraffic_d.xml --cfg=network/model:NS3 --cfg=network/crosstraffic:1
index 7cc23e6..15732ab 100644 (file)
@@ -3,7 +3,7 @@
 p Testing a simple master/worker example application handling failures TCP crosstraffic DISABLED
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/platform-failures$EXEEXT --log=xbt_cfg.thres:critical --log=no_loc ${srcdir:=.}/small_platform_with_failures.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml --cfg=path:${srcdir} --cfg=network/crosstraffic:0 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/platform-failures$EXEEXT --log=xbt_cfg.thres:critical --log=no_loc ${platfdir}/small_platform_with_failures.xml ${srcdir}/../app-masterworker/app-masterworker_d.xml --cfg=path:${srcdir} --cfg=network/crosstraffic:0 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Cannot launch process 'worker' on failed host 'Fafard'
 > [  0.000000] (1:master@Tremblay) Got 5 workers and 20 tasks to process
 > [  0.010309] (1:master@Tremblay) Send completed
@@ -98,7 +98,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/platform-failures$EXEEXT --log=xbt_cfg.thres:criti
 p Testing a simple master/worker example application handling failures. TCP crosstraffic ENABLED
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/platform-failures$EXEEXT --log=xbt_cfg.thres:critical --log=no_loc ${srcdir:=.}/small_platform_with_failures.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml --cfg=path:${srcdir} "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/platform-failures$EXEEXT --log=xbt_cfg.thres:critical --log=no_loc ${platfdir}/small_platform_with_failures.xml ${srcdir}/../app-masterworker/app-masterworker_d.xml --cfg=path:${srcdir} "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Cannot launch process 'worker' on failed host 'Fafard'
 > [  0.000000] (1:master@Tremblay) Got 5 workers and 20 tasks to process
 > [  0.010825] (1:master@Tremblay) Send completed
@@ -193,7 +193,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/platform-failures$EXEEXT --log=xbt_cfg.thres:criti
 p Testing a simple master/worker example application handling failures. CPU_TI optimization enabled
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/platform-failures$EXEEXT --log=xbt_cfg.thres:critical --log=no_loc ${srcdir:=.}/small_platform_with_failures.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml --cfg=path:${srcdir} -cfg=cpu/optim:TI "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/platform-failures$EXEEXT --log=xbt_cfg.thres:critical --log=no_loc ${platfdir}/small_platform_with_failures.xml ${srcdir}/../app-masterworker/app-masterworker_d.xml --cfg=path:${srcdir} -cfg=cpu/optim:TI "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Cannot launch process 'worker' on failed host 'Fafard'
 > [  0.000000] (1:master@Tremblay) Got 5 workers and 20 tasks to process
 > [  0.010825] (1:master@Tremblay) Send completed
index aea23f3..726b552 100644 (file)
@@ -3,7 +3,7 @@
 p Testing a MSG application with properties in the XML for Hosts, Links and Processes
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/platform-properties$EXEEXT ${srcdir:=.}/prop.xml ${srcdir:=.}/../msg/platform-properties/platform-properties_d.xml  "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/platform-properties$EXEEXT ${platfdir}/prop.xml ${srcdir}/platform-properties_d.xml  "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) There are 7 hosts in the environment
 > [  0.000000] (0:maestro@) Host 'host1' runs at 1000000000 flops/s
 > [  0.000000] (0:maestro@) Host 'host2' runs at 1000000000 flops/s
index 6d67041..1ae59cc 100644 (file)
@@ -2,7 +2,7 @@
 
 p This tests the HostLoad plugin (this allows the user to get the current load of a host and the computed flops)
 
-$ ${bindir:=.}/plugin-hostload/plugin-hostload$EXEEXT ${srcdir:=.}/../platforms/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/plugin-hostload$EXEEXT ${platfdir}/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:load_test@MyHost1) Initial peak speed: 1E+08 flop/s; number of flops computed so far: 0E+00 (should be 0)
 > [  0.000000] (1:load_test@MyHost1) Sleep for 10 seconds
 > [ 10.000000] (1:load_test@MyHost1) Done sleeping 10.00s; peak speed: 1E+08 flop/s; number of flops computed so far: 0E+00 (nothing should have changed)
index a7f2128..231e769 100644 (file)
@@ -1,4 +1,4 @@
 #! ./tesh
 
 p Start remote processes 
-$ $SG_TEST_EXENV ${bindir:=.}/process-create$EXEEXT ${srcdir:=.}/small_platform.xml 
+$ $SG_TEST_EXENV ${bindir:=.}/process-create$EXEEXT ${platfdir}/small_platform.xml
index 0fc54c6..3a33646 100644 (file)
@@ -1,5 +1,5 @@
 
-$ $SG_TEST_EXENV ${bindir:=.}/process-join$EXEEXT ${srcdir:=.}/small_platform.xml
+$ $SG_TEST_EXENV ${bindir:=.}/process-join$EXEEXT ${platfdir}/small_platform.xml
 > [Tremblay:master:(1) 0.000000] [msg_test/INFO] Start slave
 > [Tremblay:slave from master:(2) 0.000000] [msg_test/INFO] Slave started
 > [Tremblay:master:(1) 0.000000] [msg_test/INFO] Join the slave (timeout 2)
index 220fffc..fa4be4a 100644 (file)
@@ -2,7 +2,7 @@
 
 p Test0 Process without time
 
-$ $SG_TEST_EXENV ${bindir:=.}/process-startkilltime ${srcdir:=.}/cluster.xml ${srcdir:=.}/../msg/process-startkilltime/baseline_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/process-startkilltime ${platfdir}/cluster.xml ${srcdir}/baseline_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sleeper@node-0.acme.org) Hello! I go to sleep.
 > [ 10.000000] (1:sleeper@node-0.acme.org) Done sleeping.
 > [ 10.000000] (1:sleeper@node-0.acme.org) Exiting now (done sleeping or got killed).
@@ -10,7 +10,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/process-startkilltime ${srcdir:=.}/cluster.xml ${s
 
 p Test1 Process with start time
 
-$ $SG_TEST_EXENV ${bindir:=.}/process-startkilltime ${srcdir:=.}/cluster.xml ${srcdir:=.}/../msg/process-startkilltime/start_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/process-startkilltime ${platfdir}/cluster.xml ${srcdir}/start_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sleeper@node-0.acme.org) Hello! I go to sleep.
 > [  1.000000] (2:sleeper@node-1.acme.org) Hello! I go to sleep.
 > [  2.000000] (3:sleeper@node-2.acme.org) Hello! I go to sleep.
@@ -34,7 +34,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/process-startkilltime ${srcdir:=.}/cluster.xml ${s
 p Test1 Process with kill time
 
 ! output sort
-$ $SG_TEST_EXENV ${bindir:=.}/process-startkilltime ${srcdir:=.}/cluster.xml ${srcdir:=.}/../msg/process-startkilltime/kill_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/process-startkilltime ${platfdir}/cluster.xml ${srcdir}/kill_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sleeper@node-1.acme.org) Hello! I go to sleep.
 > [  0.000000] (2:sleeper@node-2.acme.org) Hello! I go to sleep.
 > [  0.000000] (3:sleeper@node-3.acme.org) Hello! I go to sleep.
@@ -47,7 +47,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/process-startkilltime ${srcdir:=.}/cluster.xml ${s
 p Test2 Process with start and kill times
 
 ! output sort
-$ $SG_TEST_EXENV ${bindir:=.}/process-startkilltime ${srcdir:=.}/cluster.xml ${srcdir:=.}/../msg/process-startkilltime/start_kill_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/process-startkilltime ${platfdir}/cluster.xml ${srcdir}/start_kill_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sleeper@node-0.acme.org) Hello! I go to sleep.
 > [  1.000000] (2:sleeper@node-1.acme.org) Hello! I go to sleep.
 > [  2.000000] (3:sleeper@node-2.acme.org) Hello! I go to sleep.
index 8f4afb0..85340f1 100644 (file)
@@ -3,7 +3,7 @@
 p Testing synchronization with semaphores
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/synchro-semaphore ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/synchro-semaphore ${platfdir}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:Alice@Fafard) Trying to acquire 1
 > [  0.000000] (1:Alice@Fafard) Acquired 1
 > [  0.900000] (2:Bob@Fafard) Trying to acquire 1
index 57fe178..0e8d6f2 100644 (file)
@@ -1,7 +1,7 @@
 #! ./tesh
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/task-priority$EXEEXT ${srcdir:=.}/small_platform.xml  ${srcdir:=.}/../msg/task-priority/task-priority_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/task-priority$EXEEXT ${platfdir}/small_platform.xml  ${srcdir}/task-priority_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:test@Fafard) Hello! Running a task of size 7.6296e+07 with priority 1
 > [  0.000000] (2:test@Fafard) Hello! Running a task of size 7.6296e+07 with priority 2
 > [  1.500000] (2:test@Fafard) Goodbye now!
index ebe181c..638b58d 100644 (file)
@@ -2,7 +2,7 @@
 
 p Tracing multiple categories master/worker application
 
-$ $SG_TEST_EXENV ${bindir:=.}/trace-categories$EXEEXT --cfg=tracing:yes --cfg=tracing/buffer:yes --cfg=tracing/filename:categories.trace --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-categories$EXEEXT --cfg=tracing:yes --cfg=tracing/buffer:yes --cfg=tracing/filename:categories.trace --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes ${platfdir}/small_platform.xml ${srcdir}/../app-masterworker/app-masterworker_d.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/buffer' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'categories.trace'
index 4331c82..6797d79 100644 (file)
@@ -1,7 +1,7 @@
 #! ./tesh
 
 p Tracing user variables for hosts
-$ $SG_TEST_EXENV ${bindir:=.}/trace-host-user-variables$EXEEXT --cfg=tracing:yes  --cfg=tracing/platform:yes ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-host-user-variables$EXEEXT --cfg=tracing:yes --cfg=tracing/platform:yes ${platfdir}/small_platform.xml ${srcdir}/../app-masterworker/app-masterworker_d.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/platform' to 'yes'
 > [0.004078] [msg_test/INFO] Declared host variables:
@@ -19,4 +19,4 @@ $ $SG_TEST_EXENV ${bindir:=.}/trace-host-user-variables$EXEEXT --cfg=tracing:yes
 $ rm -f simgrid.trace
 
 p Not tracing user variables
-$ $SG_TEST_EXENV ${bindir:=.}/trace-host-user-variables$EXEEXT ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-host-user-variables$EXEEXT ${platfdir}/small_platform.xml ${srcdir}/../app-masterworker/app-masterworker_d.xml
index 9cf7435..af93239 100644 (file)
@@ -1,7 +1,7 @@
 #! ./tesh
 
 p Trace user variables associated to links of the platform file
-$ $SG_TEST_EXENV ${bindir:=.}/trace-link-user-variables$EXEEXT --cfg=tracing:yes --cfg=tracing/platform:yes ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-link-user-variables$EXEEXT --cfg=tracing:yes --cfg=tracing/platform:yes ${platfdir}/small_platform.xml ${srcdir}/../app-masterworker/app-masterworker_d.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/platform' to 'yes'
 
index 0ce739d..f8192fd 100644 (file)
@@ -1,7 +1,7 @@
 #! ./tesh
 
 p Tracing master/worker application
-$ $SG_TEST_EXENV ${bindir:=.}/trace-masterworker$EXEEXT --cfg=tracing:yes --cfg=tracing/buffer:yes --cfg=tracing/filename:trace-masterworker.trace --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-masterworker$EXEEXT --cfg=tracing:yes --cfg=tracing/buffer:yes --cfg=tracing/filename:trace-masterworker.trace --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes ${platfdir}/small_platform.xml ${srcdir}/../app-masterworker/app-masterworker_d.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/buffer' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'trace-masterworker.trace'
@@ -16,7 +16,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/trace-masterworker$EXEEXT --cfg=tracing:yes --cfg=
 > [4.214821] [msg_trace_masterworker/INFO] msmark
 
 p Tracing master/worker application with xml config
-$ $SG_TEST_EXENV ${bindir:=.}/trace-masterworker$EXEEXT ${srcdir:=.}/config_tracing.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-masterworker$EXEEXT ${platfdir}/config_tracing.xml ${srcdir}/../app-masterworker/app-masterworker_d.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/buffer' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
@@ -31,10 +31,10 @@ $ $SG_TEST_EXENV ${bindir:=.}/trace-masterworker$EXEEXT ${srcdir:=.}/config_trac
 > [4.214821] [msg_trace_masterworker/INFO] msmark
 
 p Not tracing master/worker application
-$ $SG_TEST_EXENV ${bindir:=.}/trace-masterworker$EXEEXT ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-masterworker$EXEEXT ${platfdir}/small_platform.xml ${srcdir}/../app-masterworker/app-masterworker_d.xml
 
 p Testing tracing by process
-$ $SG_TEST_EXENV ${bindir:=.}/trace-masterworker$EXEEXT --cfg=tracing:yes --cfg=tracing/msg/process:yes --cfg=tracing/buffer:yes --cfg=tracing/filename:trace-masterworker.trace --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes  ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-masterworker$EXEEXT --cfg=tracing:yes --cfg=tracing/msg/process:yes --cfg=tracing/buffer:yes --cfg=tracing/filename:trace-masterworker.trace --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes ${platfdir}/small_platform.xml ${srcdir}/../app-masterworker/app-masterworker_d.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/msg/process' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/buffer' to 'yes'
@@ -49,5 +49,4 @@ $ $SG_TEST_EXENV ${bindir:=.}/trace-masterworker$EXEEXT --cfg=tracing:yes --cfg=
 > [4.214821] [msg_trace_masterworker/INFO] Declared marks:
 > [4.214821] [msg_trace_masterworker/INFO] msmark
 
-
 $ rm -rf trace-masterworker.trace
index 92cd632..a22f7aa 100644 (file)
@@ -1,7 +1,7 @@
 #! ./tesh
 
 p Tracing platform only
-$ $SG_TEST_EXENV ${bindir:=.}/trace-platform$EXEEXT --cfg=tracing:yes --cfg=tracing/filename:trace_platform.trace --cfg=tracing/categorized:yes ${srcdir:=.}/small_platform.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-platform$EXEEXT --cfg=tracing:yes --cfg=tracing/filename:trace_platform.trace --cfg=tracing/categorized:yes ${platfdir}/small_platform.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'trace_platform.trace'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
@@ -335,7 +335,7 @@ $ tail -n +3 trace_platform.trace
 
 $ rm -f trace_platform.trace
 
-$ $SG_TEST_EXENV ${bindir:=.}/trace-platform$EXEEXT --cfg=tracing:yes  --cfg=tracing/filename:trace_platform.trace --cfg=tracing/categorized:yes ${srcdir:=.}/g5k.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-platform$EXEEXT --cfg=tracing:yes --cfg=tracing/filename:trace_platform.trace --cfg=tracing/categorized:yes ${platfdir}/g5k.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'trace_platform.trace'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
index b80073f..0a5d7c6 100644 (file)
@@ -1,7 +1,7 @@
 #! ./tesh
 
 p Tracing processes
-$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing:yes --cfg=tracing/buffer:yes --cfg=tracing/filename:procmig.trace --cfg=tracing/msg/process:yes ${srcdir:=.}/small_platform.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing:yes --cfg=tracing/buffer:yes --cfg=tracing/filename:procmig.trace --cfg=tracing/msg/process:yes ${platfdir}/small_platform.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/buffer' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'procmig.trace'
@@ -393,7 +393,7 @@ $ tail -n +3 procmig.trace
 > 7 18.155073 1 1
 > 7 18.155073 11 31
 
-$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing:yes --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes --cfg=tracing/buffer:yes --cfg=tracing/filename:procmig.trace --cfg=tracing/msg/process:yes ${srcdir:=.}/small_platform.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing:yes --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes --cfg=tracing/buffer:yes --cfg=tracing/filename:procmig.trace --cfg=tracing/msg/process:yes ${platfdir}/small_platform.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/uncategorized' to 'yes'
@@ -996,7 +996,7 @@ $ tail -n +3 procmig.trace
 > 7 18.155073 1 1
 > 7 18.155073 13 31
 
-$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes --cfg=tracing/buffer:no --cfg=tracing/filename:procmig.trace --cfg=tracing/msg/process:yes ${srcdir:=.}/small_platform.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes --cfg=tracing/buffer:no --cfg=tracing/filename:procmig.trace --cfg=tracing/msg/process:yes ${platfdir}/small_platform.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/uncategorized' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/buffer' to 'no'
@@ -1598,10 +1598,10 @@ $ tail -n +3 procmig.trace
 > 7 18.155073 1 1
 > 7 18.155073 13 31
 
-$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing:no ${srcdir:=.}/small_platform.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing:no ${platfdir}/small_platform.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'no'
 
-$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing:yes --cfg=tracing/categorized:yes ${srcdir:=.}/small_platform.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing:yes --cfg=tracing/categorized:yes ${platfdir}/small_platform.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
 
@@ -1934,7 +1934,7 @@ $ tail -n +3 simgrid.trace
 > 7 18.155073 1 1
 > 7 18.155073 3 31
 
-$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing:yes --cfg=tracing/uncategorized:yes ${srcdir:=.}/small_platform.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing:yes --cfg=tracing/uncategorized:yes ${platfdir}/small_platform.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/uncategorized' to 'yes'
 
@@ -2414,7 +2414,7 @@ $ tail -n +3 simgrid.trace
 > 7 18.155073 1 1
 > 7 18.155073 4 31
 
-$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing:yes --cfg=tracing/msg/process:yes ${srcdir:=.}/small_platform.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-process-migration$EXEEXT --cfg=tracing:yes --cfg=tracing/msg/process:yes ${platfdir}/small_platform.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/msg/process' to 'yes'
 
index 33ba72b..fe50f9e 100644 (file)
@@ -1,7 +1,7 @@
 #! ./tesh
 
 p Trace user variables associated to links of the platform file
-$ $SG_TEST_EXENV ${bindir:=.}/trace-route-user-variables$EXEEXT --cfg=tracing:yes --cfg=tracing/platform:yes ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/app-masterworker/app-masterworker_d.xml
+$ $SG_TEST_EXENV ${bindir:=.}/trace-route-user-variables$EXEEXT --cfg=tracing:yes --cfg=tracing/platform:yes ${platfdir}/small_platform.xml ${srcdir}/../app-masterworker/app-masterworker_d.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/platform' to 'yes'
 
index 2cd0fba..1a15301 100644 (file)
@@ -1,9 +1,10 @@
 foreach (example actions-comm actions-storage 
                  actor-create actor-daemon actor-execute actor-kill actor-lifetime actor-migration actor-suspend actor-priority actor-yield
-                 app-masterworker app-pingpong app-token-ring energy-pstate
-                async-wait async-waitany async-waitall
-                energy-link
-                plugin-hostload io mutex)
+                 app-masterworker app-pingpong app-token-ring
+                 async-wait async-waitany async-waitall
+                 energy-link energy-pstate energy-ptask
+                 io io-file-remote io-storage-raw
+                 platform-properties plugin-hostload mutex)
   add_executable       (s4u-${example}  ${example}/s4u-${example}.cpp)
   target_link_libraries(s4u-${example}  simgrid)
   set_target_properties(s4u-${example}  PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${example})
@@ -47,6 +48,7 @@ set(xml_files     ${xml_files}    ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-a
                                   ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm_d.xml
                                   ${CMAKE_CURRENT_SOURCE_DIR}/actions-storage/s4u-actions-storage_d.xml
                                   ${CMAKE_CURRENT_SOURCE_DIR}/actor-create/s4u-actor-create_d.xml
+                                  ${CMAKE_CURRENT_SOURCE_DIR}/actor-lifetime/s4u-actor-lifetime_d.xml
                                   ${CMAKE_CURRENT_SOURCE_DIR}/actor-priority/s4u-actor-priority_d.xml
                                   ${CMAKE_CURRENT_SOURCE_DIR}/actor-yield/s4u-actor-yield_d.xml
                                   ${CMAKE_CURRENT_SOURCE_DIR}/app-bittorrent/s4u-app-bittorrent_d.xml
@@ -55,7 +57,8 @@ set(xml_files     ${xml_files}    ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-a
                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-waitall/s4u-async-waitall_d.xml
                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/s4u-async-wait_d.xml
                                   ${CMAKE_CURRENT_SOURCE_DIR}/dht-chord/s4u-dht-chord_d.xml
-                                  ${CMAKE_CURRENT_SOURCE_DIR}/actor-lifetime/s4u-actor-lifetime_d.xml
+                                  ${CMAKE_CURRENT_SOURCE_DIR}/io-file-remote/s4u-io-file-remote_d.xml
+                                  ${CMAKE_CURRENT_SOURCE_DIR}/platform-properties/s4u-platform-properties_d.xml
                  PARENT_SCOPE)
 set(txt_files     ${txt_files}    ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm-split-p0.txt
                                   ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm-split-p1.txt
@@ -65,10 +68,15 @@ set(txt_files     ${txt_files}    ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-a
 
 foreach(example actions-comm actions-storage 
                 actor-create actor-daemon actor-execute actor-kill actor-lifetime actor-migration actor-suspend actor-priority actor-yield
-                app-bittorrent app-masterworker app-pingpong app-token-ring energy-pstate
-               async-wait async-waitall async-waitany
-               dht-chord 
-               energy-link
-               plugin-hostload io mutex)
-  ADD_TESH_FACTORIES(s4u-${example} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_CURRENT_BINARY_DIR}/${example} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_HOME_DIRECTORY}/examples/s4u/${example} s4u-${example}.tesh)
+                app-bittorrent app-masterworker app-pingpong app-token-ring 
+                async-wait async-waitall async-waitany
+                dht-chord 
+                energy-link energy-pstate energy-ptask
+                platform-properties plugin-hostload mutex
+                io io-file-remote io-storage-raw)
+  ADD_TESH_FACTORIES(s4u-${example} "thread;ucontext;raw;boost" 
+                                    --setenv bindir=${CMAKE_CURRENT_BINARY_DIR}/${example} 
+                                   --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms 
+                                   --cd ${CMAKE_CURRENT_BINARY_DIR}/${example} 
+                                   ${CMAKE_HOME_DIRECTORY}/examples/s4u/${example}/s4u-${example}.tesh)
 endforeach()
index 42cf0f8..5583e38 100644 (file)
@@ -146,6 +146,21 @@ also the tesh files in the example directories for details.
     Presents a set of event handlers reproducing classical I/O
     primitives (open, read, close).
 
+@subsection s4u_ex_io Simulating disks and files
+
+The examples of this section demonstrate how to interact with the
+simulated storages.
+
+  - <b>Access to raw storage devices </b>.
+    @ref examples/s4u/io-raw-storage/s4u-io-raw-storage.cpp \n
+    This example illustrates how to simply read and write data on a
+    simulated storage resource.
+
+  - <b>Remote I/O</b>. 
+    @ref examples/s4u/io-file-remote/s4u-io-file-remote.cpp \n
+    I/O operations on files can also be done in a remote fashion, 
+    i.e. when the accessed disk is not mounted on the caller's host.
+
 */
 
 /**
@@ -163,7 +178,8 @@ also the tesh files in the example directories for details.
 @example examples/s4u/app-token-ring/s4u-app-token-ring.cpp
 @example examples/s4u/app-masterworker/s4u-app-masterworker.cpp
 @example examples/s4u/app-pingpong/s4u-app-pingpong.cpp
-
+@example examples/s4u/io-file-remote/s4u-io-file-remote.cpp
+@example examples/s4u/io-raw-storage/s4u-io-raw-storage.cpp
 @example examples/s4u/mutex/s4u-mutex.cpp
 
 */
\ No newline at end of file
index 53e6b04..58cc625 100644 (file)
@@ -1,12 +1,12 @@
 ! output sort 19
-$ ${bindir:=.}/s4u-actions-comm --log=actions.thres=verbose ${srcdir:=.}/small_platform_fatpipe.xml s4u-actions-comm-split_d.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ ${bindir:=.}/s4u-actions-comm --log=actions.thres=verbose ${platfdir}/small_platform_fatpipe.xml s4u-actions-comm-split_d.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [ 20.703314] (p0@Tremblay) p0 recv p1 20.703314
 > [ 20.703314] (p1@Ruby) p1 send p0 1e10 20.703314
 > [ 30.897513] (p0@Tremblay) p0 compute 1e9 10.194200
 > [ 30.897513] (p1@Ruby) p1 compute 1e9 10.194200
 > [ 30.897513] (maestro@) Simulation time 30.8975
 
-$ ${bindir:=.}/s4u-actions-comm --log=actions.thres=verbose ${srcdir:=.}/small_platform_fatpipe.xml s4u-actions-comm_d.xml s4u-actions-comm.txt "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ ${bindir:=.}/s4u-actions-comm --log=actions.thres=verbose ${platfdir}/small_platform_fatpipe.xml s4u-actions-comm_d.xml s4u-actions-comm.txt "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [ 20.703314] (p0@Tremblay) p0 recv p1 20.703314
 > [ 20.703314] (p1@Ruby) p1 send p0 1e10 20.703314
 > [ 30.897513] (p0@Tremblay) p0 compute 1e9 10.194200
index 39d8bd5..fde216e 100644 (file)
@@ -4,7 +4,9 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "simgrid/s4u.hpp"
+#include "src/plugins/file_system/FileSystem.hpp"
 #include <boost/algorithm/string/join.hpp>
+#include <simgrid/plugins/file_system.h>
 #include <xbt/replay.hpp>
 #include <xbt/str.h>
 
index 1881e68..ba5b8bc 100644 (file)
@@ -1,5 +1,5 @@
 ! output sort 19
-$ ${bindir:=.}/s4u-actions-storage --log=storage_actions.thres=verbose ${srcdir:=.}/storage/storage.xml s4u-actions-storage_d.xml s4u-actions-storage.txt "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ ${bindir:=.}/s4u-actions-storage --log=storage_actions.thres=verbose ${platfdir}/storage/storage.xml s4u-actions-storage_d.xml s4u-actions-storage.txt "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (p0@denise) p0 open /home/lib/libsimgrid.so.3.6.2 0.000000
 > [  0.063552] (p0@denise) p0 read /home/lib/libsimgrid.so.3.6.2 12710497 0.063552
 > [  0.063552] (p0@denise) p0 close /home/lib/libsimgrid.so.3.6.2 0.000000
index ca9781e..aff48b5 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing the process daemonization feature
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-daemon ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-daemon ${platfdir}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (worker@Boivin) Let's do some work (for 10 sec on Boivin).
 > [  0.000000] (daemon@Tremblay) Hello from the infinite loop
 > [  3.000000] (daemon@Tremblay) Hello from the infinite loop
index e4575eb..deba26d 100644 (file)
@@ -1,4 +1,4 @@
 #! ./tesh
 
 p Start remote processes 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-execute$EXEEXT ${srcdir:=.}/small_platform.xml 
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-execute$EXEEXT ${platfdir}/small_platform.xml 
index fe726b4..78658b9 100644 (file)
@@ -13,7 +13,7 @@ static int on_exit(void*, void*)
   return 0;
 }
 
-static void victim()
+static void victimA_fun()
 {
   simgrid::s4u::this_actor::onExit(on_exit, nullptr);
   XBT_INFO("Hello!");
@@ -24,19 +24,29 @@ static void victim()
   XBT_INFO("Bye!"); /* - But will never reach the end of it */
 }
 
+static void victimB_fun()
+{
+  XBT_INFO("Terminate before being killed");
+}
+
 static void killer()
 {
   XBT_INFO("Hello!"); /* - First start a victim process */
-  simgrid::s4u::ActorPtr poor_victim =
-      simgrid::s4u::Actor::createActor("victim", simgrid::s4u::Host::by_name("Fafard"), victim);
+  simgrid::s4u::ActorPtr victimA =
+      simgrid::s4u::Actor::createActor("victim A", simgrid::s4u::Host::by_name("Fafard"), victimA_fun);
+  simgrid::s4u::ActorPtr victimB =
+      simgrid::s4u::Actor::createActor("victim B", simgrid::s4u::Host::by_name("Jupiter"), victimB_fun);
   simgrid::s4u::this_actor::sleep_for(10); /* - Wait for 10 seconds */
 
-  XBT_INFO("Resume the victim"); /* - Resume it from its suspended state */
-  poor_victim->resume();
+  XBT_INFO("Resume the victim A"); /* - Resume it from its suspended state */
+  victimA->resume();
   simgrid::s4u::this_actor::sleep_for(2);
 
-  XBT_INFO("Kill the victim"); /* - and then kill it */
-  poor_victim->kill();
+  XBT_INFO("Kill the victim A"); /* - and then kill it */
+  victimA->kill();
+
+  XBT_INFO("Kill victimB, even if it's already dead"); /* that's a no-op, there is no zombies in SimGrid */
+  victimB->kill();
   simgrid::s4u::this_actor::sleep_for(1);
 
   XBT_INFO("Killing everybody but myself");
@@ -54,12 +64,8 @@ int main(int argc, char* argv[])
   xbt_assert(argc == 2, "Usage: %s platform_file\n\tExample: %s msg_platform.xml\n", argv[0], argv[0]);
 
   e.loadPlatform(argv[1]); /* - Load the platform description */
-  /* - Create and deploy killer process, that will create the victim process  */
+  /* - Create and deploy killer process, that will create the victim actors  */
   simgrid::s4u::Actor::createActor("killer", simgrid::s4u::Host::by_name("Tremblay"), killer);
-  simgrid::s4u::Actor::createActor("Alice", simgrid::s4u::Host::by_name("Jupiter"), victim);
-  simgrid::s4u::Actor::createActor("Bob", simgrid::s4u::Host::by_name("Ginette"), victim);
-  simgrid::s4u::Actor::createActor("Carol", simgrid::s4u::Host::by_name("Bourassa"), victim);
-  simgrid::s4u::Actor::createActor("Dave", simgrid::s4u::Host::by_name("Boivin"), victim);
 
   e.run(); /* - Run the simulation */
 
index 0f68771..9e5b0a2 100644 (file)
@@ -1,25 +1,15 @@
 #! ./tesh
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-kill ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-kill ${platfdir}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (killer@Tremblay) Hello!
-> [  0.000000] (Alice@Jupiter) Hello!
-> [  0.000000] (Alice@Jupiter) Suspending myself
-> [  0.000000] (Bob@Ginette) Hello!
-> [  0.000000] (Bob@Ginette) Suspending myself
-> [  0.000000] (Carol@Bourassa) Hello!
-> [  0.000000] (Carol@Bourassa) Suspending myself
-> [  0.000000] (Dave@Boivin) Hello!
-> [  0.000000] (Dave@Boivin) Suspending myself
-> [  0.000000] (victim@Fafard) Hello!
-> [  0.000000] (victim@Fafard) Suspending myself
-> [ 10.000000] (killer@Tremblay) Resume the victim
-> [ 10.000000] (victim@Fafard) OK, OK. Let's work
-> [ 12.000000] (killer@Tremblay) Kill the victim
-> [ 12.000000] (victim@Fafard) I have been killed!
+> [  0.000000] (victim A@Fafard) Hello!
+> [  0.000000] (victim A@Fafard) Suspending myself
+> [  0.000000] (victim B@Jupiter) Terminate before being killed
+> [ 10.000000] (killer@Tremblay) Resume the victim A
+> [ 10.000000] (victim A@Fafard) OK, OK. Let's work
+> [ 12.000000] (killer@Tremblay) Kill the victim A
+> [ 12.000000] (victim A@Fafard) I have been killed!
+> [ 12.000000] (killer@Tremblay) Kill victimB, even if it's already dead
 > [ 13.000000] (killer@Tremblay) Killing everybody but myself
-> [ 13.000000] (Alice@Jupiter) I have been killed!
-> [ 13.000000] (Bob@Ginette) I have been killed!
-> [ 13.000000] (Carol@Bourassa) I have been killed!
-> [ 13.000000] (Dave@Boivin) I have been killed!
 > [ 13.000000] (killer@Tremblay) OK, goodbye now. I commit a suicide.
 > [ 13.000000] (maestro@) Simulation time 13
index 9b525ce..e8743a1 100644 (file)
@@ -1,6 +1,6 @@
 #! ./tesh
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-lifetime ${srcdir:=.}/cluster.xml ${srcdir:=.}/../s4u/actor-lifetime/s4u-actor-lifetime_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-lifetime ${platfdir}/cluster.xml s4u-actor-lifetime_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sleeper@node-0.acme.org) Hello! I go to sleep.
 > [  0.000000] (2:sleeper@node-1.acme.org) Hello! I go to sleep.
 > [  2.000000] (3:sleeper@node-0.acme.org) Hello! I go to sleep.
index cf20427..3d54d91 100644 (file)
@@ -3,7 +3,7 @@
 p Testing the migration feature of MSG
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-migration ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-migration ${platfdir}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (emigrant@Jacquelin) I'll look for a new job on another machine ('Boivin') where the grass is greener.
 > [  0.000000] (emigrant@Boivin) Yeah, found something to do
 > [  0.000000] (policeman@Boivin) Wait at the checkpoint.
index 82916b3..0ceab56 100644 (file)
@@ -1,7 +1,7 @@
 #! ./tesh
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-priority$EXEEXT ${srcdir:=.}/small_platform.xml  ${srcdir:=.}/../s4u/actor-priority/s4u-actor-priority_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-priority$EXEEXT ${platfdir}/small_platform.xml  s4u-actor-priority_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:test@Fafard) Hello! Running an actor of size 7.6296e+07 with priority 1
 > [  0.000000] (2:test@Fafard) Hello! Running an actor of size 7.6296e+07 with priority 2
 > [  1.500000] (2:test@Fafard) Goodbye now!
index f5d897c..1d6e410 100644 (file)
@@ -1,9 +1,9 @@
 #! ./tesh
 
-p Testing the suspend/resume feature of MSG
+p Testing the suspend/resume feature of S4U
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-suspend ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-suspend ${platfdir}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (dream_master@Boivin) Let's create a lazy guy.
 > [  0.000000] (Lazy@Boivin) Nobody's watching me ? Let's go to sleep.
 > [  0.000000] (dream_master@Boivin) Let's wait a little bit...
index 938470d..eab86b4 100644 (file)
@@ -1,5 +1,5 @@
 #! ./tesh
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-yield ${srcdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/../s4u/actor-yield/s4u-actor-yield_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-yield ${platfdir}/small_platform_fatpipe.xml s4u-actor-yield_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:yielder@Tremblay) I yielded 10 times. Goodbye now!
 > [  0.000000] (2:yielder@Ruby) I yielded 15 times. Goodbye now!
index cd07097..541e900 100644 (file)
@@ -1,10 +1,10 @@
 #! ./tesh
 
-p Testing the Bittorrent implementation with MSG
+p Testing the Bittorrent implementation with S4U
 
 ! timeout 10
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-bittorrent ${srcdir:=.}/cluster.xml ${srcdir:=.}/../s4u/app-bittorrent/s4u-app-bittorrent_d.xml "--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-bittorrent ${platfdir}/cluster.xml s4u-app-bittorrent_d.xml "--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n"
 > [    0.000000] (1:tracker@node-0.acme.org) Tracker launched.
 > [    0.000000] (2:peer@node-1.acme.org) Hi, I'm joining the network with id 2
 > [    0.000000] (3:peer@node-2.acme.org) Hi, I'm joining the network with id 3
index e2c8b75..99c0f65 100644 (file)
@@ -3,7 +3,7 @@
 p Testing a simple master/worker example application (mailbox version)
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-masterworker$EXEEXT ${srcdir:=.}/small_platform_with_routers.xml ${srcdir:=.}/../s4u/app-masterworker/s4u-app-masterworker_d.xml --cfg=network/crosstraffic:0 --trace "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-masterworker$EXEEXT ${platfdir}/small_platform_with_routers.xml s4u-app-masterworker_d.xml --cfg=network/crosstraffic:0 --trace "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (maestro@) Configuration change: Set 'network/crosstraffic' to '0'
 > [  0.000000] (master@Tremblay) Got 5 workers and 20 tasks to process
 > [  0.000000] (master@Tremblay) Sending "Task_0" (of 20) to mailbox "worker-0"
index 3db5c8a..c0a2a11 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing with default compound
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${platfdir}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  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)
@@ -14,7 +14,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platfor
 
 p Testing with default compound Full network optimization
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml "--cfg=network/optim:Full" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${platfdir}/small_platform.xml "--cfg=network/optim:Full" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/optim' to 'Full'
 > [  0.000000] (1:pinger@Tremblay) Ping -> Jupiter
 > [  0.000000] (2:ponger@Jupiter) Pong -> Tremblay
@@ -27,7 +27,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platfor
 
 p Testing the deprecated CM02 network model
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml --cfg=cpu/model:Cas01 --cfg=network/model:CM02 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${platfdir}/small_platform.xml --cfg=cpu/model:Cas01 --cfg=network/model:CM02 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (1:pinger@Tremblay) Ping -> Jupiter
@@ -41,7 +41,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platfor
 
 p Testing the surf network Reno fairness model using lagrangian approach
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Reno" --log=surf_lagrange.thres=critical "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${platfdir}/small_platform.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Reno" --log=surf_lagrange.thres=critical "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'Reno'
@@ -56,7 +56,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platfor
 
 p Testing the surf network Reno2 fairness model using lagrangian approach
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Reno2" --log=surf_lagrange.thres=critical "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${platfdir}/small_platform.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Reno2" --log=surf_lagrange.thres=critical "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'Reno2'
@@ -71,7 +71,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platfor
 
 p Testing the surf network Vegas fairness model using lagrangian approach
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Vegas" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${platfdir}/small_platform.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Vegas" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'Vegas'
@@ -86,7 +86,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platfor
 
 p Testing the surf network constant model
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${srcdir:=.}/small_platform_constant.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Constant" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-pingpong$EXEEXT ${platfdir}/small_platform_constant.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Constant" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'Constant'
index 99a4567..681a760 100644 (file)
@@ -1,6 +1,6 @@
 #! ./tesh
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-token-ring ${srcdir:=.}/routing_cluster.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-token-ring ${platfdir}/routing_cluster.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (maestro@) Number of hosts '6'
 > [  0.000000] (0@host1) Host "0" send 'Token' to Host "1"
 > [  0.017354] (1@host2) Host "1" received "Token"
@@ -16,7 +16,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/s4u-app-token-ring ${srcdir:=.}/routing_cluster.xm
 > [  0.131796] (0@host1) Host "0" received "Token"
 > [  0.131796] (maestro@) Simulation time 0.131796
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-token-ring ${srcdir:=.}/two_peers.xml "--log=root.fmt:[%12.6r]%e(%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-token-ring ${platfdir}/two_peers.xml "--log=root.fmt:[%12.6r]%e(%P@%h)%e%m%n"
 > [    0.000000] (maestro@) Number of hosts '2'
 > [    0.000000] (0@100030591) Host "0" send 'Token' to Host "1"
 > [    0.624423] (1@100036570) Host "1" received "Token"
@@ -24,7 +24,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/s4u-app-token-ring ${srcdir:=.}/two_peers.xml "--l
 > [    1.248846] (0@100030591) Host "0" received "Token"
 > [    1.248846] (maestro@) Simulation time 1.24885
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-token-ring ${srcdir:=.}/meta_cluster.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-app-token-ring ${platfdir}/meta_cluster.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (maestro@) Number of hosts '60'
 > [  0.000000] (0@host-1.cluster1) Host "0" send 'Token' to Host "1"
 > [  0.030364] (1@host-1.cluster2) Host "1" received "Token"
index 26cf9f9..eaf9810 100644 (file)
@@ -2,7 +2,7 @@
 
 p Test1 Sleep_sender > Sleep_receiver
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-async-wait ${srcdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/../s4u/async-wait/s4u-async-wait_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-async-wait ${platfdir}/small_platform_fatpipe.xml s4u-async-wait_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sender@Tremblay) Send 'Message 0' to 'receiver-0'
 > [  0.000000] (2:receiver@Ruby) Wait for my first message
 > [  0.000000] (1:sender@Tremblay) Send 'Message 1' to 'receiver-0'
index 0ae70d1..6c3cda3 100644 (file)
@@ -1,6 +1,6 @@
 #! ./tesh
 
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-async-waitall ${srcdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/../s4u/async-waitall/s4u-async-waitall_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-async-waitall ${platfdir}/small_platform_fatpipe.xml s4u-async-waitall_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sender@Tremblay) Send 'Message 0' to 'receiver-0'
 > [  0.000000] (2:receiver@Ruby) Wait for my first message
 > [  0.000000] (3:receiver@Perl) Wait for my first message
index 1ec6a42..ceab52a 100644 (file)
@@ -3,7 +3,7 @@
 p Testing this_actor->wait_any()
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-async-waitany ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../s4u/async-waitany/s4u-async-waitany_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-async-waitany ${platfdir}/small_platform.xml s4u-async-waitany_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sender@Tremblay) Send 'Message 0' to 'receiver-0'
 > [  0.000000] (2:receiver@Fafard) Wait for my first message
 > [  0.000000] (3:receiver@Jupiter) Wait for my first message
index 3096c45..ee94501 100644 (file)
@@ -3,7 +3,7 @@
 p Testing the Chord implementation with MSG
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/s4u-dht-chord$EXEEXT -nb_bits=3 ${srcdir:=.}/cluster.xml ${srcdir:=.}/../s4u/dht-chord/s4u-dht-chord_d.xml --log=s4u_chord.thres:verbose "--log=root.fmt:[%10.5r]%e(%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-dht-chord$EXEEXT -nb_bits=3 ${platfdir}/cluster.xml s4u-dht-chord_d.xml --log=s4u_chord.thres:verbose "--log=root.fmt:[%10.5r]%e(%P@%h)%e%m%n"
 > [   0.00000] (node@node-0.acme.org) My finger table:
 > [   0.00000] (node@node-0.acme.org) Start | Succ
 > [   0.00000] (node@node-0.acme.org)    3  |  42
index 2be5e34..5febcd0 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing the mechanism for computing link energy consumption (using CM02 as a network model)
 
-$ ${bindir:=.}/s4u-energy-link$EXEEXT ${srcdir:=.}/../platforms/energy_platform.xml  "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" --cfg=network/model:CM02 --cfg=network/crosstraffic:no
+$ ${bindir:=.}/s4u-energy-link$EXEEXT ${platfdir}/energy_platform.xml  "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" --cfg=network/model:CM02 --cfg=network/crosstraffic:no
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/crosstraffic' to 'no'
 > [  0.000000] (0:maestro@) Activating the SimGrid link energy plugin
@@ -15,7 +15,7 @@ $ ${bindir:=.}/s4u-energy-link$EXEEXT ${srcdir:=.}/../platforms/energy_platform.
 
 p And now test with 500000 bytes
 
-$ ${bindir:=.}/s4u-energy-link$EXEEXT ${srcdir:=.}/../platforms/energy_platform.xml 1 50000000 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" --cfg=network/model:CM02 --cfg=network/crosstraffic:no
+$ ${bindir:=.}/s4u-energy-link$EXEEXT ${platfdir}/energy_platform.xml 1 50000000 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" --cfg=network/model:CM02 --cfg=network/crosstraffic:no
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/crosstraffic' to 'no'
 > [  0.000000] (0:maestro@) Activating the SimGrid link energy plugin
index 6a2e593..75de0f9 100644 (file)
@@ -2,7 +2,7 @@
 
 p Testing the DVFS-related functions
 
-$ ${bindir:=.}/s4u-energy-pstate$EXEEXT ${srcdir:=.}/../platforms/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/s4u-energy-pstate$EXEEXT ${platfdir}/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:dvfs_test@MyHost1) Count of Processor states=3
 > [  0.000000] (1:dvfs_test@MyHost1) Current power peak=100000000.000000
 > [  0.000000] (2:dvfs_test@MyHost2) Count of Processor states=3
@@ -21,7 +21,7 @@ $ ${bindir:=.}/s4u-energy-pstate$EXEEXT ${srcdir:=.}/../platforms/energy_platfor
 > [  6.000000] (2:dvfs_test@MyHost2) Current power peak=20000000.000000
 > [  6.000000] (0:maestro@) Total simulation time: 6.000000e+00
 
-$ ${bindir:=.}/s4u-energy-pstate$EXEEXT ${srcdir:=.}/../platforms/energy_cluster.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/s4u-energy-pstate$EXEEXT ${platfdir}/energy_cluster.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:dvfs_test@MyHost1) Count of Processor states=3
 > [  0.000000] (1:dvfs_test@MyHost1) Current power peak=100000000.000000
 > [  0.000000] (2:dvfs_test@MyHost2) Count of Processor states=3
diff --git a/examples/s4u/energy-ptask/s4u-energy-ptask.cpp b/examples/s4u/energy-ptask/s4u-energy-ptask.cpp
new file mode 100644 (file)
index 0000000..e699015
--- /dev/null
@@ -0,0 +1,91 @@
+/* Copyright (c) 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/plugins/energy.h"
+#include <simgrid/s4u.hpp>
+#include <xbt/ex.hpp>
+#include <xbt/log.h>
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_energyptask, "Messages specific for this s4u example");
+
+static void runner()
+{
+  /* Retrieve the list of all hosts as an array of hosts */
+  int hosts_count            = sg_host_count();
+  simgrid::s4u::Host** hosts = sg_host_list();
+
+  XBT_INFO("First, build a classical parallel task, with 1 Gflop to execute on each node, "
+           "and 10MB to exchange between each pair");
+  double* computation_amounts   = new double[hosts_count]();
+  double* communication_amounts = new double[hosts_count * hosts_count]();
+
+  for (int i               = 0; i < hosts_count; i++)
+    computation_amounts[i] = 1e9; // 1 Gflop
+
+  for (int i = 0; i < hosts_count; i++)
+    for (int j = i + 1; j < hosts_count; j++)
+      communication_amounts[i * hosts_count + j] = 1e7; // 10 MB
+
+  simgrid::s4u::this_actor::parallel_execute(hosts_count, hosts, computation_amounts, communication_amounts);
+
+  XBT_INFO("We can do the same with a timeout of one second enabled.");
+  computation_amounts   = new double[hosts_count]();
+  communication_amounts = new double[hosts_count * hosts_count]();
+
+  for (int i               = 0; i < hosts_count; i++)
+    computation_amounts[i] = 1e9; // 1 Gflop
+
+  for (int i = 0; i < hosts_count; i++)
+    for (int j = i + 1; j < hosts_count; j++)
+      communication_amounts[i * hosts_count + j] = 1e7; // 10 MB
+
+  try {
+    simgrid::s4u::this_actor::parallel_execute(hosts_count, hosts, computation_amounts, communication_amounts,
+                                               1.0 /* timeout (in seconds)*/);
+    XBT_WARN("Woops, this did not timeout as expected... Please report that bug.");
+  } catch (xbt_ex& e) {
+    /* Do nothing this exception on timeout was expected */
+  }
+
+  XBT_INFO("Then, build a parallel task involving only computations and no communication (1 Gflop per node)");
+  computation_amounts = new double[hosts_count]();
+  for (int i               = 0; i < hosts_count; i++)
+    computation_amounts[i] = 1e9; // 1 Gflop
+  simgrid::s4u::this_actor::parallel_execute(hosts_count, hosts, computation_amounts, nullptr /* no comm */);
+
+  XBT_INFO("Then, build a parallel task with no computation nor communication (synchro only)");
+  computation_amounts   = new double[hosts_count]();
+  communication_amounts = new double[hosts_count * hosts_count]();
+  simgrid::s4u::this_actor::parallel_execute(hosts_count, hosts, computation_amounts, communication_amounts);
+
+  XBT_INFO("Finally, trick the ptask to do a 'remote execution', on host %s", hosts[1]->getCname());
+  computation_amounts = new double[1]{1e9};
+
+  simgrid::s4u::Host* remote[] = {hosts[1]};
+  simgrid::s4u::this_actor::parallel_execute(1, remote, computation_amounts, nullptr);
+
+  XBT_INFO("Goodbye now!");
+  std::free(hosts);
+}
+
+int main(int argc, char* argv[])
+{
+  simgrid::s4u::Engine e(&argc, argv);
+
+  xbt_assert(argc <= 3, "1Usage: %s <platform file> [--energy]", argv[0]);
+  xbt_assert(argc >= 2, "2Usage: %s <platform file> [--energy]", argv[0]);
+
+  if (argc == 3 && argv[2][2] == 'e')
+    sg_host_energy_plugin_init();
+
+  e.loadPlatform(argv[1]);
+
+  /* Pick a process, no matter which, from the platform file */
+  simgrid::s4u::Actor::createActor("test", simgrid::s4u::Host::by_name("MyHost1"), runner);
+
+  e.run();
+  XBT_INFO("Simulation done.");
+  return 0;
+}
diff --git a/examples/s4u/energy-ptask/s4u-energy-ptask.tesh b/examples/s4u/energy-ptask/s4u-energy-ptask.tesh
new file mode 100644 (file)
index 0000000..2c9aa6f
--- /dev/null
@@ -0,0 +1,16 @@
+#! ./tesh
+
+$ ${bindir:=.}/s4u-energy-ptask$EXEEXT ${platfdir}/energy_platform.xml --energy --cfg=host/model:ptask_L07 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+> [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'ptask_L07'
+> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
+> [  0.000000] (1:test@MyHost1) First, build a classical parallel task, with 1 Gflop to execute on each node, and 10MB to exchange between each pair
+> [300.000000] (1:test@MyHost1) We can do the same with a timeout of one second enabled.
+> [301.000000] (1:test@MyHost1) Then, build a parallel task involving only computations and no communication (1 Gflop per node)
+> [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: 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: 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
diff --git a/examples/s4u/io-file-remote/s4u-io-file-remote.cpp b/examples/s4u/io-file-remote/s4u-io-file-remote.cpp
new file mode 100644 (file)
index 0000000..46fbede
--- /dev/null
@@ -0,0 +1,75 @@
+/* Copyright (c) 2014-2016. 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/s4u.hpp>
+#include <src/plugins/file_system/FileSystem.hpp>
+#include <string>
+
+#define INMEGA (1024 * 1024)
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(remote_io, "Messages specific for this io example");
+
+static int host(int argc, char* argv[])
+{
+  simgrid::s4u::File* file = new simgrid::s4u::File(argv[1], nullptr);
+  const char* filename     = file->getPath();
+  XBT_INFO("Opened file '%s'", filename);
+  file->dump();
+
+  XBT_INFO("Try to read %llu from '%s'", file->size(), filename);
+  sg_size_t read = file->read(file->size());
+  XBT_INFO("Have read %llu from '%s'. Offset is now at: %llu", read, filename, file->tell());
+  XBT_INFO("Seek back to the begining of the stream...");
+  file->seek(0, SEEK_SET);
+  XBT_INFO("Offset is now at: %llu", file->tell());
+
+  delete file;
+
+  if (argc > 5) {
+    file     = new simgrid::s4u::File(argv[2], nullptr);
+    filename = file->getPath();
+    XBT_INFO("Opened file '%s'", filename);
+    XBT_INFO("Try to write %llu MiB to '%s'", file->size() / 1024, filename);
+    sg_size_t write = file->write(file->size() * 1024);
+    XBT_INFO("Have written %llu bytes to '%s'.", write, filename);
+
+    if (std::stoi(argv[5]) != 0) {
+      XBT_INFO("Move '%s' (of size %llu) from '%s' to '%s'", filename, file->size(),
+               simgrid::s4u::Host::current()->getCname(), argv[3]);
+      file->remoteMove(simgrid::s4u::Host::by_name(argv[3]), argv[4]);
+    } else {
+      XBT_INFO("Copy '%s' (of size %llu) from '%s' to '%s'", filename, file->size(),
+               simgrid::s4u::Host::current()->getCname(), argv[3]);
+      file->remoteCopy(simgrid::s4u::Host::by_name(argv[3]), argv[4]);
+      delete file;
+    }
+  }
+
+  return 0;
+}
+
+int main(int argc, char** argv)
+{
+  simgrid::s4u::Engine e(&argc, argv);
+  sg_storage_file_system_init();
+  e.loadPlatform(argv[1]);
+  e.registerFunction("host", host);
+  e.loadDeployment(argv[2]);
+
+  for (auto const& s : *simgrid::s4u::allStorages()) {
+    XBT_INFO("Init: %llu/%llu MiB used/free on '%s'", sg_storage_get_size_used(s.second) / INMEGA,
+             sg_storage_get_size_free(s.second) / INMEGA, s.second->getCname());
+  }
+
+  e.run();
+
+  for (auto const& s : *simgrid::s4u::allStorages()) {
+    XBT_INFO("End: %llu/%llu MiB used/free on '%s'", sg_storage_get_size_used(s.second) / INMEGA,
+             sg_storage_get_size_free(s.second) / INMEGA, s.second->getCname());
+  }
+
+  XBT_INFO("Simulation time %g", simgrid::s4u::Engine::getClock());
+  return 0;
+}
diff --git a/examples/s4u/io-file-remote/s4u-io-file-remote.tesh b/examples/s4u/io-file-remote/s4u-io-file-remote.tesh
new file mode 100644 (file)
index 0000000..7a69bc8
--- /dev/null
@@ -0,0 +1,64 @@
+#! ./tesh
+
+$ ${bindir:=.}/s4u-io-file-remote$EXEEXT ${platfdir}/storage/remote_io.xml s4u-io-file-remote_d.xml "--log=root.fmt:[%10.6r]%e(%i@%5h)%e%m%n"
+> [  0.000000] (0@     ) Init: 12/476824 MiB used/free on 'Disk1'
+> [  0.000000] (0@     ) Init: 2280/474556 MiB used/free on 'Disk2'
+> [  0.000000] (1@alice) Opened file 'c:\Windows\setupact.log'
+> [  0.000000] (1@alice) File Descriptor information:
+>              Full path: 'c:\Windows\setupact.log'
+>              Size: 101663
+>              Mount point: 'c:'
+>              Storage Id: 'Disk2'
+>              Storage Type: 'SATA-II_HDD'
+>              File Descriptor Id: 0
+> [  0.000000] (1@alice) Try to read 101663 from 'c:\Windows\setupact.log'
+> [  0.000000] (2@  bob) Opened file '/scratch/lib/libsimgrid.so.3.6.2'
+> [  0.000000] (2@  bob) File Descriptor information:
+>              Full path: '/scratch/lib/libsimgrid.so.3.6.2'
+>              Size: 12710497
+>              Mount point: '/scratch'
+>              Storage Id: 'Disk1'
+>              Storage Type: 'SATA-II_HDD'
+>              File Descriptor Id: 0
+> [  0.000000] (2@  bob) Try to read 12710497 from '/scratch/lib/libsimgrid.so.3.6.2'
+> [  0.000000] (3@ carl) Opened file '/scratch/lib/libsimgrid.so.3.6.2'
+> [  0.000000] (3@ carl) File Descriptor information:
+>              Full path: '/scratch/lib/libsimgrid.so.3.6.2'
+>              Size: 12710497
+>              Mount point: '/scratch'
+>              Storage Id: 'Disk1'
+>              Storage Type: 'SATA-II_HDD'
+>              File Descriptor Id: 0
+> [  0.000000] (3@ carl) Try to read 12710497 from '/scratch/lib/libsimgrid.so.3.6.2'
+> [  0.000000] (4@ dave) Opened file 'c:\Windows\bootstat.dat'
+> [  0.000000] (4@ dave) File Descriptor information:
+>              Full path: 'c:\Windows\bootstat.dat'
+>              Size: 67584
+>              Mount point: 'c:'
+>              Storage Id: 'Disk2'
+>              Storage Type: 'SATA-II_HDD'
+>              File Descriptor Id: 0
+> [  0.000000] (4@ dave) Try to read 67584 from 'c:\Windows\bootstat.dat'
+> [  0.001469] (4@ dave) Have read 67584 from 'c:\Windows\bootstat.dat'. Offset is now at: 67584
+> [  0.001469] (4@ dave) Seek back to the begining of the stream...
+> [  0.001469] (4@ dave) Offset is now at: 0
+> [  0.001469] (4@ dave) Opened file 'c:\Windows\Professional.xml'
+> [  0.001469] (4@ dave) Try to write 31 MiB to 'c:\Windows\Professional.xml'
+> [  0.003741] (1@alice) Have read 101663 from 'c:\Windows\setupact.log'. Offset is now at: 101663
+> [  0.003741] (1@alice) Seek back to the begining of the stream...
+> [  0.003741] (1@alice) Offset is now at: 0
+> [  0.276315] (3@ carl) Have read 12710497 from '/scratch/lib/libsimgrid.so.3.6.2'. Offset is now at: 12710497
+> [  0.276315] (3@ carl) Seek back to the begining of the stream...
+> [  0.276315] (3@ carl) Offset is now at: 0
+> [  0.387036] (2@  bob) Have read 12710497 from '/scratch/lib/libsimgrid.so.3.6.2'. Offset is now at: 12710497
+> [  0.387036] (2@  bob) Seek back to the begining of the stream...
+> [  0.387036] (2@  bob) Offset is now at: 0
+> [  0.387036] (2@  bob) Opened file '/scratch/doc/simgrid/examples/platforms/g5k.xml'
+> [  0.387036] (2@  bob) Try to write 16 MiB to '/scratch/doc/simgrid/examples/platforms/g5k.xml'
+> [  0.528211] (4@ dave) Have written 32646144 bytes to 'c:\Windows\Professional.xml'.
+> [  0.528211] (4@ dave) Move 'c:\Windows\Professional.xml' (of size 32646144) from 'dave' to 'carl'
+> [  0.819921] (2@  bob) Have written 17436672 bytes to '/scratch/doc/simgrid/examples/platforms/g5k.xml'.
+> [  0.819921] (2@  bob) Copy '/scratch/doc/simgrid/examples/platforms/g5k.xml' (of size 17436672) from 'bob' to 'alice'
+> [  1.843969] (0@     ) End: 60/476776 MiB used/free on 'Disk1'
+> [  1.843969] (0@     ) End: 2297/474539 MiB used/free on 'Disk2'
+> [  1.843969] (0@     ) Simulation time 1.84397
diff --git a/examples/s4u/io-file-remote/s4u-io-file-remote_d.xml b/examples/s4u/io-file-remote/s4u-io-file-remote_d.xml
new file mode 100644 (file)
index 0000000..838ab3d
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+<platform version="4.1">
+  <actor host="alice" function="host">
+    <argument value = "c:\Windows\setupact.log"/>
+  </actor>
+  <actor host="bob" function="host">
+    <argument value = "/scratch/lib/libsimgrid.so.3.6.2"/>
+    <argument value = "/scratch/doc/simgrid/examples/platforms/g5k.xml"/>
+    <argument value = "alice"/>
+    <argument value = "c:\Windows\Platforms\g5k.xml"/>
+    <argument value = "0"/>
+  </actor>
+  <actor host="carl" function="host">
+    <argument value = "/scratch/lib/libsimgrid.so.3.6.2"/>
+  </actor>
+  <actor host="dave" function="host">
+    <argument value = "c:\Windows\bootstat.dat"/>
+    <argument value = "c:\Windows\Professional.xml"/>
+    <argument value = "carl"/>
+    <argument value = "/scratch/mailbox/Professional.xml"/>
+    <argument value = "1"/>
+  </actor>
+</platform>
diff --git a/examples/s4u/io-storage-raw/s4u-io-storage-raw.cpp b/examples/s4u/io-storage-raw/s4u-io-storage-raw.cpp
new file mode 100644 (file)
index 0000000..b4dc505
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright (c) 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/s4u.hpp"
+#include <string>
+#include <unordered_map>
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(storage, "Messages specific for this simulation");
+
+static void host()
+{
+  /* - Display information on the disks mounted by the current host */
+  XBT_INFO("*** Storage info on %s ***", simgrid::s4u::Host::current()->getCname());
+
+  /* - Retrieve all mount points of current host */
+  std::unordered_map<std::string, simgrid::s4u::Storage*> const& storage_list =
+      simgrid::s4u::Host::current()->getMountedStorages();
+
+  /* - For each disk mounted on host, display disk name and mount point */
+  for (auto const& kv : storage_list)
+    XBT_INFO("Storage name: %s, mount name: %s", kv.second->getCname(), kv.first.c_str());
+
+  /* - Write 200,000 bytes on Disk4 */
+  simgrid::s4u::Storage* storage = simgrid::s4u::Storage::byName("Disk4");
+  sg_size_t write                = storage->write(200000);
+  XBT_INFO("Wrote %llu bytes on 'Disk4'", write);
+
+  /*  - Now read 200,000 bytes */
+  sg_size_t read = storage->read(200000);
+  XBT_INFO("Read %llu bytes on 'Disk4'", read);
+
+  /* - Attach some user data to disk1 */
+  XBT_INFO("*** Get/set data for storage element: Disk4 ***");
+
+  char* data = static_cast<char*>(storage->getUserdata());
+
+  XBT_INFO("Get storage data: '%s'", data);
+
+  storage->setUserdata(xbt_strdup("Some user data"));
+  data = static_cast<char*>(storage->getUserdata());
+  XBT_INFO("Set and get data: '%s'", data);
+  xbt_free(data);
+}
+
+int main(int argc, char** argv)
+{
+  simgrid::s4u::Engine e(&argc, argv);
+  e.loadPlatform(argv[1]);
+
+  simgrid::s4u::Actor::createActor("", simgrid::s4u::Host::by_name("denise"), host);
+
+  e.run();
+  XBT_INFO("Simulated time: %g", simgrid::s4u::Engine::getClock());
+
+  return 0;
+}
diff --git a/examples/s4u/io-storage-raw/s4u-io-storage-raw.tesh b/examples/s4u/io-storage-raw/s4u-io-storage-raw.tesh
new file mode 100644 (file)
index 0000000..0f8642d
--- /dev/null
@@ -0,0 +1,12 @@
+#! ./tesh
+
+$ ${bindir}/s4u-io-storage-raw$EXEEXT ${platfdir}/storage/storage.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+> [  0.000000] (1:@denise) *** Storage info on denise ***
+> [  0.000000] (1:@denise) Storage name: Disk2, mount name: c:
+> [  0.000000] (1:@denise) Storage name: Disk4, mount name: /home
+> [  0.003333] (1:@denise) Wrote 200000 bytes on 'Disk4'
+> [  0.004333] (1:@denise) Read 200000 bytes on 'Disk4'
+> [  0.004333] (1:@denise) *** Get/set data for storage element: Disk4 ***
+> [  0.004333] (1:@denise) Get storage data: '(null)'
+> [  0.004333] (1:@denise) Set and get data: 'Some user data'
+> [  0.004333] (0:maestro@) Simulated time: 0.00433333
index c783697..dc3e5e3 100644 (file)
@@ -7,6 +7,7 @@
 #include <unordered_map>
 
 #include "simgrid/s4u.hpp"
+#include "src/plugins/file_system/FileSystem.hpp"
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "a sample log category");
 
@@ -21,12 +22,8 @@ public:
       simgrid::s4u::Storage* storage = kv.second;
 
       // Retrieve disk's information
-      sg_size_t free_size = storage->getSizeFree();
-      sg_size_t used_size = storage->getSizeUsed();
-      sg_size_t size      = storage->getSize();
-
-      XBT_INFO("    %s (%s) Used: %llu; Free: %llu; Total: %llu.", storage->getCname(), mountpoint.c_str(), used_size,
-               free_size, size);
+      XBT_INFO("    %s (%s) Used: %llu; Free: %llu; Total: %llu.", storage->getCname(), mountpoint.c_str(),
+               sg_storage_get_size_used(storage), sg_storage_get_size_free(storage), sg_storage_get_size(storage));
     }
   }
 
diff --git a/examples/s4u/platform-properties/s4u-platform-properties.cpp b/examples/s4u/platform-properties/s4u-platform-properties.cpp
new file mode 100644 (file)
index 0000000..d8f4129
--- /dev/null
@@ -0,0 +1,115 @@
+/* Copyright (c) 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/s4u.hpp>
+#include <string>
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Property test");
+
+static void test_host(std::string hostname)
+{
+  simgrid::s4u::Host* thehost = simgrid::s4u::Host::by_name(hostname);
+  std::map<std::string, std::string>* props = thehost->getProperties();
+  const char* noexist = "Unknown";
+  const char* exist   = "Hdd";
+  const char* value;
+
+  XBT_INFO("== Print the properties of the host '%s'", hostname.c_str());
+  for (const auto& kv : *props)
+    XBT_INFO("  Host property: '%s' -> '%s'", kv.first.c_str(), kv.second.c_str());
+
+  XBT_INFO("== Try to get a host property that does not exist");
+  value = thehost->getProperty(noexist);
+  xbt_assert(not value, "The key exists (it's not supposed to)");
+
+  XBT_INFO("== Try to get a host property that does exist");
+  value = thehost->getProperty(exist);
+  xbt_assert(value, "\tProperty %s is undefined (where it should)", exist);
+  xbt_assert(!strcmp(value, "180"), "\tValue of property %s is defined to %s (where it should be 180)", exist, value);
+  XBT_INFO("   Property: %s old value: %s", exist, value);
+
+  XBT_INFO("== Trying to modify a host property");
+  thehost->setProperty(exist, "250");
+
+  /* Test if we have changed the value */
+  value = thehost->getProperty(exist);
+  xbt_assert(value, "Property %s is undefined (where it should)", exist);
+  xbt_assert(!strcmp(value, "250"), "Value of property %s is defined to %s (where it should be 250)", exist, value);
+  XBT_INFO("   Property: %s old value: %s", exist, value);
+
+  /* Restore the value for the next test */
+  thehost->setProperty(exist, "180");
+}
+
+static int alice(int argc, char* argv[])
+{
+  /* Dump what we have on the current host */
+  test_host("host1");
+  return 0;
+}
+
+static int carole(int argc, char* argv[])
+{
+  /* Dump what we have on a remote host */
+  simgrid::s4u::this_actor::sleep_for(1); // Wait for alice to be done with its experiment
+  test_host("host1");
+  return 0;
+}
+
+static int david(int argc, char* argv[])
+{
+  /* Dump what we have on a remote host */
+  simgrid::s4u::this_actor::sleep_for(2); // Wait for alice and carole to be done with its experiment
+  test_host("node-0.acme.org");
+  return 0;
+}
+
+static int bob(int argc, char* argv[])
+{
+  /* this host also tests the properties of the AS*/
+  simgrid::s4u::NetZone* root = simgrid::s4u::Engine::getInstance()->getNetRoot();
+  XBT_INFO("== Print the properties of the zone");
+  XBT_INFO("   Zone property: filename -> %s", root->getProperty("filename"));
+  XBT_INFO("   Zone property: date -> %s", root->getProperty("date"));
+  XBT_INFO("   Zone property: author -> %s", root->getProperty("author"));
+
+  /* Get the property list of current bob process */
+  std::map<std::string, std::string>* props = simgrid::s4u::Actor::self()->getProperties();
+  const char* noexist = "UnknownProcessProp";
+  XBT_ATTRIB_UNUSED const char* value;
+
+  XBT_INFO("== Print the properties of the actor");
+  for (const auto& kv : *props)
+    XBT_INFO("   Actor property: %s -> %s", kv.first.c_str(), kv.second.c_str());
+
+  XBT_INFO("== Try to get an actor property that does not exist");
+
+  value = simgrid::s4u::Actor::self()->getProperty(noexist);
+  xbt_assert(not value, "The property is defined (it shouldnt)");
+  return 0;
+}
+
+int main(int argc, char* argv[])
+{
+  simgrid::s4u::Engine e(&argc, argv);
+  e.loadPlatform(argv[1]);
+
+  e.registerFunction("alice", alice);
+  e.registerFunction("bob", bob);
+  e.registerFunction("carole", carole);
+  e.registerFunction("david", david);
+
+  size_t totalHosts = sg_host_count();
+
+  XBT_INFO("There are %zu hosts in the environment", totalHosts);
+  simgrid::s4u::Host** hosts = sg_host_list();
+  for (unsigned int i = 0; i < totalHosts; i++)
+    XBT_INFO("Host '%s' runs at %.0f flops/s", hosts[i]->getCname(), hosts[i]->getSpeed());
+
+  e.loadDeployment(argv[2]);
+  e.run();
+
+  return 0;
+}
diff --git a/examples/s4u/platform-properties/s4u-platform-properties.tesh b/examples/s4u/platform-properties/s4u-platform-properties.tesh
new file mode 100644 (file)
index 0000000..f5c225a
--- /dev/null
@@ -0,0 +1,46 @@
+#! ./tesh
+
+p Testing a S4U application with properties in the XML for Hosts, Links and Actors
+
+! output sort 19
+$ $SG_TEST_EXENV ${bindir:=.}/s4u-platform-properties$EXEEXT ${platfdir}/prop.xml s4u-platform-properties_d.xml  "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+> [  0.000000] (0:maestro@) There are 7 hosts in the environment
+> [  0.000000] (0:maestro@) Host 'host1' runs at 1000000000 flops/s
+> [  0.000000] (0:maestro@) Host 'host2' runs at 1000000000 flops/s
+> [  0.000000] (0:maestro@) Host 'node-0.acme.org' runs at 1000000000 flops/s
+> [  0.000000] (0:maestro@) Host 'node-1.acme.org' runs at 1000000000 flops/s
+> [  0.000000] (0:maestro@) Host 'node-2.acme.org' runs at 1000000000 flops/s
+> [  0.000000] (0:maestro@) Host 'node-3.acme.org' runs at 1000000000 flops/s
+> [  0.000000] (0:maestro@) Host 'node-4.acme.org' runs at 1000000000 flops/s
+> [  0.000000] (2:bob@host1) == Print the properties of the zone
+> [  0.000000] (2:bob@host1)    Zone property: filename -> prop.xml
+> [  0.000000] (2:bob@host1)    Zone property: date -> 31-08-12
+> [  0.000000] (2:bob@host1)    Zone property: author -> pnavarro
+> [  0.000000] (2:bob@host1) == Print the properties of the actor
+> [  0.000000] (2:bob@host1)    Actor property: SomeProp -> SomeValue
+> [  0.000000] (2:bob@host1) == Try to get an actor property that does not exist
+> [  0.000000] (1:alice@host1) == Print the properties of the host 'host1'
+> [  0.000000] (1:alice@host1)   Host property: 'Hdd' -> '180'
+> [  0.000000] (1:alice@host1)   Host property: 'mem' -> '4'
+> [  0.000000] (1:alice@host1) == Try to get a host property that does not exist
+> [  0.000000] (1:alice@host1) == Try to get a host property that does exist
+> [  0.000000] (1:alice@host1)    Property: Hdd old value: 180
+> [  0.000000] (1:alice@host1) == Trying to modify a host property
+> [  0.000000] (1:alice@host1)    Property: Hdd old value: 250
+> [  1.000000] (3:carole@host2) == Print the properties of the host 'host1'
+> [  1.000000] (3:carole@host2)   Host property: 'Hdd' -> '180'
+> [  1.000000] (3:carole@host2)   Host property: 'mem' -> '4'
+> [  1.000000] (3:carole@host2) == Try to get a host property that does not exist
+> [  1.000000] (3:carole@host2) == Try to get a host property that does exist
+> [  1.000000] (3:carole@host2)    Property: Hdd old value: 180
+> [  1.000000] (3:carole@host2) == Trying to modify a host property
+> [  1.000000] (3:carole@host2)    Property: Hdd old value: 250
+> [  2.000000] (4:david@host2) == Print the properties of the host 'node-0.acme.org'
+> [  2.000000] (4:david@host2)   Host property: 'Hdd' -> '180'
+> [  2.000000] (4:david@host2)   Host property: 'bla' -> 'acme cluster'
+> [  2.000000] (4:david@host2)   Host property: 'mem' -> '42'
+> [  2.000000] (4:david@host2) == Try to get a host property that does not exist
+> [  2.000000] (4:david@host2) == Try to get a host property that does exist
+> [  2.000000] (4:david@host2)    Property: Hdd old value: 180
+> [  2.000000] (4:david@host2) == Trying to modify a host property
+> [  2.000000] (4:david@host2)    Property: Hdd old value: 250
diff --git a/examples/s4u/platform-properties/s4u-platform-properties_d.xml b/examples/s4u/platform-properties/s4u-platform-properties_d.xml
new file mode 100644 (file)
index 0000000..f4c76b9
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+<platform version="4.1">
+  <actor host="host1" function="alice" />
+  <actor host="host1" function="bob">
+    <prop id="SomeProp" value="SomeValue"/>
+  </actor>
+  <actor host="host2" function="carole" />
+  <actor host="host2" function="david" />
+</platform>
index 39aa4cc..03229a8 100644 (file)
@@ -2,7 +2,7 @@
 
 p This tests the HostLoad plugin (this allows the user to get the current load of a host and the computed flops)
 
-$ ${bindir:=.}/s4u-plugin-hostload$EXEEXT ${srcdir:=.}/../platforms/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/s4u-plugin-hostload$EXEEXT ${platfdir}/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:load_test@MyHost1) Initial peak speed: 1E+08 flop/s; number of flops computed so far: 0E+00 (should be 0)
 > [  0.000000] (1:load_test@MyHost1) Sleep for 10 seconds
 > [ 10.000000] (1:load_test@MyHost1) Done sleeping 10.00s; peak speed: 1E+08 flop/s; number of flops computed so far: 0E+00 (nothing should have changed)
index 677c6f1..37644ee 100644 (file)
@@ -1,5 +1,6 @@
 p Test the use of SMPI+MSG in the same file, as well as several different SMPI instances at the same time
-$ ./masterslave_mailbox_smpi ${srcdir:=.}/../../platforms/small_platform_with_routers.xml ${srcdir:=.}/deployment_masterslave_mailbox_smpi.xml --log=smpi.:info
+$ ./masterslave_mailbox_smpi ${srcdir:=.}/../../platforms/small_platform_with_routers.xml ${srcdir:=.}/deployment_masterslave_mailbox_smpi.xml --log=smpi.:info --cfg=smpi/simulate-computation:no
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'smpi/simulate-computation' to 'no'
 > [0.000000] [smpi_kernel/INFO] You did not set the power of the host running the simulation.  The timings will certainly not be accurate.  Use the option "--cfg=smpi/host-speed:<flops>" to set its value.Check http://simgrid.org/simgrid/latest/doc/options.html#options_smpi_bench for more information.
 > [Tremblay:master:(1) 0.000000] [msg_test/INFO] Got 1 slaves and 20 tasks to process
 > [Tremblay:master:(1) 0.000000] [msg_test/INFO] Sending "Task_0" (of 20) to mailbox "slave-0"
index 9a996b9..b2905bb 100644 (file)
@@ -37,7 +37,13 @@ namespace activity {
 
   class MailboxImpl;
 }
-
+namespace lmm {
+class s_lmm_element_t;
+class s_lmm_variable_t;
+class s_lmm_constraint_t;
+class s_lmm_constraint_light_t;
+class s_lmm_system_t;
+}
 namespace routing {
   class NetPoint;
 }
@@ -81,6 +87,13 @@ typedef simgrid::simix::MutexImpl* smx_mutex_t;
 typedef simgrid::kernel::activity::MailboxImpl* smx_mailbox_t;
 typedef simgrid::surf::StorageImpl* surf_storage_t;
 
+typedef simgrid::kernel::lmm::s_lmm_element_t* lmm_element_t;
+typedef const simgrid::kernel::lmm::s_lmm_element_t* const_lmm_element_t;
+typedef simgrid::kernel::lmm::s_lmm_variable_t* lmm_variable_t;
+typedef simgrid::kernel::lmm::s_lmm_constraint_t* lmm_constraint_t;
+typedef simgrid::kernel::lmm::s_lmm_constraint_light_t* lmm_constraint_light_t;
+typedef simgrid::kernel::lmm::s_lmm_system_t* lmm_system_t;
+
 #else
 
 typedef struct s4u_Actor s4u_Actor;
index b3284ad..068e469 100644 (file)
@@ -216,26 +216,8 @@ XBT_ATTRIB_DEPRECATED_v319("Use MSG_zone_get_hosts() instead: v3.19 will remove
   return res;
 }
 
-/************************** File handling ***********************************/
-XBT_PUBLIC(sg_size_t) MSG_file_read(msg_file_t fd, sg_size_t size);
-XBT_PUBLIC(sg_size_t) MSG_file_write(msg_file_t fd, sg_size_t size);
-XBT_PUBLIC(msg_file_t) MSG_file_open(const char* fullpath, void* data);
-XBT_PUBLIC(void*) MSG_file_get_data(msg_file_t fd);
-XBT_PUBLIC(msg_error_t) MSG_file_set_data(msg_file_t fd, void * data);
-XBT_PUBLIC(int) MSG_file_close(msg_file_t fd);
-XBT_PUBLIC(sg_size_t) MSG_file_get_size(msg_file_t fd);
-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(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);
-XBT_PUBLIC(msg_error_t) MSG_file_rmove(msg_file_t fd, msg_host_t host, const char* fullpath);
 /************************** Storage handling ***********************************/
 XBT_PUBLIC(const char *) MSG_storage_get_name(msg_storage_t storage);
-XBT_PUBLIC(sg_size_t) MSG_storage_get_free_size(msg_storage_t storage);
-XBT_PUBLIC(sg_size_t) MSG_storage_get_used_size(msg_storage_t storage);
 XBT_PUBLIC(msg_storage_t) MSG_storage_get_by_name(const char *name);
 XBT_PUBLIC(xbt_dict_t) MSG_storage_get_properties(msg_storage_t storage);
 XBT_PUBLIC(void) MSG_storage_set_property_value(msg_storage_t storage, const char* name, char* value);
@@ -243,9 +225,9 @@ XBT_PUBLIC(const char *)MSG_storage_get_property_value(msg_storage_t storage, co
 XBT_PUBLIC(xbt_dynar_t) MSG_storages_as_dynar();
 XBT_PUBLIC(msg_error_t) MSG_storage_set_data(msg_storage_t host, void *data);
 XBT_PUBLIC(void *) MSG_storage_get_data(msg_storage_t storage);
-XBT_PUBLIC(xbt_dict_t) MSG_storage_get_content(msg_storage_t storage);
-XBT_PUBLIC(sg_size_t) MSG_storage_get_size(msg_storage_t storage);
 XBT_PUBLIC(const char *) MSG_storage_get_host(msg_storage_t storage);
+XBT_PUBLIC(sg_size_t) MSG_storage_read(msg_storage_t storage, sg_size_t size);
+XBT_PUBLIC(sg_size_t) MSG_storage_write(msg_storage_t storage, sg_size_t size);
 
 /************************** Host handling ***********************************/
 XBT_PUBLIC(msg_host_t) MSG_host_by_name(const char *name);
@@ -284,12 +266,10 @@ XBT_PUBLIC(xbt_dynar_t) MSG_hosts_as_dynar();
 XBT_PUBLIC(int) MSG_get_host_number();
 XBT_PUBLIC(xbt_dict_t) MSG_host_get_mounted_storage_list(msg_host_t host);
 XBT_PUBLIC(xbt_dynar_t) MSG_host_get_attached_storage_list(msg_host_t host);
-XBT_PUBLIC(xbt_dict_t) MSG_host_get_storage_content(msg_host_t host);
 
 /*property handlers*/
 XBT_PUBLIC(xbt_dict_t) MSG_host_get_properties(msg_host_t host);
-XBT_PUBLIC(const char *) MSG_host_get_property_value(msg_host_t host,
-                                                     const char *name);
+XBT_PUBLIC(const char*) MSG_host_get_property_value(msg_host_t host, const char* name);
 XBT_PUBLIC(void) MSG_host_set_property_value(msg_host_t host, const char* name, char* value);
 
 XBT_PUBLIC(void) MSG_create_environment(const char *file);
@@ -333,9 +313,7 @@ XBT_PUBLIC(msg_error_t) MSG_process_set_kill_time(msg_process_t process, double
 
 /*property handlers*/
 XBT_PUBLIC(xbt_dict_t) MSG_process_get_properties(msg_process_t process);
-XBT_PUBLIC(const char *) MSG_process_get_property_value(msg_process_t
-                                                        process,
-                                                        const char *name);
+XBT_PUBLIC(const char*) MSG_process_get_property_value(msg_process_t process, const char* name);
 
 XBT_PUBLIC(msg_error_t) MSG_process_suspend(msg_process_t process);
 XBT_PUBLIC(msg_error_t) MSG_process_resume(msg_process_t process);
@@ -349,9 +327,7 @@ XBT_PUBLIC(void) MSG_process_ref(msg_process_t process);
 XBT_PUBLIC(void) MSG_process_unref(msg_process_t process);
 
 /************************** Task handling ************************************/
-XBT_PUBLIC(msg_task_t) MSG_task_create(const char *name,
-                                     double flops_amount,
-                                     double bytes_amount, void *data);
+XBT_PUBLIC(msg_task_t) MSG_task_create(const char* name, double flops_amount, double bytes_amount, void* data);
 XBT_PUBLIC(msg_task_t) MSG_parallel_task_create(const char *name,
                                               int host_nb,
                                               const msg_host_t * host_list,
index bb22a1a..4d7390d 100644 (file)
 SG_BEGIN_DECL()
 
 XBT_PUBLIC(void) sg_storage_file_system_init();
+XBT_PUBLIC(sg_file_t) sg_file_open(const char* fullpath, void* data);
+XBT_PUBLIC(sg_size_t) sg_file_read(sg_file_t fd, sg_size_t size);
+XBT_PUBLIC(sg_size_t) sg_file_write(sg_file_t fd, sg_size_t size);
+XBT_PUBLIC(void) sg_file_close(sg_file_t fd);
+
+XBT_PUBLIC(const char*) sg_file_get_name(sg_file_t fd);
+XBT_PUBLIC(sg_size_t) sg_file_get_size(sg_file_t fd);
+XBT_PUBLIC(void) sg_file_dump(sg_file_t fd);
+XBT_PUBLIC(void*) sg_file_get_data(sg_file_t fd);
+XBT_PUBLIC(void) sg_file_set_data(sg_file_t fd, void* data);
+XBT_PUBLIC(void) sg_file_seek(sg_file_t fd, sg_offset_t offset, int origin);
+XBT_PUBLIC(sg_size_t) sg_file_tell(sg_file_t fd);
+XBT_PUBLIC(void) sg_file_move(sg_file_t fd, const char* fullpath);
+XBT_PUBLIC(void) sg_file_unlink(sg_file_t fd);
+XBT_PUBLIC(int) sg_file_rcopy(sg_file_t file, sg_host_t host, const char* fullpath);
+XBT_PUBLIC(int) sg_file_rmove(sg_file_t file, sg_host_t host, const char* fullpath);
+
+XBT_PUBLIC(void*) sg_storage_get_data(sg_storage_t storage);
+XBT_PUBLIC(void) sg_storage_set_data(sg_storage_t storage, void* data);
+XBT_PUBLIC(sg_size_t) sg_storage_get_size_free(sg_storage_t st);
+XBT_PUBLIC(sg_size_t) sg_storage_get_size_used(sg_storage_t st);
+XBT_PUBLIC(sg_size_t) sg_storage_get_size(sg_storage_t st);
+XBT_PUBLIC(xbt_dict_t) sg_storage_get_content(sg_storage_t storage);
+
+XBT_PUBLIC(xbt_dict_t) sg_host_get_storage_content(sg_host_t host);
+
+#define MSG_file_open(fullpath, data) sg_file_open(fullpath, data)
+#define MSG_file_read(fd, size) sg_file_read(fd, size)
+#define MSG_file_write(fd, size) sg_file_write(fd, size)
+#define MSG_file_close(fd) sg_file_close(fd)
+#define MSG_file_get_name(fd) sg_file_get_name(fd)
+#define MSG_file_get_size(fd) sg_file_get_size(fd)
+#define MSG_file_dump(fd) sg_file_dump(fd)
+#define MSG_file_get_data(fd) sg_file_get_data(fd)
+#define MSG_file_set_data(fd, data) sg_file_set_data(fd, data)
+#define MSG_file_seek(fd, offset, origin) sg_file_seek(fd, offset, origin)
+#define MSG_file_tell(fd) sg_file_tell(fd)
+#define MSG_file_move(fd, fullpath) sg_file_get_size(fd, fullpath)
+#define MSG_file_unlink(fd) sg_file_unlink(fd)
+#define MSG_file_rcopy(file, host, fullpath) sg_file_rcopy(file, host, fullpath)
+#define MSG_file_rmove(file, host, fullpath) sg_file_rmove(file, host, fullpath)
 
 #define MSG_storage_file_system_init() sg_storage_file_system_init()
+#define MSG_storage_get_free_size(st) sg_storage_get_size_free(st)
+#define MSG_storage_get_used_size(st) sg_storage_get_size_used(st)
+#define MSG_storage_get_size(st) sg_storage_get_size(st)
+#define MSG_storage_get_content(st) sg_storage_get_content(st)
+
+#define MSG_host_get_storage_content(st) sg_host_get_storage_content(st)
 
 SG_END_DECL()
 
index ee32b44..1b82b8c 100644 (file)
 #include <simgrid/s4u/Host.hpp>
 #include <simgrid/s4u/Link.hpp>
 #include <simgrid/s4u/Mailbox.hpp>
+#include <simgrid/s4u/NetZone.hpp>
 
 #include <simgrid/s4u/Comm.hpp>
 #include <simgrid/s4u/ConditionVariable.hpp>
 #include <simgrid/s4u/Mutex.hpp>
 
-#include <simgrid/s4u/File.hpp>
 #include <simgrid/s4u/Storage.hpp>
 
 #endif /* SIMGRID_S4U_S4U_H */
index 92fc485..d22640c 100644 (file)
@@ -269,6 +269,7 @@ public:
   simix::ActorImpl* getImpl();
 
   /** Retrieve the property value (or nullptr if not set) */
+  std::map<std::string, std::string>* getProperties();
   const char* getProperty(const char* key);
   void setProperty(const char* key, const char* value);
   Actor* restart();
@@ -308,6 +309,10 @@ XBT_PUBLIC(void) execute(double flop);
  *  An execution of priority 2 computes twice as fast as an execution at priority 1. */
 XBT_PUBLIC(void) execute(double flop, double priority);
 
+XBT_PUBLIC(void) parallel_execute(int host_nb, sg_host_t* host_list, double* flops_amount, double* bytes_amount);
+XBT_PUBLIC(void)
+parallel_execute(int host_nb, sg_host_t* host_list, double* flops_amount, double* bytes_amount, double timeout);
+
 /** Block the actor until it gets a message from the given mailbox.
  *
  * See \ref Comm for the full communication API (including non blocking communications).
index 8ba939c..f313e49 100644 (file)
@@ -39,16 +39,10 @@ public:
   const char* getCname() const;
   const char* getType();
   Host* getHost();
-  sg_size_t getSize(); /** Retrieve the total amount of space of this storage element */
-  sg_size_t getSizeFree();
-  sg_size_t getSizeUsed();
-  void decrUsedSize(sg_size_t size);
-  void incrUsedSize(sg_size_t size);
 
   std::map<std::string, std::string>* getProperties();
   const char* getProperty(std::string key);
   void setProperty(std::string, std::string value);
-  std::map<std::string, sg_size_t>* getContent();
 
   void setUserdata(void* data) { userdata_ = data; }
   void* getUserdata() { return userdata_; }
index 31720a5..9b20598 100644 (file)
@@ -8,8 +8,9 @@
 #ifndef MSG_JFILE_H
 #define MSG_JFILE_H
 
-#include <jni.h>
 #include "simgrid/msg.h"
+#include "simgrid/plugins/file_system.h"
+#include <jni.h>
 
 SG_BEGIN_DECL()
 
index 0b9ed50..a3d2660 100644 (file)
@@ -8,8 +8,9 @@
 #ifndef MSG_JHOST_H
 #define MSG_JHOST_H
 
-#include <jni.h>
 #include "simgrid/msg.h"
+#include "simgrid/plugins/file_system.h"
+#include <jni.h>
 
 SG_BEGIN_DECL()
 
index a31349d..548780c 100644 (file)
@@ -6,6 +6,7 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "simgrid/msg.h"
+#include "simgrid/plugins/file_system.h"
 
 #include "include/xbt/signal.hpp"
 #include "jmsg.hpp"
diff --git a/src/include/surf/datatypes.hpp b/src/include/surf/datatypes.hpp
deleted file mode 100644 (file)
index 235dbf1..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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. */
-
-#ifndef MAXMIN_DATATYPES_HPP
-#define MAXMIN_DATATYPES_HPP
-
-namespace simgrid {
-namespace surf {
-typedef struct s_lmm_element_t* lmm_element_t;
-typedef struct s_lmm_variable_t* lmm_variable_t;
-typedef struct s_lmm_constraint_t* lmm_constraint_t;
-typedef struct s_lmm_constraint_light_t* lmm_constraint_light_t;
-typedef struct s_lmm_system_t* lmm_system_t;
-}
-}
-
-#endif
index a6654ac..373e22e 100644 (file)
@@ -9,7 +9,6 @@
 #include "simgrid/datatypes.h"
 #include "simgrid/forward.h"
 #include "src/internal_config.h"
-#include "surf/datatypes.hpp"
 #include "xbt/config.h"
 #include "xbt/dict.h"
 #include "xbt/dynar.h"
index 8679b20..5cc6d47 100644 (file)
@@ -10,7 +10,6 @@
 #include "src/simix/smx_private.hpp"
 #include "src/xbt_modinter.h" /* prototype of os thread module's init/exit in XBT */
 #include "xbt/function_types.h"
-#include "xbt/swag.h"
 #include "xbt/xbt_os_thread.h"
 
 #include "src/kernel/context/ContextThread.hpp"
index ed92dfa..5ff0ef2 100644 (file)
@@ -4,7 +4,7 @@
 /* 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 "surf/maxmin.hpp"
+#include "src/kernel/lmm/maxmin.hpp"
 #include "xbt/log.h"
 #include "xbt/sysdep.h"
 #include <algorithm>
@@ -17,64 +17,33 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_maxmin);
 #define SHOW_EXPR_D(expr) XBT_DEBUG(#expr " = %d", expr);
 #define SHOW_EXPR_P(expr) XBT_DEBUG(#expr " = %p", expr);
 
-void simgrid::surf::bottleneck_solve(lmm_system_t sys)
+void simgrid::kernel::lmm::bottleneck_solve(lmm_system_t sys)
 {
-  void* _var;
-  void* _var_next;
-  void* _cnst;
-  void* _cnst_next;
-  void* _elem;
-  lmm_variable_t var    = nullptr;
-  lmm_constraint_t cnst = nullptr;
-  s_lmm_constraint_t s_cnst;
-  lmm_element_t elem   = nullptr;
-  xbt_swag_t cnst_list = nullptr;
-  xbt_swag_t var_list  = nullptr;
-  xbt_swag_t elem_list = nullptr;
-
-  static s_xbt_swag_t cnst_to_update;
-
   if (not sys->modified)
     return;
 
-  /* Init */
-  xbt_swag_init(&(cnst_to_update), xbt_swag_offset(s_cnst, saturated_constraint_set_hookup));
-
-  var_list = &(sys->variable_set);
-  XBT_DEBUG("Variable set : %d", xbt_swag_size(var_list));
-  xbt_swag_foreach(_var, var_list)
-  {
-    var        = static_cast<lmm_variable_t>(_var);
-    var->value = 0.0;
-    XBT_DEBUG("Handling variable %p", var);
-    xbt_swag_insert(var, &(sys->saturated_variable_set));
-    auto weighted = std::find_if(begin(var->cnsts), end(var->cnsts),
-                                 [](s_lmm_element_t const& x) { return x.consumption_weight != 0.0; });
-    if (weighted == end(var->cnsts) && var->sharing_weight > 0.0) {
-      XBT_DEBUG("Err, finally, there is no need to take care of variable %p", var);
-      xbt_swag_remove(var, &(sys->saturated_variable_set));
-      var->value = 1.0;
-    }
-    if (var->sharing_weight <= 0.0) {
-      XBT_DEBUG("Err, finally, there is no need to take care of variable %p", var);
-      xbt_swag_remove(var, &(sys->saturated_variable_set));
+  XBT_DEBUG("Variable set : %zu", sys->variable_set.size());
+  for (s_lmm_variable_t& var : sys->variable_set) {
+    var.value = 0.0;
+    XBT_DEBUG("Handling variable %p", &var);
+    if (var.sharing_weight > 0.0 && std::find_if(begin(var.cnsts), end(var.cnsts), [](s_lmm_element_t const& x) {
+                                      return x.consumption_weight != 0.0;
+                                    }) != end(var.cnsts)) {
+      sys->saturated_variable_set.push_back(var);
+    } else {
+      XBT_DEBUG("Err, finally, there is no need to take care of variable %p", &var);
+      if (var.sharing_weight > 0.0)
+        var.value = 1.0;
     }
   }
-  var_list = &(sys->saturated_variable_set);
 
-  cnst_list = &(sys->active_constraint_set);
-  XBT_DEBUG("Active constraints : %d", xbt_swag_size(cnst_list));
-  xbt_swag_foreach(_cnst, cnst_list)
-  {
-    cnst = static_cast<lmm_constraint_t>(_cnst);
-    xbt_swag_insert(cnst, &(sys->saturated_constraint_set));
+  XBT_DEBUG("Active constraints : %zu", sys->active_constraint_set.size());
+  for (s_lmm_constraint_t& cnst : sys->active_constraint_set) {
+    sys->saturated_constraint_set.push_back(cnst);
   }
-  cnst_list = &(sys->saturated_constraint_set);
-  xbt_swag_foreach(_cnst, cnst_list)
-  {
-    cnst            = static_cast<lmm_constraint_t>(_cnst);
-    cnst->remaining = cnst->bound;
-    cnst->usage     = 0.0;
+  for (s_lmm_constraint_t& cnst : sys->saturated_constraint_set) {
+    cnst.remaining = cnst.bound;
+    cnst.usage     = 0.0;
   }
 
   XBT_DEBUG("Fair bottleneck Initialized");
@@ -82,102 +51,97 @@ void simgrid::surf::bottleneck_solve(lmm_system_t sys)
   /*
    * Compute Usage and store the variables that reach the maximum.
    */
+  auto& var_list  = sys->saturated_variable_set;
+  auto& cnst_list = sys->saturated_constraint_set;
   do {
     if (XBT_LOG_ISENABLED(surf_maxmin, xbt_log_priority_debug)) {
       XBT_DEBUG("Fair bottleneck done");
       sys->print();
     }
-    XBT_DEBUG("******* Constraints to process: %d *******", xbt_swag_size(cnst_list));
-    xbt_swag_foreach_safe(_cnst, _cnst_next, cnst_list)
-    {
-      cnst   = static_cast<lmm_constraint_t>(_cnst);
+    XBT_DEBUG("******* Constraints to process: %zu *******", cnst_list.size());
+    for (auto iter = std::begin(cnst_list); iter != std::end(cnst_list);) {
+      s_lmm_constraint_t& cnst = *iter;
       int nb = 0;
-      XBT_DEBUG("Processing cnst %p ", cnst);
-      elem_list   = &(cnst->enabled_element_set);
-      cnst->usage = 0.0;
-      xbt_swag_foreach(_elem, elem_list)
-      {
-        elem = static_cast<lmm_element_t>(_elem);
-        xbt_assert(elem->variable->sharing_weight > 0);
-        if ((elem->consumption_weight > 0) && xbt_swag_belongs(elem->variable, var_list))
+      XBT_DEBUG("Processing cnst %p ", &cnst);
+      cnst.usage = 0.0;
+      for (s_lmm_element_t& elem : cnst.enabled_element_set) {
+        xbt_assert(elem.variable->sharing_weight > 0);
+        if (elem.consumption_weight > 0 && elem.variable->saturated_variable_set_hook.is_linked())
           nb++;
       }
       XBT_DEBUG("\tThere are %d variables", nb);
-      if (nb > 0 && not cnst->sharing_policy)
+      if (nb > 0 && not cnst.sharing_policy)
         nb = 1;
-      if (not nb) {
-        cnst->remaining = 0.0;
-        cnst->usage     = cnst->remaining;
-        xbt_swag_remove(cnst, cnst_list);
-        continue;
+      if (nb == 0) {
+        cnst.remaining = 0.0;
+        cnst.usage     = 0.0;
+        iter           = cnst_list.erase(iter);
+      } else {
+        cnst.usage = cnst.remaining / nb;
+        XBT_DEBUG("\tConstraint Usage %p : %f with %d variables", &cnst, cnst.usage, nb);
+        iter++;
       }
-      cnst->usage = cnst->remaining / nb;
-      XBT_DEBUG("\tConstraint Usage %p : %f with %d variables", cnst, cnst->usage, nb);
     }
 
-    xbt_swag_foreach_safe(_var, _var_next, var_list)
-    {
-      var            = static_cast<lmm_variable_t>(_var);
+    for (auto iter = std::begin(var_list); iter != std::end(var_list);) {
+      s_lmm_variable_t& var = *iter;
       double min_inc = DBL_MAX;
-      for (s_lmm_element_t const& elm : var->cnsts) {
+      for (s_lmm_element_t const& elm : var.cnsts) {
         if (elm.consumption_weight > 0)
           min_inc = std::min(min_inc, elm.constraint->usage / elm.consumption_weight);
       }
-      if (var->bound > 0)
-        min_inc = std::min(min_inc, var->bound - var->value);
-      var->mu   = min_inc;
-      XBT_DEBUG("Updating variable %p maximum increment: %g", var, var->mu);
-      var->value += var->mu;
-      if (var->value == var->bound) {
-        xbt_swag_remove(var, var_list);
-      }
+      if (var.bound > 0)
+        min_inc = std::min(min_inc, var.bound - var.value);
+      var.mu    = min_inc;
+      XBT_DEBUG("Updating variable %p maximum increment: %g", &var, var.mu);
+      var.value += var.mu;
+      if (var.value == var.bound)
+        iter = var_list.erase(iter);
+      else
+        iter++;
     }
 
-    xbt_swag_foreach_safe(_cnst, _cnst_next, cnst_list)
-    {
-      cnst = static_cast<lmm_constraint_t>(_cnst);
-      XBT_DEBUG("Updating cnst %p ", cnst);
-      elem_list = &(cnst->enabled_element_set);
-      xbt_swag_foreach(_elem, elem_list)
-      {
-        elem = static_cast<lmm_element_t>(_elem);
-        xbt_assert(elem->variable->sharing_weight > 0);
-        if (cnst->sharing_policy) {
-          XBT_DEBUG("\tUpdate constraint %p (%g) with variable %p by %g", cnst, cnst->remaining, elem->variable,
-                    elem->variable->mu);
-          double_update(&(cnst->remaining), elem->consumption_weight * elem->variable->mu, sg_maxmin_precision);
-        } else {
-          XBT_DEBUG("\tNon-Shared variable. Update constraint usage of %p (%g) with variable %p by %g", cnst,
-                    cnst->usage, elem->variable, elem->variable->mu);
-          cnst->usage = std::min(cnst->usage, elem->consumption_weight * elem->variable->mu);
+    for (auto iter = std::begin(cnst_list); iter != std::end(cnst_list);) {
+      s_lmm_constraint_t& cnst = *iter;
+      XBT_DEBUG("Updating cnst %p ", &cnst);
+      if (cnst.sharing_policy) {
+        for (s_lmm_element_t& elem : cnst.enabled_element_set) {
+          xbt_assert(elem.variable->sharing_weight > 0);
+          XBT_DEBUG("\tUpdate constraint %p (%g) with variable %p by %g", &cnst, cnst.remaining, elem.variable,
+                    elem.variable->mu);
+          double_update(&cnst.remaining, elem.consumption_weight * elem.variable->mu, sg_maxmin_precision);
         }
-      }
-      if (not cnst->sharing_policy) {
-        XBT_DEBUG("\tUpdate constraint %p (%g) by %g", cnst, cnst->remaining, cnst->usage);
-
-        double_update(&(cnst->remaining), cnst->usage, sg_maxmin_precision);
+      } else {
+        for (s_lmm_element_t& elem : cnst.enabled_element_set) {
+          xbt_assert(elem.variable->sharing_weight > 0);
+          XBT_DEBUG("\tNon-Shared variable. Update constraint usage of %p (%g) with variable %p by %g", &cnst,
+                    cnst.usage, elem.variable, elem.variable->mu);
+          cnst.usage = std::min(cnst.usage, elem.consumption_weight * elem.variable->mu);
+        }
+        XBT_DEBUG("\tUpdate constraint %p (%g) by %g", &cnst, cnst.remaining, cnst.usage);
+        double_update(&cnst.remaining, cnst.usage, sg_maxmin_precision);
       }
 
-      XBT_DEBUG("\tRemaining for %p : %g", cnst, cnst->remaining);
-      if (cnst->remaining <= 0.0) {
-        XBT_DEBUG("\tGet rid of constraint %p", cnst);
+      XBT_DEBUG("\tRemaining for %p : %g", &cnst, cnst.remaining);
+      if (cnst.remaining <= 0.0) {
+        XBT_DEBUG("\tGet rid of constraint %p", &cnst);
 
-        xbt_swag_remove(cnst, cnst_list);
-        xbt_swag_foreach(_elem, elem_list)
-        {
-          elem = static_cast<lmm_element_t>(_elem);
-          if (elem->variable->sharing_weight <= 0)
+        iter = cnst_list.erase(iter);
+        for (s_lmm_element_t& elem : cnst.enabled_element_set) {
+          if (elem.variable->sharing_weight <= 0)
             break;
-          if (elem->consumption_weight > 0) {
-            XBT_DEBUG("\t\tGet rid of variable %p", elem->variable);
-            xbt_swag_remove(elem->variable, var_list);
+          if (elem.consumption_weight > 0 && elem.variable->saturated_variable_set_hook.is_linked()) {
+            XBT_DEBUG("\t\tGet rid of variable %p", elem.variable);
+            var_list.erase(var_list.iterator_to(*elem.variable));
           }
         }
+      } else {
+        iter++;
       }
     }
-  } while (xbt_swag_size(var_list));
+  } while (not var_list.empty());
 
-  xbt_swag_reset(cnst_list);
+  cnst_list.clear();
   sys->modified = true;
   if (XBT_LOG_ISENABLED(surf_maxmin, xbt_log_priority_debug)) {
     XBT_DEBUG("Fair bottleneck done");
index 8c61de7..f0e33b4 100644 (file)
@@ -7,7 +7,7 @@
  * Modeling the proportional fairness using the Lagrangian Optimization Approach. For a detailed description see:
  * "ssh://username@scm.gforge.inria.fr/svn/memo/people/pvelho/lagrange/ppf.ps".
  */
-#include "surf/maxmin.hpp"
+#include "src/kernel/lmm/maxmin.hpp"
 #include "xbt/log.h"
 #include "xbt/sysdep.h"
 
@@ -26,11 +26,12 @@ XBT_LOG_NEW_SUBCATEGORY(surf_lagrange_dichotomy, surf_lagrange, "Logging specifi
 #define RENO2_SCALING 1.0
 
 namespace simgrid {
-namespace surf {
+namespace kernel {
+namespace lmm {
 
-double (*func_f_def)(lmm_variable_t, double);
-double (*func_fp_def)(lmm_variable_t, double);
-double (*func_fpi_def)(lmm_variable_t, double);
+double (*func_f_def)(const s_lmm_variable_t&, double);
+double (*func_fp_def)(const s_lmm_variable_t&, double);
+double (*func_fpi_def)(const s_lmm_variable_t&, double);
 
 /*
  * Local prototypes to implement the Lagrangian optimization with optimal step, also called dichotomy.
@@ -38,124 +39,101 @@ double (*func_fpi_def)(lmm_variable_t, double);
 // solves the proportional fairness using a Lagrangian optimization with dichotomy step
 void lagrange_solve(lmm_system_t sys);
 // computes the value of the dichotomy using a initial values, init, with a specific variable or constraint
-static double dichotomy(double init, double diff(double, void*), void* var_cnst, double min_error);
-// computes the value of the differential of constraint param_cnst applied to lambda
-static double partial_diff_lambda(double lambda, void* param_cnst);
+static double dichotomy(double init, double diff(double, const s_lmm_constraint_t&), const s_lmm_constraint_t& cnst,
+                        double min_error);
+// computes the value of the differential of constraint cnst applied to lambda
+static double partial_diff_lambda(double lambda, const s_lmm_constraint_t& cnst);
 
-static int __check_feasible(xbt_swag_t cnst_list, xbt_swag_t var_list, int warn)
+template <class CnstList, class VarList>
+static int __check_feasible(const CnstList& cnst_list, const VarList& var_list, int warn)
 {
-  void* _cnst;
-  void* _elem;
-  void* _var;
-  xbt_swag_t elem_list  = nullptr;
-  lmm_element_t elem    = nullptr;
-  lmm_constraint_t cnst = nullptr;
-  lmm_variable_t var    = nullptr;
-
-  xbt_swag_foreach(_cnst, cnst_list)
-  {
-    cnst       = static_cast<lmm_constraint_t>(_cnst);
+  for (s_lmm_constraint_t const& cnst : cnst_list) {
     double tmp = 0;
-    elem_list  = &(cnst->enabled_element_set);
-    xbt_swag_foreach(_elem, elem_list)
-    {
-      elem = static_cast<lmm_element_t>(_elem);
-      var  = elem->variable;
+    for (s_lmm_element_t const& elem : cnst.enabled_element_set) {
+      lmm_variable_t var = elem.variable;
       xbt_assert(var->sharing_weight > 0);
       tmp += var->value;
     }
 
-    if (double_positive(tmp - cnst->bound, sg_maxmin_precision)) {
+    if (double_positive(tmp - cnst.bound, sg_maxmin_precision)) {
       if (warn)
-        XBT_WARN("The link (%p) is over-used. Expected less than %f and got %f", cnst, cnst->bound, tmp);
+        XBT_WARN("The link (%p) is over-used. Expected less than %f and got %f", &cnst, cnst.bound, tmp);
       return 0;
     }
-    XBT_DEBUG("Checking feasability for constraint (%p): sat = %f, lambda = %f ", cnst, tmp - cnst->bound,
-              cnst->lambda);
+    XBT_DEBUG("Checking feasability for constraint (%p): sat = %f, lambda = %f ", &cnst, tmp - cnst.bound, cnst.lambda);
   }
 
-  xbt_swag_foreach(_var, var_list)
-  {
-    var = static_cast<lmm_variable_t>(_var);
-    if (not var->sharing_weight)
+  for (s_lmm_variable_t const& var : var_list) {
+    if (not var.sharing_weight)
       break;
-    if (var->bound < 0)
+    if (var.bound < 0)
       continue;
-    XBT_DEBUG("Checking feasability for variable (%p): sat = %f mu = %f", var, var->value - var->bound, var->mu);
+    XBT_DEBUG("Checking feasability for variable (%p): sat = %f mu = %f", &var, var.value - var.bound, var.mu);
 
-    if (double_positive(var->value - var->bound, sg_maxmin_precision)) {
+    if (double_positive(var.value - var.bound, sg_maxmin_precision)) {
       if (warn)
-        XBT_WARN("The variable (%p) is too large. Expected less than %f and got %f", var, var->bound, var->value);
+        XBT_WARN("The variable (%p) is too large. Expected less than %f and got %f", &var, var.bound, var.value);
       return 0;
     }
   }
   return 1;
 }
 
-static double new_value(lmm_variable_t var)
+static double new_value(const s_lmm_variable_t& var)
 {
   double tmp = 0;
 
-  for (s_lmm_element_t const& elem : var->cnsts) {
+  for (s_lmm_element_t const& elem : var.cnsts) {
     tmp += elem.constraint->lambda;
   }
-  if (var->bound > 0)
-    tmp += var->mu;
-  XBT_DEBUG("\t Working on var (%p). cost = %e; Weight = %e", var, tmp, var->sharing_weight);
+  if (var.bound > 0)
+    tmp += var.mu;
+  XBT_DEBUG("\t Working on var (%p). cost = %e; Weight = %e", &var, tmp, var.sharing_weight);
   // uses the partial differential inverse function
-  return var->func_fpi(var, tmp);
+  return var.func_fpi(var, tmp);
 }
 
-static double new_mu(lmm_variable_t var)
+static double new_mu(const s_lmm_variable_t& var)
 {
   double mu_i    = 0.0;
   double sigma_i = 0.0;
 
-  for (s_lmm_element_t const& elem : var->cnsts) {
+  for (s_lmm_element_t const& elem : var.cnsts) {
     sigma_i += elem.constraint->lambda;
   }
-  mu_i = var->func_fp(var, var->bound) - sigma_i;
+  mu_i = var.func_fp(var, var.bound) - sigma_i;
   if (mu_i < 0.0)
     return 0.0;
   return mu_i;
 }
 
-static double dual_objective(xbt_swag_t var_list, xbt_swag_t cnst_list)
+template <class VarList, class CnstList>
+static double dual_objective(const VarList& var_list, const CnstList& cnst_list)
 {
-  void* _cnst;
-  void* _var;
-  lmm_constraint_t cnst = nullptr;
-  lmm_variable_t var    = nullptr;
-
   double obj = 0.0;
 
-  xbt_swag_foreach(_var, var_list)
-  {
-    var            = static_cast<lmm_variable_t>(_var);
+  for (s_lmm_variable_t const& var : var_list) {
     double sigma_i = 0.0;
 
-    if (not var->sharing_weight)
+    if (not var.sharing_weight)
       break;
 
-    for (s_lmm_element_t const& elem : var->cnsts)
+    for (s_lmm_element_t const& elem : var.cnsts)
       sigma_i += elem.constraint->lambda;
 
-    if (var->bound > 0)
-      sigma_i += var->mu;
+    if (var.bound > 0)
+      sigma_i += var.mu;
 
-    XBT_DEBUG("var %p : sigma_i = %1.20f", var, sigma_i);
+    XBT_DEBUG("var %p : sigma_i = %1.20f", &var, sigma_i);
 
-    obj += var->func_f(var, var->func_fpi(var, sigma_i)) - sigma_i * var->func_fpi(var, sigma_i);
+    obj += var.func_f(var, var.func_fpi(var, sigma_i)) - sigma_i * var.func_fpi(var, sigma_i);
 
-    if (var->bound > 0)
-      obj += var->mu * var->bound;
+    if (var.bound > 0)
+      obj += var.mu * var.bound;
   }
 
-  xbt_swag_foreach(_cnst, cnst_list)
-  {
-    cnst = static_cast<lmm_constraint_t>(_cnst);
-    obj += cnst->lambda * cnst->bound;
-  }
+  for (s_lmm_constraint_t const& cnst : cnst_list)
+    obj += cnst.lambda * cnst.bound;
 
   return obj;
 }
@@ -182,44 +160,37 @@ void lagrange_solve(lmm_system_t sys)
     return;
 
   /* Initialize lambda. */
-  xbt_swag_t cnst_list = &(sys->active_constraint_set);
-  void* _cnst;
-  xbt_swag_foreach(_cnst, cnst_list)
-  {
-    lmm_constraint_t cnst = (lmm_constraint_t)_cnst;
-    cnst->lambda          = 1.0;
-    cnst->new_lambda      = 2.0;
-    XBT_DEBUG("#### cnst(%p)->lambda :  %e", cnst, cnst->lambda);
+  auto& cnst_list = sys->active_constraint_set;
+  for (s_lmm_constraint_t& cnst : cnst_list) {
+    cnst.lambda     = 1.0;
+    cnst.new_lambda = 2.0;
+    XBT_DEBUG("#### cnst(%p)->lambda :  %e", &cnst, cnst.lambda);
   }
 
   /*
-   * Initialize the var list variable with only the active variables.
-   * Associate an index in the swag variables. Initialize mu.
+   * Initialize the var_list variable with only the active variables. Initialize mu.
    */
-  xbt_swag_t var_list = &(sys->variable_set);
-  void* _var;
-  xbt_swag_foreach(_var, var_list)
-  {
-    lmm_variable_t var = static_cast<lmm_variable_t>(_var);
-    if (not var->sharing_weight)
-      var->value = 0.0;
+  auto& var_list = sys->variable_set;
+  for (s_lmm_variable_t& var : var_list) {
+    if (not var.sharing_weight)
+      var.value = 0.0;
     else {
-      if (var->bound < 0.0) {
-        XBT_DEBUG("#### NOTE var(%p) is a boundless variable", var);
-        var->mu = -1.0;
+      if (var.bound < 0.0) {
+        XBT_DEBUG("#### NOTE var(%p) is a boundless variable", &var);
+        var.mu = -1.0;
       } else {
-        var->mu     = 1.0;
-        var->new_mu = 2.0;
+        var.mu     = 1.0;
+        var.new_mu = 2.0;
       }
-      var->value = new_value(var);
-      XBT_DEBUG("#### var(%p) ->weight :  %e", var, var->sharing_weight);
-      XBT_DEBUG("#### var(%p) ->mu :  %e", var, var->mu);
-      XBT_DEBUG("#### var(%p) ->weight: %e", var, var->sharing_weight);
-      XBT_DEBUG("#### var(%p) ->bound: %e", var, var->bound);
-      auto weighted = std::find_if(begin(var->cnsts), end(var->cnsts),
+      var.value = new_value(var);
+      XBT_DEBUG("#### var(%p) ->weight :  %e", &var, var.sharing_weight);
+      XBT_DEBUG("#### var(%p) ->mu :  %e", &var, var.mu);
+      XBT_DEBUG("#### var(%p) ->weight: %e", &var, var.sharing_weight);
+      XBT_DEBUG("#### var(%p) ->bound: %e", &var, var.bound);
+      auto weighted = std::find_if(begin(var.cnsts), end(var.cnsts),
                                    [](s_lmm_element_t const& x) { return x.consumption_weight != 0.0; });
-      if (weighted == end(var->cnsts))
-        var->value = 1.0;
+      if (weighted == end(var.cnsts))
+        var.value = 1.0;
     }
   }
 
@@ -234,14 +205,12 @@ void lagrange_solve(lmm_system_t sys)
     XBT_DEBUG("-------------- Gradient Descent ----------");
 
     /* Improve the value of mu_i */
-    xbt_swag_foreach(_var, var_list)
-    {
-      lmm_variable_t var = static_cast<lmm_variable_t>(_var);
-      if (var->sharing_weight && var->bound >= 0) {
-        XBT_DEBUG("Working on var (%p)", var);
-        var->new_mu = new_mu(var);
-        XBT_DEBUG("Updating mu : var->mu (%p) : %1.20f -> %1.20f", var, var->mu, var->new_mu);
-        var->mu = var->new_mu;
+    for (s_lmm_variable_t& var : var_list) {
+      if (var.sharing_weight && var.bound >= 0) {
+        XBT_DEBUG("Working on var (%p)", &var);
+        var.new_mu = new_mu(var);
+        XBT_DEBUG("Updating mu : var->mu (%p) : %1.20f -> %1.20f", &var, var.mu, var.new_mu);
+        var.mu = var.new_mu;
 
         double new_obj = dual_objective(var_list, cnst_list);
         XBT_DEBUG("Improvement for Objective (%g -> %g) : %g", obj, new_obj, obj - new_obj);
@@ -251,13 +220,11 @@ void lagrange_solve(lmm_system_t sys)
     }
 
     /* Improve the value of lambda_i */
-    xbt_swag_foreach(_cnst, cnst_list)
-    {
-      lmm_constraint_t cnst = static_cast<lmm_constraint_t>(_cnst);
-      XBT_DEBUG("Working on cnst (%p)", cnst);
-      cnst->new_lambda = dichotomy(cnst->lambda, partial_diff_lambda, cnst, dichotomy_min_error);
-      XBT_DEBUG("Updating lambda : cnst->lambda (%p) : %1.20f -> %1.20f", cnst, cnst->lambda, cnst->new_lambda);
-      cnst->lambda = cnst->new_lambda;
+    for (s_lmm_constraint_t& cnst : cnst_list) {
+      XBT_DEBUG("Working on cnst (%p)", &cnst);
+      cnst.new_lambda = dichotomy(cnst.lambda, partial_diff_lambda, cnst, dichotomy_min_error);
+      XBT_DEBUG("Updating lambda : cnst->lambda (%p) : %1.20f -> %1.20f", &cnst, cnst.lambda, cnst.new_lambda);
+      cnst.lambda = cnst.new_lambda;
 
       double new_obj = dual_objective(var_list, cnst_list);
       XBT_DEBUG("Improvement for Objective (%g -> %g) : %g", obj, new_obj, obj - new_obj);
@@ -268,18 +235,16 @@ void lagrange_solve(lmm_system_t sys)
     /* Now computes the values of each variable (\rho) based on the values of \lambda and \mu. */
     XBT_DEBUG("-------------- Check convergence ----------");
     overall_modification = 0;
-    xbt_swag_foreach(_var, var_list)
-    {
-      lmm_variable_t var = static_cast<lmm_variable_t>(_var);
-      if (var->sharing_weight <= 0)
-        var->value = 0.0;
+    for (s_lmm_variable_t& var : var_list) {
+      if (var.sharing_weight <= 0)
+        var.value = 0.0;
       else {
         double tmp = new_value(var);
 
-        overall_modification = std::max(overall_modification, fabs(var->value - tmp));
+        overall_modification = std::max(overall_modification, fabs(var.value - tmp));
 
-        var->value = tmp;
-        XBT_DEBUG("New value of var (%p)  = %e, overall_modification = %e", var, var->value, overall_modification);
+        var.value = tmp;
+        XBT_DEBUG("New value of var (%p)  = %e, overall_modification = %e", &var, var.value, overall_modification);
       }
     }
 
@@ -314,7 +279,8 @@ void lagrange_solve(lmm_system_t sys)
  *
  * @return a double corresponding to the result of the dichotomy process
  */
-static double dichotomy(double init, double diff(double, void*), void* var_cnst, double min_error)
+static double dichotomy(double init, double diff(double, const s_lmm_constraint_t&), const s_lmm_constraint_t& cnst,
+                        double min_error)
 {
   double min = init;
   double max = init;
@@ -332,15 +298,15 @@ static double dichotomy(double init, double diff(double, void*), void* var_cnst,
 
   overall_error = 1;
 
-  diff_0 = diff(1e-16, var_cnst);
+  diff_0 = diff(1e-16, cnst);
   if (diff_0 >= 0) {
     XBT_CDEBUG(surf_lagrange_dichotomy, "returning 0.0 (diff = %e)", diff_0);
     XBT_OUT();
     return 0.0;
   }
 
-  double min_diff = diff(min, var_cnst);
-  double max_diff = diff(max, var_cnst);
+  double min_diff = diff(min, cnst);
+  double max_diff = diff(max, cnst);
 
   while (overall_error > min_error) {
     XBT_CDEBUG(surf_lagrange_dichotomy, "[min, max] = [%1.20f, %1.20f] || diffmin, diffmax = %1.20f, %1.20f", min, max,
@@ -350,7 +316,7 @@ static double dichotomy(double init, double diff(double, void*), void* var_cnst,
       if (min == max) {
         XBT_CDEBUG(surf_lagrange_dichotomy, "Decreasing min");
         min      = min / 2.0;
-        min_diff = diff(min, var_cnst);
+        min_diff = diff(min, cnst);
       } else {
         XBT_CDEBUG(surf_lagrange_dichotomy, "Decreasing max");
         max      = min;
@@ -360,7 +326,7 @@ static double dichotomy(double init, double diff(double, void*), void* var_cnst,
       if (min == max) {
         XBT_CDEBUG(surf_lagrange_dichotomy, "Increasing max");
         max      = max * 2.0;
-        max_diff = diff(max, var_cnst);
+        max_diff = diff(max, cnst);
       } else {
         XBT_CDEBUG(surf_lagrange_dichotomy, "Increasing min");
         min      = max;
@@ -377,7 +343,7 @@ static double dichotomy(double init, double diff(double, void*), void* var_cnst,
                   min, max - min, min_diff, max_diff);
         break;
       }
-      middle_diff = diff(middle, var_cnst);
+      middle_diff = diff(middle, cnst);
 
       if (middle_diff < 0) {
         XBT_CDEBUG(surf_lagrange_dichotomy, "Increasing min");
@@ -414,44 +380,38 @@ static double dichotomy(double init, double diff(double, void*), void* var_cnst,
   return ((min + max) / 2.0);
 }
 
-static double partial_diff_lambda(double lambda, void* param_cnst)
+static double partial_diff_lambda(double lambda, const s_lmm_constraint_t& cnst)
 {
-  lmm_constraint_t cnst = static_cast<lmm_constraint_t>(param_cnst);
   double diff           = 0.0;
 
   XBT_IN();
 
-  XBT_CDEBUG(surf_lagrange_dichotomy, "Computing diff of cnst (%p)", cnst);
+  XBT_CDEBUG(surf_lagrange_dichotomy, "Computing diff of cnst (%p)", &cnst);
 
-  xbt_swag_t elem_list = &(cnst->enabled_element_set);
-  void* _elem;
-  xbt_swag_foreach(_elem, elem_list)
-  {
-    lmm_element_t elem = static_cast<lmm_element_t>(_elem);
-    lmm_variable_t var = elem->variable;
-    xbt_assert(var->sharing_weight > 0);
-    XBT_CDEBUG(surf_lagrange_dichotomy, "Computing sigma_i for var (%p)", var);
+  for (s_lmm_element_t const& elem : cnst.enabled_element_set) {
+    s_lmm_variable_t& var = *elem.variable;
+    xbt_assert(var.sharing_weight > 0);
+    XBT_CDEBUG(surf_lagrange_dichotomy, "Computing sigma_i for var (%p)", &var);
     // Initialize the summation variable
     double sigma_i = 0.0;
 
     // Compute sigma_i
-    for (s_lmm_element_t const& elem : var->cnsts) {
-      sigma_i += elem.constraint->lambda;
-    }
+    for (s_lmm_element_t const& elem2 : var.cnsts)
+      sigma_i += elem2.constraint->lambda;
 
     // add mu_i if this flow has a RTT constraint associated
-    if (var->bound > 0)
-      sigma_i += var->mu;
+    if (var.bound > 0)
+      sigma_i += var.mu;
 
-    // replace value of cnst->lambda by the value of parameter lambda
-    sigma_i = (sigma_i - cnst->lambda) + lambda;
+    // replace value of cnst.lambda by the value of parameter lambda
+    sigma_i = (sigma_i - cnst.lambda) + lambda;
 
-    diff += -var->func_fpi(var, sigma_i);
+    diff += -var.func_fpi(var, sigma_i);
   }
 
-  diff += cnst->bound;
+  diff += cnst.bound;
 
-  XBT_CDEBUG(surf_lagrange_dichotomy, "d D/d lambda for cnst (%p) at %1.20f = %1.20f", cnst, lambda, diff);
+  XBT_CDEBUG(surf_lagrange_dichotomy, "d D/d lambda for cnst (%p) at %1.20f = %1.20f", &cnst, lambda, diff);
   XBT_OUT();
   return diff;
 }
@@ -464,9 +424,9 @@ static double partial_diff_lambda(double lambda, void* param_cnst)
  *  programming.
  *
  */
-void lmm_set_default_protocol_function(double (*func_f)(lmm_variable_t var, double x),
-                                       double (*func_fp)(lmm_variable_t var, double x),
-                                       double (*func_fpi)(lmm_variable_t var, double x))
+void lmm_set_default_protocol_function(double (*func_f)(const s_lmm_variable_t& var, double x),
+                                       double (*func_fp)(const s_lmm_variable_t& var, double x),
+                                       double (*func_fpi)(const s_lmm_variable_t& var, double x))
 {
   func_f_def   = func_f;
   func_fp_def  = func_fp;
@@ -481,22 +441,22 @@ void lmm_set_default_protocol_function(double (*func_f)(lmm_variable_t var, doub
  * Therefore: $fp(x) = \frac{\alpha D_f}{x}$
  * Therefore: $fpi(x) = \frac{\alpha D_f}{x}$
  */
-double func_vegas_f(lmm_variable_t var, double x)
+double func_vegas_f(const s_lmm_variable_t& var, double x)
 {
   xbt_assert(x > 0.0, "Don't call me with stupid values! (%1.20f)", x);
-  return VEGAS_SCALING * var->sharing_weight * log(x);
+  return VEGAS_SCALING * var.sharing_weight * log(x);
 }
 
-double func_vegas_fp(lmm_variable_t var, double x)
+double func_vegas_fp(const s_lmm_variable_t& var, double x)
 {
   xbt_assert(x > 0.0, "Don't call me with stupid values! (%1.20f)", x);
-  return VEGAS_SCALING * var->sharing_weight / x;
+  return VEGAS_SCALING * var.sharing_weight / x;
 }
 
-double func_vegas_fpi(lmm_variable_t var, double x)
+double func_vegas_fpi(const s_lmm_variable_t& var, double x)
 {
   xbt_assert(x > 0.0, "Don't call me with stupid values! (%1.20f)", x);
-  return var->sharing_weight / (x / VEGAS_SCALING);
+  return var.sharing_weight / (x / VEGAS_SCALING);
 }
 
 /*
@@ -504,27 +464,27 @@ double func_vegas_fpi(lmm_variable_t var, double x)
  * Therefore: $fp(x)  = \frac{3}{3 D_f^2 x^2+2}$
  * Therefore: $fpi(x)  = \sqrt{\frac{1}{{D_f}^2 x} - \frac{2}{3{D_f}^2}}$
  */
-double func_reno_f(lmm_variable_t var, double x)
+double func_reno_f(const s_lmm_variable_t& var, double x)
 {
-  xbt_assert(var->sharing_weight > 0.0, "Don't call me with stupid values!");
+  xbt_assert(var.sharing_weight > 0.0, "Don't call me with stupid values!");
 
-  return RENO_SCALING * sqrt(3.0 / 2.0) / var->sharing_weight * atan(sqrt(3.0 / 2.0) * var->sharing_weight * x);
+  return RENO_SCALING * sqrt(3.0 / 2.0) / var.sharing_weight * atan(sqrt(3.0 / 2.0) * var.sharing_weight * x);
 }
 
-double func_reno_fp(lmm_variable_t var, double x)
+double func_reno_fp(const s_lmm_variable_t& var, double x)
 {
-  return RENO_SCALING * 3.0 / (3.0 * var->sharing_weight * var->sharing_weight * x * x + 2.0);
+  return RENO_SCALING * 3.0 / (3.0 * var.sharing_weight * var.sharing_weight * x * x + 2.0);
 }
 
-double func_reno_fpi(lmm_variable_t var, double x)
+double func_reno_fpi(const s_lmm_variable_t& var, double x)
 {
   double res_fpi;
 
-  xbt_assert(var->sharing_weight > 0.0, "Don't call me with stupid values!");
+  xbt_assert(var.sharing_weight > 0.0, "Don't call me with stupid values!");
   xbt_assert(x > 0.0, "Don't call me with stupid values!");
 
-  res_fpi = 1.0 / (var->sharing_weight * var->sharing_weight * (x / RENO_SCALING)) -
-            2.0 / (3.0 * var->sharing_weight * var->sharing_weight);
+  res_fpi = 1.0 / (var.sharing_weight * var.sharing_weight * (x / RENO_SCALING)) -
+            2.0 / (3.0 * var.sharing_weight * var.sharing_weight);
   if (res_fpi <= 0.0)
     return 0.0;
   return sqrt(res_fpi);
@@ -535,22 +495,22 @@ double func_reno_fpi(lmm_variable_t var, double x)
  * Therefore:   $fp(x)  = 2/(Weight*x + 2)
  * Therefore:   $fpi(x) = (2*Weight)/x - 4
  */
-double func_reno2_f(lmm_variable_t var, double x)
+double func_reno2_f(const s_lmm_variable_t& var, double x)
 {
-  xbt_assert(var->sharing_weight > 0.0, "Don't call me with stupid values!");
-  return RENO2_SCALING * (1.0 / var->sharing_weight) *
-         log((x * var->sharing_weight) / (2.0 * x * var->sharing_weight + 3.0));
+  xbt_assert(var.sharing_weight > 0.0, "Don't call me with stupid values!");
+  return RENO2_SCALING * (1.0 / var.sharing_weight) *
+         log((x * var.sharing_weight) / (2.0 * x * var.sharing_weight + 3.0));
 }
 
-double func_reno2_fp(lmm_variable_t var, double x)
+double func_reno2_fp(const s_lmm_variable_t& var, double x)
 {
-  return RENO2_SCALING * 3.0 / (var->sharing_weight * x * (2.0 * var->sharing_weight * x + 3.0));
+  return RENO2_SCALING * 3.0 / (var.sharing_weight * x * (2.0 * var.sharing_weight * x + 3.0));
 }
 
-double func_reno2_fpi(lmm_variable_t var, double x)
+double func_reno2_fpi(const s_lmm_variable_t& var, double x)
 {
   xbt_assert(x > 0.0, "Don't call me with stupid values!");
-  double tmp     = x * var->sharing_weight * var->sharing_weight;
+  double tmp     = x * var.sharing_weight * var.sharing_weight;
   double res_fpi = tmp * (9.0 * x + 24.0);
 
   if (res_fpi <= 0.0)
@@ -561,3 +521,4 @@ double func_reno2_fpi(lmm_variable_t var, double x)
 }
 }
 }
+}
index 72d895e..f9c28c9 100644 (file)
@@ -5,7 +5,7 @@
 
 /* \file callbacks.h */
 
-#include "surf/maxmin.hpp"
+#include "src/kernel/lmm/maxmin.hpp"
 #include "xbt/backtrace.hpp"
 #include "xbt/log.h"
 #include "xbt/mallocator.h"
@@ -24,7 +24,8 @@ double sg_surf_precision   = 0.00001; /* Change this with --cfg=surf/precision:V
 int sg_concurrency_limit   = -1;      /* Change this with --cfg=maxmin/concurrency-limit:VALUE */
 
 namespace simgrid {
-namespace surf {
+namespace kernel {
+namespace lmm {
 
 typedef std::vector<int> dyn_light_t;
 
@@ -61,59 +62,47 @@ void s_lmm_element_t::increase_concurrency()
              "Concurrency limit overflow!");
 }
 
-void s_lmm_system_t::check_concurrency()
+void s_lmm_system_t::check_concurrency() const
 {
   // These checks are very expensive, so do them only if we want to debug SURF LMM
   if (not XBT_LOG_ISENABLED(surf_maxmin, xbt_log_priority_debug))
     return;
 
-  void* cnstIt;
-  xbt_swag_foreach(cnstIt, &constraint_set)
-  {
-    lmm_constraint_t cnst = (lmm_constraint_t)cnstIt;
+  for (s_lmm_constraint_t const& cnst : constraint_set) {
     int concurrency       = 0;
-    void* elemIt;
-    xbt_swag_foreach(elemIt, &(cnst->enabled_element_set))
-    {
-      lmm_element_t elem = (lmm_element_t)elemIt;
-      xbt_assert(elem->variable->sharing_weight > 0);
-      concurrency += elem->get_concurrency();
+    for (s_lmm_element_t const& elem : cnst.enabled_element_set) {
+      xbt_assert(elem.variable->sharing_weight > 0);
+      concurrency += elem.get_concurrency();
     }
 
-    xbt_swag_foreach(elemIt, &(cnst->disabled_element_set))
-    {
-      lmm_element_t elem = (lmm_element_t)elemIt;
+    for (s_lmm_element_t const& elem : cnst.disabled_element_set) {
       // We should have staged variables only if concurrency is reached in some constraint
-      xbt_assert(cnst->get_concurrency_limit() < 0 || elem->variable->staged_weight == 0 ||
-                     elem->variable->get_min_concurrency_slack() < elem->variable->concurrency_share,
+      xbt_assert(cnst.get_concurrency_limit() < 0 || elem.variable->staged_weight == 0 ||
+                     elem.variable->get_min_concurrency_slack() < elem.variable->concurrency_share,
                  "should not have staged variable!");
     }
 
-    xbt_assert(cnst->get_concurrency_limit() < 0 || cnst->get_concurrency_limit() >= concurrency,
+    xbt_assert(cnst.get_concurrency_limit() < 0 || cnst.get_concurrency_limit() >= concurrency,
                "concurrency check failed!");
-    xbt_assert(cnst->concurrency_current == concurrency, "concurrency_current is out-of-date!");
+    xbt_assert(cnst.concurrency_current == concurrency, "concurrency_current is out-of-date!");
   }
 
   // Check that for each variable, all corresponding elements are in the same state (i.e. same element sets)
-  void* varIt;
-  xbt_swag_foreach(varIt, &variable_set)
-  {
-    lmm_variable_t var = (lmm_variable_t)varIt;
-
-    if (var->cnsts.empty())
+  for (s_lmm_variable_t const& var : variable_set) {
+    if (var.cnsts.empty())
       continue;
 
-    lmm_element_t elem     = &var->cnsts[0];
-    int belong_to_enabled  = xbt_swag_belongs(elem, &(elem->constraint->enabled_element_set));
-    int belong_to_disabled = xbt_swag_belongs(elem, &(elem->constraint->disabled_element_set));
-    int belong_to_active   = xbt_swag_belongs(elem, &(elem->constraint->active_element_set));
+    const s_lmm_element_t& elem = var.cnsts[0];
+    int belong_to_enabled       = elem.enabled_element_set_hook.is_linked();
+    int belong_to_disabled      = elem.disabled_element_set_hook.is_linked();
+    int belong_to_active        = elem.active_element_set_hook.is_linked();
 
-    for (s_lmm_element_t const& elem : var->cnsts) {
-      xbt_assert(belong_to_enabled == xbt_swag_belongs(&elem, &(elem.constraint->enabled_element_set)),
+    for (s_lmm_element_t const& elem2 : var.cnsts) {
+      xbt_assert(belong_to_enabled == elem2.enabled_element_set_hook.is_linked(),
                  "Variable inconsistency (1): enabled_element_set");
-      xbt_assert(belong_to_disabled == xbt_swag_belongs(&elem, &(elem.constraint->disabled_element_set)),
+      xbt_assert(belong_to_disabled == elem2.disabled_element_set_hook.is_linked(),
                  "Variable inconsistency (2): disabled_element_set");
-      xbt_assert(belong_to_active == xbt_swag_belongs(&elem, &(elem.constraint->active_element_set)),
+      xbt_assert(belong_to_active == elem2.active_element_set_hook.is_linked(),
                  "Variable inconsistency (3): active_element_set");
     }
   }
@@ -132,11 +121,19 @@ void s_lmm_system_t::var_free(lmm_variable_t var)
   for (s_lmm_element_t& elem : var->cnsts) {
     if (var->sharing_weight > 0)
       elem.decrease_concurrency();
-    xbt_swag_remove(&elem, &(elem.constraint->enabled_element_set));
-    xbt_swag_remove(&elem, &(elem.constraint->disabled_element_set));
-    xbt_swag_remove(&elem, &(elem.constraint->active_element_set));
-    int nelements = xbt_swag_size(&(elem.constraint->enabled_element_set)) +
-                    xbt_swag_size(&(elem.constraint->disabled_element_set));
+    if (elem.enabled_element_set_hook.is_linked()) {
+      auto& set = elem.constraint->enabled_element_set;
+      set.erase(set.iterator_to(elem));
+    }
+    if (elem.disabled_element_set_hook.is_linked()) {
+      auto& set = elem.constraint->disabled_element_set;
+      set.erase(set.iterator_to(elem));
+    }
+    if (elem.active_element_set_hook.is_linked()) {
+      auto& set = elem.constraint->active_element_set;
+      set.erase(set.iterator_to(elem));
+    }
+    int nelements = elem.constraint->enabled_element_set.size() + elem.constraint->disabled_element_set.size();
     if (nelements == 0)
       make_constraint_inactive(elem.constraint);
     else
@@ -153,23 +150,11 @@ void s_lmm_system_t::var_free(lmm_variable_t var)
 
 s_lmm_system_t::s_lmm_system_t(bool selective_update) : selective_update_active(selective_update)
 {
-  s_lmm_variable_t var;
-  s_lmm_constraint_t cnst;
-
   modified        = false;
   visited_counter = 1;
 
   XBT_DEBUG("Setting selective_update_active flag to %d", selective_update_active);
 
-  xbt_swag_init(&variable_set, xbt_swag_offset(var, variable_set_hookup));
-  xbt_swag_init(&constraint_set, xbt_swag_offset(cnst, constraint_set_hookup));
-
-  xbt_swag_init(&active_constraint_set, xbt_swag_offset(cnst, active_constraint_set_hookup));
-
-  xbt_swag_init(&modified_constraint_set, xbt_swag_offset(cnst, modified_constraint_set_hookup));
-  xbt_swag_init(&saturated_variable_set, xbt_swag_offset(var, saturated_variable_set_hookup));
-  xbt_swag_init(&saturated_constraint_set, xbt_swag_offset(cnst, saturated_constraint_set_hookup));
-
   keep_track          = nullptr;
   variable_mallocator = xbt_mallocator_new(65536, s_lmm_system_t::variable_mallocator_new_f,
                                            s_lmm_system_t::variable_mallocator_free_f, nullptr);
@@ -201,12 +186,7 @@ void s_lmm_system_t::cnst_free(lmm_constraint_t cnst)
 
 s_lmm_constraint_t::s_lmm_constraint_t(void* id_value, double bound_value) : bound(bound_value), id(id_value)
 {
-  s_lmm_element_t elem;
-
   id_int = Global_debug_id++;
-  xbt_swag_init(&enabled_element_set, xbt_swag_offset(elem, enabled_element_set_hookup));
-  xbt_swag_init(&disabled_element_set, xbt_swag_offset(elem, disabled_element_set_hookup));
-  xbt_swag_init(&active_element_set, xbt_swag_offset(elem, active_element_set_hookup));
 
   remaining           = 0.0;
   usage               = 0.0;
@@ -245,9 +225,9 @@ lmm_variable_t s_lmm_system_t::variable_new(simgrid::surf::Action* id, double sh
   lmm_variable_t var = static_cast<lmm_variable_t>(xbt_mallocator_get(variable_mallocator));
   var->initialize(id, sharing_weight, bound, number_of_constraints, visited_counter - 1);
   if (sharing_weight)
-    xbt_swag_insert_at_head(var, &variable_set);
+    variable_set.push_front(*var);
   else
-    xbt_swag_insert_at_tail(var, &variable_set);
+    variable_set.push_back(*var);
 
   XBT_OUT(" returns %p", var);
   return var;
@@ -268,7 +248,7 @@ void s_lmm_system_t::expand(lmm_constraint_t cnst, lmm_variable_t var, double co
   int current_share = 0;
   if (var->concurrency_share > 1) {
     for (s_lmm_element_t& elem : var->cnsts) {
-      if (elem.constraint == cnst && xbt_swag_belongs(&elem, &(elem.constraint->enabled_element_set)))
+      if (elem.constraint == cnst && elem.enabled_element_set_hook.is_linked())
         current_share += elem.get_concurrency();
     }
   }
@@ -294,10 +274,10 @@ void s_lmm_system_t::expand(lmm_constraint_t cnst, lmm_variable_t var, double co
   elem.variable           = var;
 
   if (var->sharing_weight) {
-    xbt_swag_insert_at_head(&elem, &(elem.constraint->enabled_element_set));
+    elem.constraint->enabled_element_set.push_front(elem);
     elem.increase_concurrency();
   } else
-    xbt_swag_insert_at_tail(&elem, &(elem.constraint->disabled_element_set));
+    elem.constraint->disabled_element_set.push_back(elem);
 
   if (not selective_update_active) {
     make_constraint_active(cnst);
@@ -350,23 +330,31 @@ void s_lmm_system_t::expand_add(lmm_constraint_t cnst, lmm_variable_t var, doubl
   check_concurrency();
 }
 
-lmm_variable_t s_lmm_constraint_t::get_variable(lmm_element_t* elem) const
+lmm_variable_t s_lmm_constraint_t::get_variable(const_lmm_element_t* elem) const
 {
   if (*elem == nullptr) {
     // That is the first call, pick the first element among enabled_element_set (or disabled_element_set if
     // enabled_element_set is empty)
-    *elem = (lmm_element_t)xbt_swag_getFirst(&enabled_element_set);
-    if (*elem == nullptr)
-      *elem = (lmm_element_t)xbt_swag_getFirst(&disabled_element_set);
+    if (not enabled_element_set.empty())
+      *elem = &enabled_element_set.front();
+    else if (not disabled_element_set.empty())
+      *elem = &disabled_element_set.front();
+    else
+      *elem = nullptr;
   } else {
     // elem is not null, so we carry on
-    if (xbt_swag_belongs(*elem, &enabled_element_set)) {
+    if ((*elem)->enabled_element_set_hook.is_linked()) {
       // Look at enabled_element_set, and jump to disabled_element_set when finished
-      *elem = (lmm_element_t)xbt_swag_getNext(*elem, enabled_element_set.offset);
-      if (*elem == nullptr)
-        *elem = (lmm_element_t)xbt_swag_getFirst(&disabled_element_set);
+      auto iter = std::next(enabled_element_set.iterator_to(**elem));
+      if (iter != std::end(enabled_element_set))
+        *elem = &*iter;
+      else if (not disabled_element_set.empty())
+        *elem = &disabled_element_set.front();
+      else
+        *elem = nullptr;
     } else {
-      *elem = (lmm_element_t)xbt_swag_getNext(*elem, disabled_element_set.offset);
+      auto iter = std::next(disabled_element_set.iterator_to(**elem));
+      *elem     = iter != std::end(disabled_element_set) ? &*iter : nullptr;
     }
   }
   if (*elem)
@@ -375,15 +363,19 @@ lmm_variable_t s_lmm_constraint_t::get_variable(lmm_element_t* elem) const
     return nullptr;
 }
 
-// if we modify the swag between calls, normal version may loop forever
-// this safe version ensures that we browse the swag elements only once
-lmm_variable_t s_lmm_constraint_t::get_variable_safe(lmm_element_t* elem, lmm_element_t* nextelem, int* numelem) const
+// if we modify the list between calls, normal version may loop forever
+// this safe version ensures that we browse the list elements only once
+lmm_variable_t s_lmm_constraint_t::get_variable_safe(const_lmm_element_t* elem, const_lmm_element_t* nextelem,
+                                                     int* numelem) const
 {
   if (*elem == nullptr) {
-    *elem    = (lmm_element_t)xbt_swag_getFirst(&enabled_element_set);
-    *numelem = xbt_swag_size(&enabled_element_set) + xbt_swag_size(&disabled_element_set) - 1;
-    if (*elem == nullptr)
-      *elem = (lmm_element_t)xbt_swag_getFirst(&disabled_element_set);
+    *numelem = enabled_element_set.size() + disabled_element_set.size() - 1;
+    if (not enabled_element_set.empty())
+      *elem = &enabled_element_set.front();
+    else if (not disabled_element_set.empty())
+      *elem = &disabled_element_set.front();
+    else
+      *elem = nullptr;
   } else {
     *elem = *nextelem;
     if (*numelem > 0) {
@@ -393,13 +385,18 @@ lmm_variable_t s_lmm_constraint_t::get_variable_safe(lmm_element_t* elem, lmm_el
   }
   if (*elem) {
     // elem is not null, so we carry on
-    if (xbt_swag_belongs(*elem, &enabled_element_set)) {
+    if ((*elem)->enabled_element_set_hook.is_linked()) {
       // Look at enabled_element_set, and jump to disabled_element_set when finished
-      *nextelem = (lmm_element_t)xbt_swag_getNext(*elem, enabled_element_set.offset);
-      if (*nextelem == nullptr)
-        *nextelem = (lmm_element_t)xbt_swag_getFirst(&disabled_element_set);
+      auto iter = std::next(enabled_element_set.iterator_to(**elem));
+      if (iter != std::end(enabled_element_set))
+        *nextelem = &*iter;
+      else if (not disabled_element_set.empty())
+        *nextelem = &disabled_element_set.front();
+      else
+        *nextelem = nullptr;
     } else {
-      *nextelem = (lmm_element_t)xbt_swag_getNext(*elem, disabled_element_set.offset);
+      auto iter = std::next(disabled_element_set.iterator_to(**elem));
+      *nextelem = iter != std::end(disabled_element_set) ? &*iter : nullptr;
     }
     return (*elem)->variable;
   } else
@@ -426,171 +423,140 @@ static inline void saturated_variable_set_update(s_lmm_constraint_light_t* cnst_
   /* Add active variables (i.e. variables that need to be set) from the set of constraints to saturate
    * (cnst_light_tab)*/
   for (int const& saturated_cnst : saturated_constraints) {
-    lmm_constraint_light_t cnst = &cnst_light_tab[saturated_cnst];
-    void* _elem;
-    xbt_swag_t elem_list = &(cnst->cnst->active_element_set);
-    xbt_swag_foreach(_elem, elem_list)
-    {
-      lmm_element_t elem = (lmm_element_t)_elem;
+    s_lmm_constraint_light_t& cnst = cnst_light_tab[saturated_cnst];
+    for (s_lmm_element_t const& elem : cnst.cnst->active_element_set) {
       // Visiting active_element_set, so, by construction, should never get a zero weight, correct?
-      xbt_assert(elem->variable->sharing_weight > 0);
-      if (elem->consumption_weight > 0)
-        xbt_swag_insert(elem->variable, &(sys->saturated_variable_set));
+      xbt_assert(elem.variable->sharing_weight > 0);
+      if (elem.consumption_weight > 0 && not elem.variable->saturated_variable_set_hook.is_linked())
+        sys->saturated_variable_set.push_back(*elem.variable);
     }
   }
 }
 
-void s_lmm_system_t::print()
+template <class ElemList>
+static void format_lmm_element_list(const ElemList& elem_list, int sharing_policy, double& sum, std::string& buf)
+{
+  for (s_lmm_element_t const& elem : elem_list) {
+    buf += std::to_string(elem.consumption_weight) + ".'" + std::to_string(elem.variable->id_int) + "'(" +
+           std::to_string(elem.variable->value) + ")" + (sharing_policy ? " + " : " , ");
+    if (sharing_policy)
+      sum += elem.consumption_weight * elem.variable->value;
+    else
+      sum = std::max(sum, elem.consumption_weight * elem.variable->value);
+  }
+}
+
+void s_lmm_system_t::print() const
 {
   std::string buf = std::string("MAX-MIN ( ");
-  void* _var;
 
   /* Printing Objective */
-  xbt_swag_t var_list = &variable_set;
-  xbt_swag_foreach(_var, var_list)
-  {
-    lmm_variable_t var = (lmm_variable_t)_var;
-    buf                = buf + "'" + std::to_string(var->id_int) + "'(" + std::to_string(var->sharing_weight) + ") ";
-  }
+  for (s_lmm_variable_t const& var : variable_set)
+    buf += "'" + std::to_string(var.id_int) + "'(" + std::to_string(var.sharing_weight) + ") ";
   buf += ")";
   XBT_DEBUG("%20s", buf.c_str());
   buf.clear();
 
   XBT_DEBUG("Constraints");
   /* Printing Constraints */
-  void* _cnst;
-  xbt_swag_t cnst_list = &active_constraint_set;
-  xbt_swag_foreach(_cnst, cnst_list)
-  {
-    lmm_constraint_t cnst = (lmm_constraint_t)_cnst;
+  for (s_lmm_constraint_t const& cnst : active_constraint_set) {
     double sum            = 0.0;
     // Show  the enabled variables
-    void* _elem;
-    xbt_swag_t elem_list = &(cnst->enabled_element_set);
     buf += "\t";
-    buf += ((cnst->sharing_policy) ? "(" : "max(");
-    xbt_swag_foreach(_elem, elem_list)
-    {
-      lmm_element_t elem = (lmm_element_t)_elem;
-      buf = buf + std::to_string(elem->consumption_weight) + ".'" + std::to_string(elem->variable->id_int) + "'(" +
-            std::to_string(elem->variable->value) + ")" + ((cnst->sharing_policy) ? " + " : " , ");
-      if (cnst->sharing_policy)
-        sum += elem->consumption_weight * elem->variable->value;
-      else
-        sum = std::max(sum, elem->consumption_weight * elem->variable->value);
-    }
+    buf += cnst.sharing_policy ? "(" : "max(";
+    format_lmm_element_list(cnst.enabled_element_set, cnst.sharing_policy, sum, buf);
     // TODO: Adding disabled elements only for test compatibility, but do we really want them to be printed?
-    elem_list = &(cnst->disabled_element_set);
-    xbt_swag_foreach(_elem, elem_list)
-    {
-      lmm_element_t elem = (lmm_element_t)_elem;
-      buf = buf + std::to_string(elem->consumption_weight) + ".'" + std::to_string(elem->variable->id_int) + "'(" +
-            std::to_string(elem->variable->value) + ")" + ((cnst->sharing_policy) ? " + " : " , ");
-      if (cnst->sharing_policy)
-        sum += elem->consumption_weight * elem->variable->value;
-      else
-        sum = std::max(sum, elem->consumption_weight * elem->variable->value);
-    }
+    format_lmm_element_list(cnst.disabled_element_set, cnst.sharing_policy, sum, buf);
 
-    buf = buf + "0) <= " + std::to_string(cnst->bound) + " ('" + std::to_string(cnst->id_int) + "')";
+    buf += "0) <= " + std::to_string(cnst.bound) + " ('" + std::to_string(cnst.id_int) + "')";
 
-    if (not cnst->sharing_policy) {
+    if (not cnst.sharing_policy) {
       buf += " [MAX-Constraint]";
     }
     XBT_DEBUG("%s", buf.c_str());
     buf.clear();
-    xbt_assert(not double_positive(sum - cnst->bound, cnst->bound * sg_maxmin_precision),
-               "Incorrect value (%f is not smaller than %f): %g", sum, cnst->bound, sum - cnst->bound);
+    xbt_assert(not double_positive(sum - cnst.bound, cnst.bound * sg_maxmin_precision),
+               "Incorrect value (%f is not smaller than %f): %g", sum, cnst.bound, sum - cnst.bound);
   }
 
   XBT_DEBUG("Variables");
   /* Printing Result */
-  xbt_swag_foreach(_var, var_list)
-  {
-    lmm_variable_t var = (lmm_variable_t)_var;
-    if (var->bound > 0) {
-      XBT_DEBUG("'%d'(%f) : %f (<=%f)", var->id_int, var->sharing_weight, var->value, var->bound);
-      xbt_assert(not double_positive(var->value - var->bound, var->bound * sg_maxmin_precision),
-                 "Incorrect value (%f is not smaller than %f", var->value, var->bound);
+  for (s_lmm_variable_t const& var : variable_set) {
+    if (var.bound > 0) {
+      XBT_DEBUG("'%d'(%f) : %f (<=%f)", var.id_int, var.sharing_weight, var.value, var.bound);
+      xbt_assert(not double_positive(var.value - var.bound, var.bound * sg_maxmin_precision),
+                 "Incorrect value (%f is not smaller than %f", var.value, var.bound);
     } else {
-      XBT_DEBUG("'%d'(%f) : %f", var->id_int, var->sharing_weight, var->value);
+      XBT_DEBUG("'%d'(%f) : %f", var.id_int, var.sharing_weight, var.value);
     }
   }
 }
 
 void s_lmm_system_t::solve()
 {
-  void* _cnst;
-  void* _cnst_next;
-  void* _elem;
+  if (modified) {
+    XBT_IN("(sys=%p)", this);
+    /* Compute Usage and store the variables that reach the maximum. If selective_update_active is true, only
+     * constraints that changed are considered. Otherwise all constraints with active actions are considered.
+     */
+    if (selective_update_active)
+      solve(modified_constraint_set);
+    else
+      solve(active_constraint_set);
+    XBT_OUT();
+  }
+}
+
+template <class CnstList> void s_lmm_system_t::solve(CnstList& cnst_list)
+{
   double min_usage = -1;
   double min_bound = -1;
 
-  if (not modified)
-    return;
-
-  XBT_IN("(sys=%p)", this);
-
-  /* Compute Usage and store the variables that reach the maximum. If selective_update_active is true, only constraints
-   * that changed are considered. Otherwise all constraints with active actions are considered.
-   */
-  xbt_swag_t cnst_list = selective_update_active ? &modified_constraint_set : &active_constraint_set;
-
-  XBT_DEBUG("Active constraints : %d", xbt_swag_size(cnst_list));
+  XBT_DEBUG("Active constraints : %zu", cnst_list.size());
   /* Init: Only modified code portions: reset the value of active variables */
-  xbt_swag_foreach(_cnst, cnst_list)
-  {
-    lmm_constraint_t cnst = (lmm_constraint_t)_cnst;
-    xbt_swag_t elem_list  = &(cnst->enabled_element_set);
-    xbt_swag_foreach(_elem, elem_list)
-    {
-      lmm_variable_t var = ((lmm_element_t)_elem)->variable;
-      xbt_assert(var->sharing_weight > 0.0);
-      var->value = 0.0;
+  for (s_lmm_constraint_t const& cnst : cnst_list) {
+    for (s_lmm_element_t const& elem : cnst.enabled_element_set) {
+      xbt_assert(elem.variable->sharing_weight > 0.0);
+      elem.variable->value = 0.0;
     }
   }
 
-  s_lmm_constraint_light_t* cnst_light_tab = new s_lmm_constraint_light_t[xbt_swag_size(cnst_list)]();
+  s_lmm_constraint_light_t* cnst_light_tab = new s_lmm_constraint_light_t[cnst_list.size()]();
   int cnst_light_num                       = 0;
   dyn_light_t saturated_constraints;
 
-  xbt_swag_foreach_safe(_cnst, _cnst_next, cnst_list)
-  {
-    lmm_constraint_t cnst = (lmm_constraint_t)_cnst;
+  for (s_lmm_constraint_t& cnst : cnst_list) {
     /* INIT: Collect constraints that actually need to be saturated (i.e remaining  and usage are strictly positive)
      * into cnst_light_tab. */
-    cnst->remaining = cnst->bound;
-    if (not double_positive(cnst->remaining, cnst->bound * sg_maxmin_precision))
+    cnst.remaining = cnst.bound;
+    if (not double_positive(cnst.remaining, cnst.bound * sg_maxmin_precision))
       continue;
-    cnst->usage          = 0;
-    xbt_swag_t elem_list = &(cnst->enabled_element_set);
-    xbt_swag_foreach(_elem, elem_list)
-    {
-      lmm_element_t elem = (lmm_element_t)_elem;
-      xbt_assert(elem->variable->sharing_weight > 0);
-      if (elem->consumption_weight > 0) {
-        if (cnst->sharing_policy)
-          cnst->usage += elem->consumption_weight / elem->variable->sharing_weight;
-        else if (cnst->usage < elem->consumption_weight / elem->variable->sharing_weight)
-          cnst->usage = elem->consumption_weight / elem->variable->sharing_weight;
-
-        elem->make_active();
-        simgrid::surf::Action* action = static_cast<simgrid::surf::Action*>(elem->variable->id);
+    cnst.usage = 0;
+    for (s_lmm_element_t& elem : cnst.enabled_element_set) {
+      xbt_assert(elem.variable->sharing_weight > 0);
+      if (elem.consumption_weight > 0) {
+        if (cnst.sharing_policy)
+          cnst.usage += elem.consumption_weight / elem.variable->sharing_weight;
+        else if (cnst.usage < elem.consumption_weight / elem.variable->sharing_weight)
+          cnst.usage = elem.consumption_weight / elem.variable->sharing_weight;
+
+        elem.make_active();
+        simgrid::surf::Action* action = static_cast<simgrid::surf::Action*>(elem.variable->id);
         if (keep_track && not action->is_linked())
           keep_track->push_back(*action);
       }
     }
-    XBT_DEBUG("Constraint '%d' usage: %f remaining: %f concurrency: %i<=%i<=%i", cnst->id_int, cnst->usage,
-              cnst->remaining, cnst->concurrency_current, cnst->concurrency_maximum, cnst->get_concurrency_limit());
+    XBT_DEBUG("Constraint '%d' usage: %f remaining: %f concurrency: %i<=%i<=%i", cnst.id_int, cnst.usage,
+              cnst.remaining, cnst.concurrency_current, cnst.concurrency_maximum, cnst.get_concurrency_limit());
     /* Saturated constraints update */
 
-    if (cnst->usage > 0) {
-      cnst_light_tab[cnst_light_num].cnst                 = cnst;
-      cnst->cnst_light                                    = &(cnst_light_tab[cnst_light_num]);
-      cnst_light_tab[cnst_light_num].remaining_over_usage = cnst->remaining / cnst->usage;
+    if (cnst.usage > 0) {
+      cnst_light_tab[cnst_light_num].cnst                 = &cnst;
+      cnst.cnst_light                                     = &cnst_light_tab[cnst_light_num];
+      cnst_light_tab[cnst_light_num].remaining_over_usage = cnst.remaining / cnst.usage;
       saturated_constraints_update(cnst_light_tab[cnst_light_num].remaining_over_usage, cnst_light_num,
                                    saturated_constraints, &min_usage);
-      xbt_assert(cnst->active_element_set.count > 0,
+      xbt_assert(not cnst.active_element_set.empty(),
                  "There is no sense adding a constraint that has no active element!");
       cnst_light_num++;
     }
@@ -601,54 +567,51 @@ void s_lmm_system_t::solve()
   /* Saturated variables update */
   do {
     /* Fix the variables that have to be */
-    xbt_swag_t var_list = &saturated_variable_set;
-    void* _var;
-    lmm_variable_t var = nullptr;
-    xbt_swag_foreach(_var, var_list)
-    {
-      var = (lmm_variable_t)_var;
-      if (var->sharing_weight <= 0.0)
+    auto& var_list = saturated_variable_set;
+    for (s_lmm_variable_t const& var : var_list) {
+      if (var.sharing_weight <= 0.0)
         DIE_IMPOSSIBLE;
       /* First check if some of these variables could reach their upper bound and update min_bound accordingly. */
-      XBT_DEBUG("var=%d, var->bound=%f, var->weight=%f, min_usage=%f, var->bound*var->weight=%f", var->id_int,
-                var->bound, var->sharing_weight, min_usage, var->bound * var->sharing_weight);
-      if ((var->bound > 0) && (var->bound * var->sharing_weight < min_usage)) {
+      XBT_DEBUG("var=%d, var.bound=%f, var.weight=%f, min_usage=%f, var.bound*var.weight=%f", var.id_int, var.bound,
+                var.sharing_weight, min_usage, var.bound * var.sharing_weight);
+      if ((var.bound > 0) && (var.bound * var.sharing_weight < min_usage)) {
         if (min_bound < 0)
-          min_bound = var->bound * var->sharing_weight;
+          min_bound = var.bound * var.sharing_weight;
         else
-          min_bound = std::min(min_bound, (var->bound * var->sharing_weight));
+          min_bound = std::min(min_bound, (var.bound * var.sharing_weight));
         XBT_DEBUG("Updated min_bound=%f", min_bound);
       }
     }
 
-    while ((var = (lmm_variable_t)xbt_swag_getFirst(var_list))) {
+    while (not var_list.empty()) {
+      s_lmm_variable_t& var = var_list.front();
       if (min_bound < 0) {
         // If no variable could reach its bound, deal iteratively the constraints usage ( at worst one constraint is
         // saturated at each cycle)
-        var->value = min_usage / var->sharing_weight;
-        XBT_DEBUG("Setting var (%d) value to %f\n", var->id_int, var->value);
+        var.value = min_usage / var.sharing_weight;
+        XBT_DEBUG("Setting var (%d) value to %f\n", var.id_int, var.value);
       } else {
         // If there exist a variable that can reach its bound, only update it (and other with the same bound) for now.
-        if (double_equals(min_bound, var->bound * var->sharing_weight, sg_maxmin_precision)) {
-          var->value = var->bound;
-          XBT_DEBUG("Setting %p (%d) value to %f\n", var, var->id_int, var->value);
+        if (double_equals(min_bound, var.bound * var.sharing_weight, sg_maxmin_precision)) {
+          var.value = var.bound;
+          XBT_DEBUG("Setting %p (%d) value to %f\n", &var, var.id_int, var.value);
         } else {
           // Variables which bound is different are not considered for this cycle, but they will be afterwards.
-          XBT_DEBUG("Do not consider %p (%d) \n", var, var->id_int);
-          xbt_swag_remove(var, var_list);
+          XBT_DEBUG("Do not consider %p (%d) \n", &var, var.id_int);
+          var_list.pop_front();
           continue;
         }
       }
-      XBT_DEBUG("Min usage: %f, Var(%d)->weight: %f, Var(%d)->value: %f ", min_usage, var->id_int, var->sharing_weight,
-                var->id_int, var->value);
+      XBT_DEBUG("Min usage: %f, Var(%d).weight: %f, Var(%d).value: %f ", min_usage, var.id_int, var.sharing_weight,
+                var.id_int, var.value);
 
       /* Update the usage of contraints where this variable is involved */
-      for (s_lmm_element_t& elem : var->cnsts) {
+      for (s_lmm_element_t& elem : var.cnsts) {
         lmm_constraint_t cnst = elem.constraint;
         if (cnst->sharing_policy) {
-          // Remember: shared constraints require that sum(elem.value * var->value) < cnst->bound
-          double_update(&(cnst->remaining), elem.consumption_weight * var->value, cnst->bound * sg_maxmin_precision);
-          double_update(&(cnst->usage), elem.consumption_weight / var->sharing_weight, sg_maxmin_precision);
+          // Remember: shared constraints require that sum(elem.value * var.value) < cnst->bound
+          double_update(&(cnst->remaining), elem.consumption_weight * var.value, cnst->bound * sg_maxmin_precision);
+          double_update(&(cnst->usage), elem.consumption_weight / var.sharing_weight, sg_maxmin_precision);
           // If the constraint is saturated, remove it from the set of active constraints (light_tab)
           if (not double_positive(cnst->usage, sg_maxmin_precision) ||
               not double_positive(cnst->remaining, cnst->bound * sg_maxmin_precision)) {
@@ -666,18 +629,15 @@ void s_lmm_system_t::solve()
           }
           elem.make_inactive();
         } else {
-          // Remember: non-shared constraints only require that max(elem.value * var->value) < cnst->bound
+          // Remember: non-shared constraints only require that max(elem.value * var.value) < cnst->bound
           cnst->usage = 0.0;
           elem.make_inactive();
-          xbt_swag_t elem_list = &(cnst->enabled_element_set);
-          xbt_swag_foreach(_elem, elem_list)
-          {
-            lmm_element_t elem2 = static_cast<lmm_element_t>(_elem);
-            xbt_assert(elem2->variable->sharing_weight > 0);
-            if (elem2->variable->value > 0)
+          for (s_lmm_element_t& elem2 : cnst->enabled_element_set) {
+            xbt_assert(elem2.variable->sharing_weight > 0);
+            if (elem2.variable->value > 0)
               continue;
-            if (elem2->consumption_weight > 0)
-              cnst->usage = std::max(cnst->usage, elem2->consumption_weight / elem2->variable->sharing_weight);
+            if (elem2.consumption_weight > 0)
+              cnst->usage = std::max(cnst->usage, elem2.consumption_weight / elem2.variable->sharing_weight);
           }
           // If the constraint is saturated, remove it from the set of active constraints (light_tab)
           if (not double_positive(cnst->usage, sg_maxmin_precision) ||
@@ -695,13 +655,13 @@ void s_lmm_system_t::solve()
             }
           } else {
             cnst->cnst_light->remaining_over_usage = cnst->remaining / cnst->usage;
-            xbt_assert(cnst->active_element_set.count > 0,
+            xbt_assert(not cnst->active_element_set.empty(),
                        "Should not keep a maximum constraint that has no active"
                        " element! You want to check the maxmin precision and possible rounding effects.");
           }
         }
       }
-      xbt_swag_remove(var, var_list);
+      var_list.pop_front();
     }
 
     /* Find out which variables reach the maximum */
@@ -710,7 +670,7 @@ void s_lmm_system_t::solve()
     saturated_constraints.clear();
     int pos;
     for (pos = 0; pos < cnst_light_num; pos++) {
-      xbt_assert(cnst_light_tab[pos].cnst->active_element_set.count > 0,
+      xbt_assert(not cnst_light_tab[pos].cnst->active_element_set.empty(),
                  "Cannot saturate more a constraint that has"
                  " no active element! You may want to change the maxmin precision (--cfg=maxmin/precision:<new_value>)"
                  " because of possible rounding effects.\n\tFor the record, the usage of this constraint is %g while "
@@ -734,7 +694,6 @@ void s_lmm_system_t::solve()
   check_concurrency();
 
   delete[] cnst_light_tab;
-  XBT_OUT();
 }
 
 void lmm_solve(lmm_system_t sys)
@@ -778,10 +737,8 @@ void s_lmm_variable_t::initialize(simgrid::surf::Action* id_value, double sharin
   func_fp           = func_fp_def;
   func_fpi          = func_fpi_def;
 
-  variable_set_hookup.next           = nullptr;
-  variable_set_hookup.prev           = nullptr;
-  saturated_variable_set_hookup.next = nullptr;
-  saturated_variable_set_hookup.prev = nullptr;
+  xbt_assert(not variable_set_hook.is_linked());
+  xbt_assert(not saturated_variable_set_hook.is_linked());
 }
 
 int s_lmm_variable_t::get_min_concurrency_slack() const
@@ -810,14 +767,15 @@ void s_lmm_system_t::enable_var(lmm_variable_t var)
   var->sharing_weight = var->staged_weight;
   var->staged_weight  = 0;
 
-  // Enabling the variable, move to var to list head. Subtlety is: here, we need to call update_modified_set AFTER
+  // Enabling the variable, move var to list head. Subtlety is: here, we need to call update_modified_set AFTER
   // moving at least one element of var.
 
-  xbt_swag_remove(var, &variable_set);
-  xbt_swag_insert_at_head(var, &variable_set);
+  variable_set.erase(variable_set.iterator_to(*var));
+  variable_set.push_front(*var);
   for (s_lmm_element_t& elem : var->cnsts) {
-    xbt_swag_remove(&elem, &(elem.constraint->disabled_element_set));
-    xbt_swag_insert_at_head(&elem, &(elem.constraint->enabled_element_set));
+    auto& set = elem.constraint->disabled_element_set;
+    set.erase(set.iterator_to(elem));
+    elem.constraint->enabled_element_set.push_front(elem);
     elem.increase_concurrency();
   }
   if (not var->cnsts.empty())
@@ -833,16 +791,18 @@ void s_lmm_system_t::disable_var(lmm_variable_t var)
   xbt_assert(not var->staged_weight, "Staged weight should have been cleared");
   // Disabling the variable, move to var to list tail. Subtlety is: here, we need to call update_modified_set
   // BEFORE moving the last element of var.
-  xbt_swag_remove(var, &variable_set);
-  xbt_swag_insert_at_tail(var, &variable_set);
+  variable_set.erase(variable_set.iterator_to(*var));
+  variable_set.push_back(*var);
   if (not var->cnsts.empty())
     update_modified_set(var->cnsts[0].constraint);
   for (s_lmm_element_t& elem : var->cnsts) {
-    xbt_swag_remove(&elem, &(elem.constraint->enabled_element_set));
-    xbt_swag_insert_at_tail(&elem, &(elem.constraint->disabled_element_set));
-
-    xbt_swag_remove(&elem, &(elem.constraint->active_element_set));
-
+    auto& set = elem.constraint->enabled_element_set;
+    set.erase(set.iterator_to(elem));
+    elem.constraint->disabled_element_set.push_back(elem);
+    if (elem.active_element_set_hook.is_linked()) {
+      auto& set = elem.constraint->active_element_set;
+      set.erase(set.iterator_to(elem));
+    }
     elem.decrease_concurrency();
   }
 
@@ -864,16 +824,22 @@ void s_lmm_system_t::on_disabled_var(lmm_constraint_t cnstr)
   if (cnstr->get_concurrency_limit() < 0)
     return;
 
-  int numelem = xbt_swag_size(&(cnstr->disabled_element_set));
+  int numelem = cnstr->disabled_element_set.size();
   if (not numelem)
     return;
 
-  lmm_element_t elem = (lmm_element_t)xbt_swag_getFirst(&(cnstr->disabled_element_set));
+  lmm_element_t elem = &cnstr->disabled_element_set.front();
 
-  // Cannot use xbt_swag_foreach, because lmm_enable_var will modify disabled_element_set.. within the loop
+  // Cannot use foreach loop, because lmm_enable_var will modify disabled_element_set.. within the loop
   while (numelem-- && elem) {
 
-    lmm_element_t nextelem = (lmm_element_t)xbt_swag_getNext(elem, cnstr->disabled_element_set.offset);
+    lmm_element_t nextelem;
+    if (elem->disabled_element_set_hook.is_linked()) {
+      auto iter = std::next(cnstr->disabled_element_set.iterator_to(*elem));
+      nextelem  = iter != std::end(cnstr->disabled_element_set) ? &*iter : nullptr;
+    } else {
+      nextelem = nullptr;
+    }
 
     if (elem->variable->staged_weight > 0 && elem->variable->can_enable()) {
       // Found a staged variable
@@ -953,17 +919,14 @@ void s_lmm_system_t::update_constraint_bound(lmm_constraint_t cnst, double bound
  */
 void s_lmm_system_t::update_modified_set_rec(lmm_constraint_t cnst)
 {
-  void* _elem;
-
-  xbt_swag_foreach(_elem, &cnst->enabled_element_set)
-  {
-    lmm_variable_t var = ((lmm_element_t)_elem)->variable;
-    for (s_lmm_element_t const& elem : var->cnsts) {
+  for (s_lmm_element_t const& elem : cnst->enabled_element_set) {
+    lmm_variable_t var = elem.variable;
+    for (s_lmm_element_t const& elem2 : var->cnsts) {
       if (var->visited == visited_counter)
         break;
-      if (elem.constraint != cnst && not xbt_swag_belongs(elem.constraint, &modified_constraint_set)) {
-        xbt_swag_insert(elem.constraint, &modified_constraint_set);
-        update_modified_set_rec(elem.constraint);
+      if (elem2.constraint != cnst && not elem2.constraint->modified_constraint_set_hook.is_linked()) {
+        modified_constraint_set.push_back(*elem2.constraint);
+        update_modified_set_rec(elem2.constraint);
       }
     }
     // var will be ignored in later visits as long as sys->visited_counter does not move
@@ -974,8 +937,8 @@ void s_lmm_system_t::update_modified_set_rec(lmm_constraint_t cnst)
 void s_lmm_system_t::update_modified_set(lmm_constraint_t cnst)
 {
   /* nothing to do if selective update isn't active */
-  if (selective_update_active && not xbt_swag_belongs(cnst, &modified_constraint_set)) {
-    xbt_swag_insert(cnst, &modified_constraint_set);
+  if (selective_update_active && not cnst->modified_constraint_set_hook.is_linked()) {
+    modified_constraint_set.push_back(*cnst);
     update_modified_set_rec(cnst);
   }
 }
@@ -989,10 +952,10 @@ void s_lmm_system_t::remove_all_modified_set()
   // (i.e. not readibily reproducible, and requiring a lot of run time before happening).
   if (++visited_counter == 1) {
     /* the counter wrapped around, reset each variable->visited */
-    void* _var;
-    xbt_swag_foreach(_var, &variable_set)((lmm_variable_t)_var)->visited = 0;
+    for (s_lmm_variable_t& var : variable_set)
+      var.visited = 0;
   }
-  xbt_swag_reset(&modified_constraint_set);
+  modified_constraint_set.clear();
 }
 
 /**
@@ -1009,35 +972,23 @@ void s_lmm_system_t::remove_all_modified_set()
 double s_lmm_constraint_t::get_usage() const
 {
   double result              = 0.0;
-  const_xbt_swag_t elem_list = &enabled_element_set;
-  void* _elem;
-
-  xbt_swag_foreach(_elem, elem_list)
-  {
-    lmm_element_t elem = (lmm_element_t)_elem;
-    if (elem->consumption_weight > 0) {
-      if (sharing_policy)
-        result += elem->consumption_weight * elem->variable->value;
-      else if (result < elem->consumption_weight * elem->variable->value)
-        result = std::max(result, elem->consumption_weight * elem->variable->value);
-    }
+  if (sharing_policy) {
+    for (s_lmm_element_t const& elem : enabled_element_set)
+      if (elem.consumption_weight > 0)
+        result += elem.consumption_weight * elem.variable->value;
+  } else {
+    for (s_lmm_element_t const& elem : enabled_element_set)
+      if (elem.consumption_weight > 0)
+        result = std::max(result, elem.consumption_weight * elem.variable->value);
   }
   return result;
 }
 
 int s_lmm_constraint_t::get_variable_amount() const
 {
-  int result                 = 0;
-  const_xbt_swag_t elem_list = &enabled_element_set;
-  void* _elem;
-
-  xbt_swag_foreach(_elem, elem_list)
-  {
-    lmm_element_t elem = (lmm_element_t)_elem;
-    if (elem->consumption_weight > 0)
-      result++;
-  }
-  return result;
+  return std::count_if(std::begin(enabled_element_set), std::end(enabled_element_set),
+                       [](const s_lmm_element_t& elem) { return elem.consumption_weight > 0; });
+}
 }
 }
 }
similarity index 73%
rename from src/include/surf/maxmin.hpp
rename to src/kernel/lmm/maxmin.hpp
index 1012ce1..3fc501f 100644 (file)
 #include "xbt/asserts.h"
 #include "xbt/mallocator.h"
 #include "xbt/misc.h"
-#include "xbt/swag.h"
+#include <boost/intrusive/list.hpp>
 #include <cmath>
 #include <limits>
 #include <vector>
 
 namespace simgrid {
-namespace surf {
+namespace kernel {
+namespace lmm {
 
 /** @addtogroup SURF_lmm
  * @details
@@ -143,21 +144,21 @@ XBT_PUBLIC(void) bottleneck_solve(lmm_system_t sys);
 /** Default functions associated to the chosen protocol. When using the lagrangian approach. */
 
 XBT_PUBLIC(void)
-lmm_set_default_protocol_function(double (*func_f)(lmm_variable_t var, double x),
-                                  double (*func_fp)(lmm_variable_t var, double x),
-                                  double (*func_fpi)(lmm_variable_t var, double x));
+lmm_set_default_protocol_function(double (*func_f)(const s_lmm_variable_t& var, double x),
+                                  double (*func_fp)(const s_lmm_variable_t& var, double x),
+                                  double (*func_fpi)(const s_lmm_variable_t& var, double x));
 
-XBT_PUBLIC(double) func_reno_f(lmm_variable_t var, double x);
-XBT_PUBLIC(double) func_reno_fp(lmm_variable_t var, double x);
-XBT_PUBLIC(double) func_reno_fpi(lmm_variable_t var, double x);
+XBT_PUBLIC(double) func_reno_f(const s_lmm_variable_t& var, double x);
+XBT_PUBLIC(double) func_reno_fp(const s_lmm_variable_t& var, double x);
+XBT_PUBLIC(double) func_reno_fpi(const s_lmm_variable_t& var, double x);
 
-XBT_PUBLIC(double) func_reno2_f(lmm_variable_t var, double x);
-XBT_PUBLIC(double) func_reno2_fp(lmm_variable_t var, double x);
-XBT_PUBLIC(double) func_reno2_fpi(lmm_variable_t var, double x);
+XBT_PUBLIC(double) func_reno2_f(const s_lmm_variable_t& var, double x);
+XBT_PUBLIC(double) func_reno2_fp(const s_lmm_variable_t& var, double x);
+XBT_PUBLIC(double) func_reno2_fpi(const s_lmm_variable_t& var, double x);
 
-XBT_PUBLIC(double) func_vegas_f(lmm_variable_t var, double x);
-XBT_PUBLIC(double) func_vegas_fp(lmm_variable_t var, double x);
-XBT_PUBLIC(double) func_vegas_fpi(lmm_variable_t var, double x);
+XBT_PUBLIC(double) func_vegas_f(const s_lmm_variable_t& var, double x);
+XBT_PUBLIC(double) func_vegas_fp(const s_lmm_variable_t& var, double x);
+XBT_PUBLIC(double) func_vegas_fpi(const s_lmm_variable_t& var, double x);
 
 /**
  * @brief LMM element
@@ -166,7 +167,8 @@ XBT_PUBLIC(double) func_vegas_fpi(lmm_variable_t var, double x);
  * Then, it is used to list all variables involved in constraint through constraint's xxx_element_set lists, or
  * vice-versa list all constraints for a given variable.
  */
-XBT_PUBLIC_CLASS s_lmm_element_t {
+XBT_PUBLIC_CLASS s_lmm_element_t
+{
 public:
   int get_concurrency() const;
   void decrease_concurrency();
@@ -176,9 +178,9 @@ public:
   void make_inactive();
 
   /* hookup to constraint */
-  s_xbt_swag_hookup_t enabled_element_set_hookup;
-  s_xbt_swag_hookup_t disabled_element_set_hookup;
-  s_xbt_swag_hookup_t active_element_set_hookup;
+  boost::intrusive::list_member_hook<> enabled_element_set_hook;
+  boost::intrusive::list_member_hook<> disabled_element_set_hook;
+  boost::intrusive::list_member_hook<> active_element_set_hook;
 
   lmm_constraint_t constraint;
   lmm_variable_t variable;
@@ -203,7 +205,8 @@ struct s_lmm_constraint_light_t {
  * \li Active elements which variable's weight is non-zero (i.e. it is enabled) AND its element value is non-zero.
  *     LMM_solve iterates over active elements during resolution, dynamically making them active or unactive.
  */
-XBT_PUBLIC_CLASS s_lmm_constraint_t {
+XBT_PUBLIC_CLASS s_lmm_constraint_t
+{
 public:
   s_lmm_constraint_t() = default;
   s_lmm_constraint_t(void* id_value, double bound_value);
@@ -270,7 +273,7 @@ public:
    * @param elem A element of constraint of the constraint or NULL
    * @return A variable associated to a constraint
    */
-  lmm_variable_t get_variable(lmm_element_t* elem) const;
+  lmm_variable_t get_variable(const_lmm_element_t* elem) const;
 
   /**
    * @brief Get a var associated to a constraint
@@ -280,7 +283,7 @@ public:
    * @param numelem parameter representing the number of elements to go
    * @return A variable associated to a constraint
    */
-  lmm_variable_t get_variable_safe(lmm_element_t* elem, lmm_element_t* nextelem, int* numelem) const;
+  lmm_variable_t get_variable_safe(const_lmm_element_t* elem, const_lmm_element_t* nextelem, int* numelem) const;
 
   /**
    * @brief Get the data associated to a constraint
@@ -289,13 +292,22 @@ public:
   void* get_id() const { return id; }
 
   /* hookup to system */
-  s_xbt_swag_hookup_t constraint_set_hookup           = {nullptr, nullptr};
-  s_xbt_swag_hookup_t active_constraint_set_hookup    = {nullptr, nullptr};
-  s_xbt_swag_hookup_t modified_constraint_set_hookup  = {nullptr, nullptr};
-  s_xbt_swag_hookup_t saturated_constraint_set_hookup = {nullptr, nullptr};
-  s_xbt_swag_t enabled_element_set;  /* a list of lmm_element_t */
-  s_xbt_swag_t disabled_element_set; /* a list of lmm_element_t */
-  s_xbt_swag_t active_element_set;   /* a list of lmm_element_t */
+  boost::intrusive::list_member_hook<> constraint_set_hook;
+  boost::intrusive::list_member_hook<> active_constraint_set_hook;
+  boost::intrusive::list_member_hook<> modified_constraint_set_hook;
+  boost::intrusive::list_member_hook<> saturated_constraint_set_hook;
+  boost::intrusive::list<s_lmm_element_t,
+                         boost::intrusive::member_hook<s_lmm_element_t, boost::intrusive::list_member_hook<>,
+                                                       &s_lmm_element_t::enabled_element_set_hook>>
+      enabled_element_set;
+  boost::intrusive::list<s_lmm_element_t,
+                         boost::intrusive::member_hook<s_lmm_element_t, boost::intrusive::list_member_hook<>,
+                                                       &s_lmm_element_t::disabled_element_set_hook>>
+      disabled_element_set;
+  boost::intrusive::list<s_lmm_element_t,
+                         boost::intrusive::member_hook<s_lmm_element_t, boost::intrusive::list_member_hook<>,
+                                                       &s_lmm_element_t::active_element_set_hook>>
+      active_element_set;
   double remaining;
   double usage;
   double bound;
@@ -323,9 +335,10 @@ private:
  * When something prevents us from enabling a variable, we "stage" the weight that we would have like to set, so that as
  * soon as possible we enable the variable with desired weight
  */
-XBT_PUBLIC_CLASS s_lmm_variable_t {
+XBT_PUBLIC_CLASS s_lmm_variable_t
+{
 public:
-  void initialize(simgrid::surf::Action* id_value, double sharing_weight_value, double bound_value,
+  void initialize(simgrid::surf::Action * id_value, double sharing_weight_value, double bound_value,
                   int number_of_constraints, unsigned visited_value);
 
   /**
@@ -387,8 +400,8 @@ public:
   int can_enable() const { return staged_weight > 0 && get_min_concurrency_slack() >= concurrency_share; }
 
   /* hookup to system */
-  s_xbt_swag_hookup_t variable_set_hookup           = {nullptr, nullptr};
-  s_xbt_swag_hookup_t saturated_variable_set_hookup = {nullptr, nullptr};
+  boost::intrusive::list_member_hook<> variable_set_hook;
+  boost::intrusive::list_member_hook<> saturated_variable_set_hook;
 
   std::vector<s_lmm_element_t> cnsts;
 
@@ -409,9 +422,9 @@ public:
   /* \begin{For Lagrange only} */
   double mu;
   double new_mu;
-  double (*func_f)(s_lmm_variable_t* var, double x);   /* (f)    */
-  double (*func_fp)(s_lmm_variable_t* var, double x);  /* (f')    */
-  double (*func_fpi)(s_lmm_variable_t* var, double x); /* (f')^{-1}    */
+  double (*func_f)(const s_lmm_variable_t& var, double x);   /* (f)    */
+  double (*func_fp)(const s_lmm_variable_t& var, double x);  /* (f')    */
+  double (*func_fpi)(const s_lmm_variable_t& var, double x); /* (f')^{-1}    */
   /* \end{For Lagrange only} */
 
 private:
@@ -420,17 +433,21 @@ private:
 
 inline void s_lmm_element_t::make_active()
 {
-  xbt_swag_insert_at_head(this, &constraint->active_element_set);
+  constraint->active_element_set.push_front(*this);
 }
 inline void s_lmm_element_t::make_inactive()
 {
-  xbt_swag_remove(this, &constraint->active_element_set);
+  if (active_element_set_hook.is_linked()) {
+    auto& set = constraint->active_element_set;
+    set.erase(set.iterator_to(*this));
+  }
 }
 
 /**
  * @brief LMM system
  */
-XBT_PUBLIC_CLASS s_lmm_system_t {
+XBT_PUBLIC_CLASS s_lmm_system_t
+{
 public:
   /**
    * @brief Create a new Linear MaxMim system
@@ -454,7 +471,7 @@ public:
    * @param bound The maximum value of the variable (-1.0 if no maximum value)
    * @param number_of_constraints The maximum number of constraint to associate to the variable
    */
-  lmm_variable_t variable_new(simgrid::surf::Action* id, double weight_value, double bound, int number_of_constraints);
+  lmm_variable_t variable_new(simgrid::surf::Action * id, double weight_value, double bound, int number_of_constraints);
 
   /**
    * @brief Free a variable
@@ -504,10 +521,10 @@ public:
    * @param cnst A constraint
    * @return [description]
    */
-  int constraint_used(lmm_constraint_t cnst) { return xbt_swag_belongs(cnst, &active_constraint_set); }
+  int constraint_used(lmm_constraint_t cnst) { return cnst->active_constraint_set_hook.is_linked(); }
 
   /** @brief Print the lmm system */
-  void print();
+  void print() const;
 
   /** @brief Solve the lmm system */
   void solve();
@@ -518,19 +535,41 @@ private:
 
   void var_free(lmm_variable_t var);
   void cnst_free(lmm_constraint_t cnst);
-  lmm_variable_t extract_variable() { return static_cast<lmm_variable_t>(xbt_swag_extract(&variable_set)); }
-  lmm_constraint_t extract_constraint() { return static_cast<lmm_constraint_t>(xbt_swag_extract(&constraint_set)); }
-  void insert_constraint(lmm_constraint_t cnst) { xbt_swag_insert(cnst, &constraint_set); }
+  lmm_variable_t extract_variable()
+  {
+    if (variable_set.empty())
+      return nullptr;
+    lmm_variable_t res = &variable_set.front();
+    variable_set.pop_front();
+    return res;
+  }
+  lmm_constraint_t extract_constraint()
+  {
+    if (constraint_set.empty())
+      return nullptr;
+    lmm_constraint_t res = &constraint_set.front();
+    constraint_set.pop_front();
+    return res;
+  }
+  void insert_constraint(lmm_constraint_t cnst) { constraint_set.push_back(*cnst); }
   void remove_variable(lmm_variable_t var)
   {
-    xbt_swag_remove(var, &variable_set);
-    xbt_swag_remove(var, &saturated_variable_set);
+    if (var->variable_set_hook.is_linked())
+      variable_set.erase(variable_set.iterator_to(*var));
+    if (var->saturated_variable_set_hook.is_linked())
+      saturated_variable_set.erase(saturated_variable_set.iterator_to(*var));
+  }
+  void make_constraint_active(lmm_constraint_t cnst)
+  {
+    if (not cnst->active_constraint_set_hook.is_linked())
+      active_constraint_set.push_back(*cnst);
   }
-  void make_constraint_active(lmm_constraint_t cnst) { xbt_swag_insert(cnst, &active_constraint_set); }
   void make_constraint_inactive(lmm_constraint_t cnst)
   {
-    xbt_swag_remove(cnst, &active_constraint_set);
-    xbt_swag_remove(cnst, &modified_constraint_set);
+    if (cnst->active_constraint_set_hook.is_linked())
+      active_constraint_set.erase(active_constraint_set.iterator_to(*cnst));
+    if (cnst->modified_constraint_set_hook.is_linked())
+      modified_constraint_set.erase(modified_constraint_set.iterator_to(*cnst));
   }
 
   void enable_var(lmm_variable_t var);
@@ -550,14 +589,27 @@ private:
 
   /** @brief Remove all constraints of the modified_constraint_set. */
   void remove_all_modified_set();
-  void check_concurrency();
+  void check_concurrency() const;
 
+  template <class CnstList> void solve(CnstList& cnst_list);
 public:
   bool modified;
-  s_xbt_swag_t variable_set;             /* a list of lmm_variable_t */
-  s_xbt_swag_t active_constraint_set;    /* a list of lmm_constraint_t */
-  s_xbt_swag_t saturated_variable_set;   /* a list of lmm_variable_t */
-  s_xbt_swag_t saturated_constraint_set; /* a list of lmm_constraint_t */
+  boost::intrusive::list<s_lmm_variable_t,
+                         boost::intrusive::member_hook<s_lmm_variable_t, boost::intrusive::list_member_hook<>,
+                                                       &s_lmm_variable_t::variable_set_hook>>
+      variable_set;
+  boost::intrusive::list<s_lmm_constraint_t,
+                         boost::intrusive::member_hook<s_lmm_constraint_t, boost::intrusive::list_member_hook<>,
+                                                       &s_lmm_constraint_t::active_constraint_set_hook>>
+      active_constraint_set;
+  boost::intrusive::list<s_lmm_variable_t,
+                         boost::intrusive::member_hook<s_lmm_variable_t, boost::intrusive::list_member_hook<>,
+                                                       &s_lmm_variable_t::saturated_variable_set_hook>>
+      saturated_variable_set;
+  boost::intrusive::list<s_lmm_constraint_t,
+                         boost::intrusive::member_hook<s_lmm_constraint_t, boost::intrusive::list_member_hook<>,
+                                                       &s_lmm_constraint_t::saturated_constraint_set_hook>>
+      saturated_constraint_set;
 
   simgrid::surf::ActionLmmListPtr keep_track;
 
@@ -567,17 +619,24 @@ private:
   bool selective_update_active; /* flag to update partially the system only selecting changed portions */
   unsigned visited_counter;     /* used by lmm_update_modified_set and lmm_remove_modified_set to cleverly (un-)flag the
                                  * constraints (more details in these functions) */
-  s_xbt_swag_t constraint_set;  /* a list of lmm_constraint_t */
-  s_xbt_swag_t modified_constraint_set; /* a list of modified lmm_constraint_t */
+  boost::intrusive::list<s_lmm_constraint_t,
+                         boost::intrusive::member_hook<s_lmm_constraint_t, boost::intrusive::list_member_hook<>,
+                                                       &s_lmm_constraint_t::constraint_set_hook>>
+      constraint_set;
+  boost::intrusive::list<s_lmm_constraint_t,
+                         boost::intrusive::member_hook<s_lmm_constraint_t, boost::intrusive::list_member_hook<>,
+                                                       &s_lmm_constraint_t::modified_constraint_set_hook>>
+      modified_constraint_set;
   xbt_mallocator_t variable_mallocator;
 };
 
-extern XBT_PRIVATE double (*func_f_def)(lmm_variable_t, double);
-extern XBT_PRIVATE double (*func_fp_def)(lmm_variable_t, double);
-extern XBT_PRIVATE double (*func_fpi_def)(lmm_variable_t, double);
+extern XBT_PRIVATE double (*func_f_def)(const s_lmm_variable_t&, double);
+extern XBT_PRIVATE double (*func_fp_def)(const s_lmm_variable_t&, double);
+extern XBT_PRIVATE double (*func_fpi_def)(const s_lmm_variable_t&, double);
 
 /** @} */
 }
 }
+}
 
 #endif
index 5651178..aad5620 100644 (file)
@@ -49,11 +49,6 @@ void MSG_init_nocheck(int *argc, char **argv) {
 
     SIMIX_function_register_process_create(MSG_process_create_from_SIMIX);
     SIMIX_function_register_process_cleanup(MSG_process_cleanup_from_SIMIX);
-
-    simgrid::MsgHostExt::EXTENSION_ID = simgrid::s4u::Host::extension_create<simgrid::MsgHostExt>();
-    simgrid::s4u::Host::onCreation.connect([](simgrid::s4u::Host& host) {
-      host.extension_set<simgrid::MsgHostExt>(new simgrid::MsgHostExt());
-    });
   }
 
   if(MC_is_active()){
index 7605967..5db2de1 100644 (file)
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(msg);
 
-simgrid::xbt::Extension<simgrid::s4u::Host, simgrid::MsgHostExt> simgrid::MsgHostExt::EXTENSION_ID;
-
 extern "C" {
 
-int sg_storage_max_file_descriptors = 1024;
-
 /** @addtogroup m_host_management
  * (#msg_host_t) and the functions for managing it.
  *
@@ -252,18 +248,4 @@ xbt_dynar_t MSG_host_get_attached_storage_list(msg_host_t host)
   return sg_host_get_attached_storage_list(host);
 }
 
-/** \ingroup m_host_management
- * \brief Return the content of mounted storages on an host.
- * \param host a host
- * \return a dict containing content (as a dict) of all storages mounted on the host
- */
-xbt_dict_t MSG_host_get_storage_content(msg_host_t host)
-{
-  xbt_assert((host != nullptr), "Invalid parameters");
-  xbt_dict_t contents = xbt_dict_new_homogeneous(nullptr);
-  for (auto const& elm : host->getMountedStorages())
-    xbt_dict_set(contents, elm.first.c_str(), MSG_storage_get_content(elm.second), nullptr);
-
-  return contents;
-}
 }
index 1024125..aff1939 100644 (file)
 /* 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/s4u/File.hpp"
 #include "simgrid/s4u/Host.hpp"
 #include "simgrid/s4u/Storage.hpp"
 #include "src/msg/msg_private.hpp"
+#include "src/plugins/file_system/FileSystem.hpp"
 #include <numeric>
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_io, msg, "Logging specific to MSG (io)");
 
 extern "C" {
 
-/** @addtogroup msg_file
- * (#msg_file_t) and the functions for managing it.
- *
- *  \see #msg_file_t
- */
-
-static int MSG_host_get_file_descriptor_id(msg_host_t host)
-{
-  simgrid::MsgHostExt* priv = host->extension<simgrid::MsgHostExt>();
-  if (priv->file_descriptor_table == nullptr) {
-    priv->file_descriptor_table = new std::vector<int>(sg_storage_max_file_descriptors);
-    std::iota(priv->file_descriptor_table->rbegin(), priv->file_descriptor_table->rend(), 0); // Fill with ..., 1, 0.
-  }
-  xbt_assert(not priv->file_descriptor_table->empty(), "Too much files are opened! Some have to be closed.");
-  int desc = priv->file_descriptor_table->back();
-  priv->file_descriptor_table->pop_back();
-  return desc;
-}
-
-static void MSG_host_release_file_descriptor_id(msg_host_t host, int id)
-{
-  host->extension<simgrid::MsgHostExt>()->file_descriptor_table->push_back(id);
-}
-
-/** \ingroup msg_file
- *
- * \brief Set the user data of a #msg_file_t.
- *
- * This functions attach \a data to \a file.
- */
-msg_error_t MSG_file_set_data(msg_file_t fd, void *data)
-{
-  fd->setUserdata(data);
-  return MSG_OK;
-}
-
-/** \ingroup msg_file
- *
- * \brief Return the user data of a #msg_file_t.
- *
- * This functions checks whether \a file is a valid pointer and return the user data associated to \a file if possible.
- */
-void* MSG_file_get_data(msg_file_t fd)
-{
-  return fd->getUserdata();
-}
-
-/** \ingroup msg_file
- * \brief Display information related to a file descriptor
- *
- * \param fd is a the file descriptor
- */
-void MSG_file_dump (msg_file_t fd){
-  XBT_INFO("File Descriptor information:\n"
-           "\t\tFull path: '%s'\n"
-           "\t\tSize: %llu\n"
-           "\t\tMount point: '%s'\n"
-           "\t\tStorage Id: '%s'\n"
-           "\t\tStorage Type: '%s'\n"
-           "\t\tFile Descriptor Id: %d",
-           fd->getPath(), fd->size(), fd->mount_point_.c_str(), fd->localStorage->getCname(),
-           fd->localStorage->getType(), fd->desc_id);
-}
-
-/** \ingroup msg_file
- * \brief Read a file (local or remote)
- *
- * \param size of the file to read
- * \param fd is a the file descriptor
- * \return the number of bytes successfully read or -1 if an error occurred
- */
-sg_size_t MSG_file_read(msg_file_t fd, sg_size_t size)
-{
-  sg_size_t read_size;
-
-  if (fd->size() == 0) /* Nothing to read, return */
-    return 0;
-
-  /* Find the host where the file is physically located and read it */
-  msg_storage_t storage_src           = fd->localStorage;
-  msg_host_t attached_host            = storage_src->getHost();
-  read_size                           = fd->read(size);
-
-  if (strcmp(attached_host->getCname(), MSG_host_self()->getCname())) {
-    /* the file is hosted on a remote host, initiate a communication between src and dest hosts for data transfer */
-    XBT_DEBUG("File is on %s remote host, initiate data transfer of %llu bytes.", attached_host->getCname(), read_size);
-    msg_host_t m_host_list[] = {MSG_host_self(), attached_host};
-    double flops_amount[]    = {0, 0};
-    double bytes_amount[]    = {0, 0, static_cast<double>(read_size), 0};
-
-    msg_task_t task = MSG_parallel_task_create("file transfer for read", 2, m_host_list, flops_amount, bytes_amount,
-                      nullptr);
-    msg_error_t transfer = MSG_parallel_task_execute(task);
-    MSG_task_destroy(task);
-
-    if(transfer != MSG_OK){
-      if (transfer == MSG_HOST_FAILURE)
-        XBT_WARN("Transfer error, %s remote host just turned off!", attached_host->getCname());
-      if (transfer == MSG_TASK_CANCELED)
-        XBT_WARN("Transfer error, task has been canceled!");
-
-      return -1;
-    }
-  }
-  return read_size;
-}
-
-/** \ingroup msg_file
- * \brief Write into a file (local or remote)
- *
- * \param size of the file to write
- * \param fd is a the file descriptor
- * \return the number of bytes successfully write or -1 if an error occurred
- */
-sg_size_t MSG_file_write(msg_file_t fd, sg_size_t size)
-{
-  if (size == 0) /* Nothing to write, return */
-    return 0;
-
-  /* Find the host where the file is physically located (remote or local)*/
-  msg_storage_t storage_src = fd->localStorage;
-  msg_host_t attached_host  = storage_src->getHost();
-
-  if (strcmp(attached_host->getCname(), MSG_host_self()->getCname())) {
-    /* the file is hosted on a remote host, initiate a communication between src and dest hosts for data transfer */
-    XBT_DEBUG("File is on %s remote host, initiate data transfer of %llu bytes.", attached_host->getCname(), size);
-    msg_host_t m_host_list[] = {MSG_host_self(), attached_host};
-    double flops_amount[]    = {0, 0};
-    double bytes_amount[]    = {0, static_cast<double>(size), 0, 0};
-
-    msg_task_t task = MSG_parallel_task_create("file transfer for write", 2, m_host_list, flops_amount, bytes_amount,
-                                               nullptr);
-    msg_error_t transfer = MSG_parallel_task_execute(task);
-    MSG_task_destroy(task);
-
-    if(transfer != MSG_OK){
-      if (transfer == MSG_HOST_FAILURE)
-        XBT_WARN("Transfer error, %s remote host just turned off!", attached_host->getCname());
-      if (transfer == MSG_TASK_CANCELED)
-        XBT_WARN("Transfer error, task has been canceled!");
-
-      return -1;
-    }
-  }
-  /* Write file on local or remote host */
-  sg_size_t write_size = fd->write(size);
-
-  return write_size;
-}
-
-/** \ingroup msg_file
- * \brief Opens the file whose name is the string pointed to by path
- *
- * \param fullpath is the file location on the storage
- * \param data user data to attach to the file
- *
- * \return An #msg_file_t associated to the file
- */
-msg_file_t MSG_file_open(const char* fullpath, void* data)
-{
-  msg_file_t fd         = new simgrid::s4u::File(fullpath, MSG_host_self());
-  fd->desc_id           = MSG_host_get_file_descriptor_id(MSG_host_self());
-  fd->setUserdata(data);
-  return fd;
-}
-
-/** \ingroup msg_file
- * \brief Close the file
- *
- * \param fd is the file to close
- * \return 0 on success or 1 on error
- */
-int MSG_file_close(msg_file_t fd)
-{
-  MSG_host_release_file_descriptor_id(MSG_host_self(), fd->desc_id);
-  delete fd;
-
-  return MSG_OK;
-}
-
-/** \ingroup msg_file
- * \brief Unlink the file pointed by fd
- *
- * \param fd is the file descriptor (#msg_file_t)
- * \return 0 on success or 1 on error
- */
-msg_error_t MSG_file_unlink(msg_file_t fd)
-{
-  fd->unlink();
-  delete fd;
-  return MSG_OK;
-}
-
-/** \ingroup msg_file
- * \brief Return the size of a file
- *
- * \param fd is the file descriptor (#msg_file_t)
- * \return the size of the file (as a #sg_size_t)
- */
-sg_size_t MSG_file_get_size(msg_file_t fd)
-{
-  return fd->size();
-}
-
-/**
- * \ingroup msg_file
- * \brief Set the file position indicator in the msg_file_t by adding offset bytes
- * to the position specified by origin (either SEEK_SET, SEEK_CUR, or SEEK_END).
- *
- * \param fd : file object that identifies the stream
- * \param offset : number of bytes to offset from origin
- * \param origin : Position used as reference for the offset. It is specified by one of the following constants defined
- *                 in \<stdio.h\> exclusively to be used as arguments for this function (SEEK_SET = beginning of file,
- *                 SEEK_CUR = current position of the file pointer, SEEK_END = end of file)
- * \return If successful, the function returns MSG_OK (=0). Otherwise, it returns MSG_TASK_CANCELED (=8).
- */
-msg_error_t MSG_file_seek(msg_file_t fd, sg_offset_t offset, int origin)
-{
-  fd->seek(offset, origin);
-  return MSG_OK;
-}
-
-/**
- * \ingroup msg_file
- * \brief Returns the current value of the position indicator of the file
- *
- * \param fd : file object that identifies the stream
- * \return On success, the current value of the position indicator is returned.
- *
- */
-sg_size_t MSG_file_tell(msg_file_t fd)
-{
-  return fd->tell();
-}
-
-const char *MSG_file_get_name(msg_file_t fd) {
-  xbt_assert((fd != nullptr), "Invalid parameters");
-  return fd->getPath();
-}
-
-/**
- * \ingroup msg_file
- * \brief Move a file to another location on the *same mount point*.
- *
- */
-msg_error_t MSG_file_move (msg_file_t fd, const char* fullpath)
-{
-  fd->move(fullpath);
-  return MSG_OK;
-}
-
-/**
- * \ingroup msg_file
- * \brief Copy a file to another location on a remote host.
- * \param file : the file to move
- * \param host : the remote host where the file has to be copied
- * \param fullpath : the complete path destination on the remote host
- * \return If successful, the function returns MSG_OK. Otherwise, it returns MSG_TASK_CANCELED.
- */
-msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpath)
-{
-  /* Find the host where the file is physically located and read it */
-  msg_storage_t storage_src = file->localStorage;
-  msg_host_t src_host       = storage_src->getHost();
-  MSG_file_seek(file, 0, SEEK_SET);
-  sg_size_t read_size = file->read(file->size());
-
-  /* Find the host that owns the storage where the file has to be copied */
-  msg_storage_t storage_dest = nullptr;
-  msg_host_t dst_host;
-  size_t longest_prefix_length = 0;
-
-  for (auto const& elm : host->getMountedStorages()) {
-    std::string mount_point = std::string(fullpath).substr(0, elm.first.size());
-    if (mount_point == elm.first && elm.first.length() > longest_prefix_length) {
-      /* The current mount name is found in the full path and is bigger than the previous*/
-      longest_prefix_length = elm.first.length();
-      storage_dest          = elm.second;
-    }
-  }
-
-  if (storage_dest != nullptr) {
-    /* Mount point found, retrieve the host the storage is attached to */
-    dst_host = storage_dest->getHost();
-  }else{
-    XBT_WARN("Can't find mount point for '%s' on destination host '%s'", fullpath, host->getCname());
-    return MSG_TASK_CANCELED;
-  }
-
-  XBT_DEBUG("Initiate data transfer of %llu bytes between %s and %s.", read_size, src_host->getCname(),
-            storage_dest->getHost()->getCname());
-  msg_host_t m_host_list[] = {src_host, dst_host};
-  double flops_amount[]    = {0, 0};
-  double bytes_amount[]    = {0, static_cast<double>(read_size), 0, 0};
-
-  msg_task_t task =
-      MSG_parallel_task_create("file transfer for write", 2, m_host_list, flops_amount, bytes_amount, nullptr);
-  msg_error_t err = MSG_parallel_task_execute(task);
-  MSG_task_destroy(task);
-
-  if (err != MSG_OK) {
-    if (err == MSG_HOST_FAILURE)
-      XBT_WARN("Transfer error, %s remote host just turned off!", storage_dest->getHost()->getCname());
-    if (err == MSG_TASK_CANCELED)
-      XBT_WARN("Transfer error, task has been canceled!");
-
-    return err;
-  }
-
-  /* Create file on remote host, write it and close it */
-  msg_file_t fd = new simgrid::s4u::File(fullpath, dst_host, nullptr);
-  fd->write(read_size);
-  delete fd;
-  return MSG_OK;
-}
-
-/**
- * \ingroup msg_file
- * \brief Move a file to another location on a remote host.
- * \param file : the file to move
- * \param host : the remote host where the file has to be moved
- * \param fullpath : the complete path destination on the remote host
- * \return If successful, the function returns MSG_OK. Otherwise, it returns MSG_TASK_CANCELED.
- */
-msg_error_t MSG_file_rmove (msg_file_t file, msg_host_t host, const char* fullpath)
-{
-  msg_error_t res = MSG_file_rcopy(file, host, fullpath);
-  MSG_file_unlink(file);
-  return res;
-}
-
 /********************************* Storage **************************************/
 /** @addtogroup msg_storage_management
  * (#msg_storage_t) and the functions for managing it.
@@ -361,24 +30,10 @@ const char* MSG_storage_get_name(msg_storage_t storage)
   return storage->getCname();
 }
 
-/** \ingroup msg_storage_management
- * \brief Returns the free space size of a storage element
- * \param storage a storage
- * \return the free space size of the storage element (as a #sg_size_t)
- */
-sg_size_t MSG_storage_get_free_size(msg_storage_t storage)
-{
-  return storage->getSizeFree();
-}
-
-/** \ingroup msg_storage_management
- * \brief Returns the used space size of a storage element
- * \param storage a storage
- * \return the used space size of the storage element (as a #sg_size_t)
- */
-sg_size_t MSG_storage_get_used_size(msg_storage_t storage)
+const char* MSG_storage_get_host(msg_storage_t storage)
 {
-  return storage->getSizeUsed();
+  xbt_assert((storage != nullptr), "Invalid parameters");
+  return storage->getHost()->getCname();
 }
 
 /** \ingroup msg_storage_management
@@ -446,69 +101,26 @@ xbt_dynar_t MSG_storages_as_dynar()
   return res;
 }
 
-/** \ingroup msg_storage_management
- *
- * \brief Set the user data of a #msg_storage_t.
- * This functions attach \a data to \a storage if possible.
- */
-msg_error_t MSG_storage_set_data(msg_storage_t storage, void *data)
-{
-  storage->setUserdata(data);
-  return MSG_OK;
-}
-
-/** \ingroup m_host_management
- *
- * \brief Returns the user data of a #msg_storage_t.
- *
- * This functions checks whether \a storage is a valid pointer and returns its associate user data if possible.
- */
-void *MSG_storage_get_data(msg_storage_t storage)
+void* MSG_storage_get_data(msg_storage_t storage)
 {
   xbt_assert((storage != nullptr), "Invalid parameters");
   return storage->getUserdata();
 }
 
-/** \ingroup msg_storage_management
- *
- * \brief Returns the content (file list) of a #msg_storage_t.
- * \param storage a storage
- * \return The content of this storage element as a dict (full path file => size)
- */
-xbt_dict_t MSG_storage_get_content(msg_storage_t storage)
+msg_error_t MSG_storage_set_data(msg_storage_t storage, void *data)
 {
-  std::map<std::string, sg_size_t>* content = storage->getContent();
-  // Note: ::operator delete is ok here (no destructor called) since the dict elements are of POD type sg_size_t.
-  xbt_dict_t content_as_dict = xbt_dict_new_homogeneous(::operator delete);
-
-  for (auto const& entry : *content) {
-    sg_size_t* psize = new sg_size_t;
-    *psize           = entry.second;
-    xbt_dict_set(content_as_dict, entry.first.c_str(), psize, nullptr);
-  }
-  return content_as_dict;
+  storage->setUserdata(data);
+  return MSG_OK;
 }
 
-/** \ingroup msg_storage_management
- *
- * \brief Returns the size of a #msg_storage_t.
- * \param storage a storage
- * \return The size of the storage
- */
-sg_size_t MSG_storage_get_size(msg_storage_t storage)
+sg_size_t MSG_storage_read(msg_storage_t storage, sg_size_t size)
 {
-  return storage->getSize();
+  return storage->read(size);
 }
 
-/** \ingroup msg_storage_management
- *
- * \brief Returns the host name the storage is attached to
- *
- * This functions checks whether a storage is a valid pointer or not and return its name.
- */
-const char* MSG_storage_get_host(msg_storage_t storage)
+sg_size_t MSG_storage_write(msg_storage_t storage, sg_size_t size)
 {
-  xbt_assert((storage != nullptr), "Invalid parameters");
-  return storage->getHost()->getCname();
+  return storage->write(size);
 }
+
 }
index 62b4285..6f2539f 100644 (file)
 #include <atomic>
 
 /**************** datatypes **********************************/
-/**************************** Host Extension *********************************/
-namespace simgrid {
-class MsgHostExt {
-public:
-  static simgrid::xbt::Extension<s4u::Host, MsgHostExt> EXTENSION_ID;
-
-  ~MsgHostExt() { delete file_descriptor_table; }
-  std::vector<int>* file_descriptor_table = nullptr; // Created lazily on need
-};
-}
 /********************************* Task **************************************/
 
 struct s_simdata_task_t {
similarity index 69%
rename from include/simgrid/s4u/File.hpp
rename to src/plugins/file_system/FileSystem.hpp
index e821cc1..6535c3d 100644 (file)
@@ -29,7 +29,7 @@ XBT_PUBLIC_CLASS File
 public:
   File(std::string fullpath, void* userdata);
   File(std::string fullpath, sg_host_t host, void* userdata);
-  ~File() = default;
+  ~File();
 
   /** Retrieves the path to the file */
   const char* getPath() { return fullpath_.c_str(); }
@@ -45,21 +45,18 @@ public:
   /** Retrieves the previously stored data */
   void* getUserdata() { return userdata_; }
 
-  /** Retrieve the datasize */
   sg_size_t size();
-
-  /** Sets the file head to the given position. */
-  void seek(sg_offset_t pos);
-  void seek(sg_offset_t pos, int origin);
-
-  /** Retrieves the current file position */
-  sg_size_t tell();
+  void seek(sg_offset_t pos);             /** Sets the file head to the given position. */
+  void seek(sg_offset_t pos, int origin); /** Sets the file head to the given position from a given origin. */
+  sg_size_t tell();                       /** Retrieves the current file position */
 
   /** Rename a file. WARNING: It is forbidden to move the file to another mount point */
   void move(std::string fullpath);
+  int remoteCopy(sg_host_t host, const char* fullpath);
+  int remoteMove(sg_host_t host, const char* fullpath);
 
-  /** Remove a file from disk */
-  int unlink();
+  int unlink(); /** Remove a file from the contents of a disk */
+  void dump();
 
   int desc_id = 0;
   Storage* localStorage;
@@ -73,19 +70,30 @@ private:
   void* userdata_             = nullptr;
 };
 
-class FileSystemStorageExt {
+XBT_PUBLIC_CLASS FileSystemStorageExt {
 public:
-  static simgrid::xbt::Extension<simgrid::s4u::Storage, FileSystemStorageExt> EXTENSION_ID;
-  explicit FileSystemStorageExt(simgrid::s4u::Storage* ptr);
+  static simgrid::xbt::Extension<Storage, FileSystemStorageExt> EXTENSION_ID;
+  explicit FileSystemStorageExt(Storage* ptr);
   ~FileSystemStorageExt();
   std::map<std::string, sg_size_t>* parseContent(std::string filename);
   std::map<std::string, sg_size_t>* getContent() { return content_; }
+  sg_size_t getSize() { return size_; }
   sg_size_t getUsedSize() { return usedSize_; }
   void decrUsedSize(sg_size_t size) { usedSize_ -= size; }
   void incrUsedSize(sg_size_t size) { usedSize_ += size; }
 private:
   std::map<std::string, sg_size_t>* content_;
   sg_size_t usedSize_ = 0;
+  sg_size_t size_     = 0;
+};
+
+XBT_PUBLIC_CLASS FileDescriptorHostExt
+{
+public:
+  static simgrid::xbt::Extension<Host, FileDescriptorHostExt> EXTENSION_ID;
+  FileDescriptorHostExt() = default;
+  ~FileDescriptorHostExt() { delete file_descriptor_table; }
+  std::vector<int>* file_descriptor_table = nullptr; // Created lazily on need
 };
 }
 } // namespace simgrid::s4u
diff --git a/src/plugins/file_system/s4u_FileSystem.cpp b/src/plugins/file_system/s4u_FileSystem.cpp
new file mode 100644 (file)
index 0000000..bcb6879
--- /dev/null
@@ -0,0 +1,509 @@
+/* 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. */
+
+#include "xbt/log.h"
+
+#include "simgrid/s4u/Actor.hpp"
+#include "simgrid/s4u/Host.hpp"
+#include "simgrid/s4u/Storage.hpp"
+#include "simgrid/simix.hpp"
+#include "src/plugins/file_system/FileSystem.hpp"
+#include "src/surf/HostImpl.hpp"
+
+#include <algorithm>
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/join.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <fstream>
+#include <numeric>
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_file, "S4U files");
+int sg_storage_max_file_descriptors = 1024;
+
+namespace simgrid {
+namespace s4u {
+simgrid::xbt::Extension<Storage, FileSystemStorageExt> FileSystemStorageExt::EXTENSION_ID;
+simgrid::xbt::Extension<Host, FileDescriptorHostExt> FileDescriptorHostExt::EXTENSION_ID;
+
+File::File(std::string fullpath, void* userdata) : File(fullpath, Host::current(), userdata){};
+
+File::File(std::string fullpath, sg_host_t host, void* userdata) : fullpath_(fullpath), userdata_(userdata)
+{
+  // this cannot fail because we get a xbt_die if the mountpoint does not exist
+  Storage* st                  = nullptr;
+  size_t longest_prefix_length = 0;
+  XBT_DEBUG("Search for storage name for '%s' on '%s'", fullpath.c_str(), host->getCname());
+
+  for (auto const& mnt : host->getMountedStorages()) {
+    XBT_DEBUG("See '%s'", mnt.first.c_str());
+    mount_point_ = fullpath.substr(0, mnt.first.length());
+
+    if (mount_point_ == mnt.first && mnt.first.length() > longest_prefix_length) {
+      /* The current mount name is found in the full path and is bigger than the previous*/
+      longest_prefix_length = mnt.first.length();
+      st                    = mnt.second;
+    }
+  }
+  if (longest_prefix_length > 0) { /* Mount point found, split fullpath into mount_name and path+filename*/
+    mount_point_ = fullpath.substr(0, longest_prefix_length);
+    path_        = fullpath.substr(longest_prefix_length, fullpath.length());
+  } else
+    xbt_die("Can't find mount point for '%s' on '%s'", fullpath.c_str(), host->getCname());
+
+  localStorage = st;
+
+  // assign a file descriptor id to the newly opened File
+  FileDescriptorHostExt* ext = host->extension<simgrid::s4u::FileDescriptorHostExt>();
+  if (ext->file_descriptor_table == nullptr) {
+    ext->file_descriptor_table = new std::vector<int>(sg_storage_max_file_descriptors);
+    std::iota(ext->file_descriptor_table->rbegin(), ext->file_descriptor_table->rend(), 0); // Fill with ..., 1, 0.
+  }
+  xbt_assert(not ext->file_descriptor_table->empty(), "Too much files are opened! Some have to be closed.");
+  desc_id = ext->file_descriptor_table->back();
+  ext->file_descriptor_table->pop_back();
+
+  XBT_DEBUG("\tOpen file '%s'", path_.c_str());
+  std::map<std::string, sg_size_t>* content = localStorage->extension<FileSystemStorageExt>()->getContent();
+  // if file does not exist create an empty file
+  auto sz = content->find(path_);
+  if (sz != content->end()) {
+    size_ = sz->second;
+  } else {
+    size_ = 0;
+    content->insert({path_, size_});
+    XBT_DEBUG("File '%s' was not found, file created.", path_.c_str());
+  }
+}
+
+File::~File()
+{
+  Host::current()->extension<simgrid::s4u::FileDescriptorHostExt>()->file_descriptor_table->push_back(desc_id);
+}
+
+void File::dump()
+{
+  XBT_INFO("File Descriptor information:\n"
+           "\t\tFull path: '%s'\n"
+           "\t\tSize: %llu\n"
+           "\t\tMount point: '%s'\n"
+           "\t\tStorage Id: '%s'\n"
+           "\t\tStorage Type: '%s'\n"
+           "\t\tFile Descriptor Id: %d",
+           getPath(), size_, mount_point_.c_str(), localStorage->getCname(), localStorage->getType(), desc_id);
+}
+
+sg_size_t File::read(sg_size_t size)
+{
+  if (size_ == 0) /* Nothing to read, return */
+    return 0;
+
+  /* Find the host where the file is physically located and read it */
+  Host* host = localStorage->getHost();
+  XBT_DEBUG("READ %s on disk '%s'", getPath(), localStorage->getCname());
+  // if the current position is close to the end of the file, we may not be able to read the requested size
+  sg_size_t read_size = localStorage->read(std::min(size, size_ - current_position_));
+  current_position_ += read_size;
+
+  if (strcmp(host->getCname(), Host::current()->getCname())) {
+    /* the file is hosted on a remote host, initiate a communication between src and dest hosts for data transfer */
+    XBT_DEBUG("File is on %s remote host, initiate data transfer of %llu bytes.", host->getCname(), read_size);
+    Host* m_host_list[]  = {Host::current(), host};
+    double* flops_amount = new double[2]{0, 0};
+    double* bytes_amount = new double[4]{0, 0, static_cast<double>(read_size), 0};
+
+    this_actor::parallel_execute(2, m_host_list, flops_amount, bytes_amount);
+  }
+
+  return read_size;
+}
+
+/** \brief Write into a file (local or remote)
+ *
+ * \param size of the file to write
+ * \param fd is a the file descriptor
+ * \return the number of bytes successfully write or -1 if an error occurred
+ */
+sg_size_t File::write(sg_size_t size)
+{
+  if (size == 0) /* Nothing to write, return */
+    return 0;
+
+  /* Find the host where the file is physically located (remote or local)*/
+  Host* host = localStorage->getHost();
+
+  if (strcmp(host->getCname(), Host::current()->getCname())) {
+    /* the file is hosted on a remote host, initiate a communication between src and dest hosts for data transfer */
+    XBT_DEBUG("File is on %s remote host, initiate data transfer of %llu bytes.", host->getCname(), size);
+    Host* m_host_list[]  = {Host::current(), host};
+    double* flops_amount = new double[2]{0, 0};
+    double* bytes_amount = new double[4]{0, static_cast<double>(size), 0, 0};
+
+    this_actor::parallel_execute(2, m_host_list, flops_amount, bytes_amount);
+  }
+
+  XBT_DEBUG("WRITE %s on disk '%s'. size '%llu/%llu'", getPath(), localStorage->getCname(), size, size_);
+  // If the storage is full before even starting to write
+  if (sg_storage_get_size_used(localStorage) >= sg_storage_get_size(localStorage))
+    return 0;
+  /* Substract the part of the file that might disappear from the used sized on the storage element */
+  localStorage->extension<FileSystemStorageExt>()->decrUsedSize(size_ - current_position_);
+
+  sg_size_t write_size = localStorage->write(size);
+  localStorage->extension<FileSystemStorageExt>()->incrUsedSize(write_size);
+
+  current_position_ += write_size;
+  size_ = current_position_;
+  std::map<std::string, sg_size_t>* content = localStorage->extension<FileSystemStorageExt>()->getContent();
+
+  content->erase(path_);
+  content->insert({path_, size_});
+
+  return write_size;
+}
+
+sg_size_t File::size()
+{
+  return size_;
+}
+
+void File::seek(sg_offset_t offset)
+{
+  current_position_ = offset;
+}
+
+void File::seek(sg_offset_t offset, int origin)
+{
+  switch (origin) {
+    case SEEK_SET:
+      current_position_ = offset;
+      break;
+    case SEEK_CUR:
+      current_position_ += offset;
+      break;
+    case SEEK_END:
+      current_position_ = size_ + offset;
+      break;
+    default:
+      break;
+  }
+}
+
+sg_size_t File::tell()
+{
+  return current_position_;
+}
+
+void File::move(std::string fullpath)
+{
+  /* Check if the new full path is on the same mount point */
+  if (not strncmp(mount_point_.c_str(), fullpath.c_str(), mount_point_.length())) {
+    std::map<std::string, sg_size_t>* content = localStorage->extension<FileSystemStorageExt>()->getContent();
+    auto sz = content->find(path_);
+    if (sz != content->end()) { // src file exists
+      sg_size_t new_size = sz->second;
+      content->erase(path_);
+      std::string path = fullpath.substr(mount_point_.length(), fullpath.length());
+      content->insert({path.c_str(), new_size});
+      XBT_DEBUG("Move file from %s to %s, size '%llu'", path_.c_str(), fullpath.c_str(), new_size);
+    } else {
+      XBT_WARN("File %s doesn't exist", path_.c_str());
+    }
+  } else {
+    XBT_WARN("New full path %s is not on the same mount point: %s.", fullpath.c_str(), mount_point_.c_str());
+  }
+}
+
+int File::unlink()
+{
+  /* Check if the file is on local storage */
+  std::map<std::string, sg_size_t>* content = localStorage->extension<FileSystemStorageExt>()->getContent();
+
+  if (content->find(path_) == content->end()) {
+    XBT_WARN("File %s is not on disk %s. Impossible to unlink", path_.c_str(), localStorage->getCname());
+    return -1;
+  } else {
+    XBT_DEBUG("UNLINK %s on disk '%s'", path_.c_str(), localStorage->getCname());
+    localStorage->extension<FileSystemStorageExt>()->decrUsedSize(size_);
+
+    // Remove the file from storage
+    content->erase(fullpath_);
+
+    return 0;
+  }
+}
+
+int File::remoteCopy(sg_host_t host, const char* fullpath)
+{
+  /* Find the host where the file is physically located and read it */
+  Storage* storage_src = localStorage;
+  Host* src_host       = storage_src->getHost();
+  seek(0, SEEK_SET);
+  XBT_DEBUG("READ %s on disk '%s'", getPath(), localStorage->getCname());
+  // if the current position is close to the end of the file, we may not be able to read the requested size
+  sg_size_t read_size = localStorage->read(size_);
+  current_position_ += read_size;
+
+  /* Find the host that owns the storage where the file has to be copied */
+  Storage* storage_dest = nullptr;
+  Host* dst_host;
+  size_t longest_prefix_length = 0;
+
+  for (auto const& elm : host->getMountedStorages()) {
+    std::string mount_point = std::string(fullpath).substr(0, elm.first.size());
+    if (mount_point == elm.first && elm.first.length() > longest_prefix_length) {
+      /* The current mount name is found in the full path and is bigger than the previous*/
+      longest_prefix_length = elm.first.length();
+      storage_dest          = elm.second;
+    }
+  }
+
+  if (storage_dest != nullptr) {
+    /* Mount point found, retrieve the host the storage is attached to */
+    dst_host = storage_dest->getHost();
+  } else {
+    XBT_WARN("Can't find mount point for '%s' on destination host '%s'", fullpath, host->getCname());
+    return -1;
+  }
+
+  XBT_DEBUG("Initiate data transfer of %llu bytes between %s and %s.", read_size, src_host->getCname(),
+            storage_dest->getHost()->getCname());
+  Host* m_host_list[]     = {src_host, dst_host};
+  double* flops_amount    = new double[2]{0, 0};
+  double* bytes_amount    = new double[4]{0, static_cast<double>(read_size), 0, 0};
+
+  this_actor::parallel_execute(2, m_host_list, flops_amount, bytes_amount);
+
+  /* Create file on remote host, write it and close it */
+  File* fd = new File(fullpath, dst_host, nullptr);
+  sg_size_t write_size = fd->localStorage->write(read_size);
+  fd->localStorage->extension<FileSystemStorageExt>()->incrUsedSize(write_size);
+  (*(fd->localStorage->extension<FileSystemStorageExt>()->getContent()))[path_] = size_;
+  delete fd;
+  return 0;
+}
+
+int File::remoteMove(sg_host_t host, const char* fullpath)
+{
+  int res = remoteCopy(host, fullpath);
+  unlink();
+  return res;
+}
+
+FileSystemStorageExt::FileSystemStorageExt(simgrid::s4u::Storage* ptr)
+{
+  content_ = parseContent(ptr->getImpl()->content_name);
+  size_    = ptr->getImpl()->size_;
+}
+
+FileSystemStorageExt::~FileSystemStorageExt()
+{
+  delete content_;
+}
+
+std::map<std::string, sg_size_t>* FileSystemStorageExt::parseContent(std::string filename)
+{
+  if (filename.empty())
+    return nullptr;
+
+  std::map<std::string, sg_size_t>* parse_content = new std::map<std::string, sg_size_t>();
+
+  std::ifstream* fs = surf_ifsopen(filename);
+
+  std::string line;
+  std::vector<std::string> tokens;
+  do {
+    std::getline(*fs, line);
+    boost::trim(line);
+    if (line.length() > 0) {
+      boost::split(tokens, line, boost::is_any_of(" \t"), boost::token_compress_on);
+      xbt_assert(tokens.size() == 2, "Parse error in %s: %s", filename.c_str(), line.c_str());
+      sg_size_t size = std::stoull(tokens.at(1));
+
+      usedSize_ += size;
+      parse_content->insert({tokens.front(), size});
+    }
+  } while (not fs->eof());
+  delete fs;
+  return parse_content;
+}
+}
+}
+
+using simgrid::s4u::FileSystemStorageExt;
+using simgrid::s4u::FileDescriptorHostExt;
+
+static void onStorageCreation(simgrid::s4u::Storage& st)
+{
+  st.extension_set(new FileSystemStorageExt(&st));
+}
+
+static void onStorageDestruction(simgrid::s4u::Storage& st)
+{
+  delete st.extension<FileSystemStorageExt>();
+}
+
+static void onHostCreation(simgrid::s4u::Host& host)
+{
+  host.extension_set<FileDescriptorHostExt>(new FileDescriptorHostExt());
+}
+
+/* **************************** Public interface *************************** */
+SG_BEGIN_DECL()
+
+void sg_storage_file_system_init()
+{
+  if (not FileSystemStorageExt::EXTENSION_ID.valid()) {
+    FileSystemStorageExt::EXTENSION_ID = simgrid::s4u::Storage::extension_create<FileSystemStorageExt>();
+    simgrid::s4u::Storage::onCreation.connect(&onStorageCreation);
+    simgrid::s4u::Storage::onDestruction.connect(&onStorageDestruction);
+  }
+
+  if (not FileDescriptorHostExt::EXTENSION_ID.valid()) {
+    FileDescriptorHostExt::EXTENSION_ID = simgrid::s4u::Host::extension_create<FileDescriptorHostExt>();
+    simgrid::s4u::Host::onCreation.connect(&onHostCreation);
+  }
+}
+
+sg_file_t sg_file_open(const char* fullpath, void* data)
+{
+  return new simgrid::s4u::File(fullpath, data);
+}
+
+sg_size_t sg_file_read(sg_file_t fd, sg_size_t size)
+{
+  return fd->read(size);
+}
+
+sg_size_t sg_file_write(sg_file_t fd, sg_size_t size)
+{
+  return fd->write(size);
+}
+
+void sg_file_close(sg_file_t fd)
+{
+  delete fd;
+}
+
+const char* sg_file_get_name(sg_file_t fd)
+{
+  xbt_assert((fd != nullptr), "Invalid file descriptor");
+  return fd->getPath();
+}
+
+sg_size_t sg_file_get_size(sg_file_t fd)
+{
+  return fd->size();
+}
+
+void sg_file_dump(sg_file_t fd)
+{
+  fd->dump();
+}
+
+void* sg_file_get_data(sg_file_t fd)
+{
+  return fd->getUserdata();
+}
+
+void sg_file_set_data(sg_file_t fd, void* data)
+{
+  fd->setUserdata(data);
+}
+
+/**
+ * \brief Set the file position indicator in the msg_file_t by adding offset bytes
+ * to the position specified by origin (either SEEK_SET, SEEK_CUR, or SEEK_END).
+ *
+ * \param fd : file object that identifies the stream
+ * \param offset : number of bytes to offset from origin
+ * \param origin : Position used as reference for the offset. It is specified by one of the following constants defined
+ *                 in \<stdio.h\> exclusively to be used as arguments for this function (SEEK_SET = beginning of file,
+ *                 SEEK_CUR = current position of the file pointer, SEEK_END = end of file)
+ */
+void sg_file_seek(sg_file_t fd, sg_offset_t offset, int origin)
+{
+  fd->seek(offset, origin);
+}
+
+sg_size_t sg_file_tell(sg_file_t fd)
+{
+  return fd->tell();
+}
+
+void sg_file_move(sg_file_t fd, const char* fullpath)
+{
+  fd->move(fullpath);
+}
+
+void sg_file_unlink(sg_file_t fd)
+{
+  fd->unlink();
+  delete fd;
+}
+
+/**
+ * \brief Copy a file to another location on a remote host.
+ * \param file : the file to move
+ * \param host : the remote host where the file has to be copied
+ * \param fullpath : the complete path destination on the remote host
+ * \return If successful, the function returns 0. Otherwise, it returns -1.
+ */
+int sg_file_rcopy(sg_file_t file, sg_host_t host, const char* fullpath)
+{
+  return file->remoteCopy(host, fullpath);
+}
+
+/**
+ * \brief Move a file to another location on a remote host.
+ * \param file : the file to move
+ * \param host : the remote host where the file has to be moved
+ * \param fullpath : the complete path destination on the remote host
+ * \return If successful, the function returns 0. Otherwise, it returns -1.
+ */
+int sg_file_rmove(sg_file_t file, sg_host_t host, const char* fullpath)
+{
+  return file->remoteMove(host, fullpath);
+}
+
+sg_size_t sg_storage_get_size_free(sg_storage_t st)
+{
+  return st->extension<FileSystemStorageExt>()->getSize() - st->extension<FileSystemStorageExt>()->getUsedSize();
+}
+
+sg_size_t sg_storage_get_size_used(sg_storage_t st)
+{
+  return st->extension<FileSystemStorageExt>()->getUsedSize();
+}
+
+sg_size_t sg_storage_get_size(sg_storage_t st)
+{
+  return st->extension<FileSystemStorageExt>()->getSize();
+}
+
+xbt_dict_t sg_storage_get_content(sg_storage_t storage)
+{
+  std::map<std::string, sg_size_t>* content = storage->extension<simgrid::s4u::FileSystemStorageExt>()->getContent();
+  // Note: ::operator delete is ok here (no destructor called) since the dict elements are of POD type sg_size_t.
+  xbt_dict_t content_as_dict = xbt_dict_new_homogeneous(::operator delete);
+
+  for (auto const& entry : *content) {
+    sg_size_t* psize = new sg_size_t;
+    *psize           = entry.second;
+    xbt_dict_set(content_as_dict, entry.first.c_str(), psize, nullptr);
+  }
+  return content_as_dict;
+}
+
+xbt_dict_t sg_host_get_storage_content(sg_host_t host)
+{
+  xbt_assert((host != nullptr), "Invalid parameters");
+  xbt_dict_t contents = xbt_dict_new_homogeneous(nullptr);
+  for (auto const& elm : host->getMountedStorages())
+    xbt_dict_set(contents, elm.first.c_str(), sg_storage_get_content(elm.second), nullptr);
+
+  return contents;
+}
+
+SG_END_DECL()
index 1a1f03a..2cccd60 100644 (file)
@@ -98,7 +98,7 @@ double VMModel::nextOccuringEvent(double now)
     XBT_DEBUG("assign %f to vm %s @ pm %s", solved_value, ws_vm->getCname(), ws_vm->pimpl_vm_->getPm()->getCname());
 
     xbt_assert(cpu->model() == surf_cpu_model_vm);
-    surf::lmm_system_t vcpu_system = cpu->model()->getMaxminSystem();
+    lmm_system_t vcpu_system = cpu->model()->getMaxminSystem();
     vcpu_system->update_constraint_bound(cpu->constraint(), virt_overhead * solved_value);
   }
 
index 86ea2e2..ddb8fac 100644 (file)
@@ -173,6 +173,11 @@ void Actor::killAll(int resetPid)
   simcall_process_killall(resetPid);
 }
 
+std::map<std::string, std::string>* Actor::getProperties()
+{
+  return simgrid::simix::kernelImmediate([this] { return this->pimpl_->getProperties(); });
+}
+
 /** Retrieve the property value (or nullptr if not set) */
 const char* Actor::getProperty(const char* key)
 {
@@ -232,12 +237,25 @@ void execute(double flops)
   simcall_execution_wait(s);
 }
 
-void execute(double flops,double priority)
+void execute(double flops, double priority)
 {
   smx_activity_t s = simcall_execution_start(nullptr,flops,1 / priority/*priority*/,0./*bound*/);
   simcall_execution_wait(s);
 }
 
+void parallel_execute(int host_nb, sg_host_t* host_list, double* flops_amount, double* bytes_amount, double timeout)
+{
+  smx_activity_t s =
+      simcall_execution_parallel_start(nullptr, host_nb, host_list, flops_amount, bytes_amount, -1, timeout);
+  simcall_execution_wait(s);
+}
+
+void parallel_execute(int host_nb, sg_host_t* host_list, double* flops_amount, double* bytes_amount)
+{
+  smx_activity_t s = simcall_execution_parallel_start(nullptr, host_nb, host_list, flops_amount, bytes_amount, -1, -1);
+  simcall_execution_wait(s);
+}
+
 void* recv(MailboxPtr chan) // deprecated
 {
   return chan->get();
diff --git a/src/s4u/s4u_file.cpp b/src/s4u/s4u_file.cpp
deleted file mode 100644 (file)
index a78e0f9..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-/* 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. */
-
-#include "xbt/log.h"
-
-#include "simgrid/s4u/File.hpp"
-#include "simgrid/s4u/Host.hpp"
-#include "simgrid/s4u/Storage.hpp"
-#include "simgrid/simix.hpp"
-#include "src/surf/HostImpl.hpp"
-
-#include <algorithm>
-#include <boost/algorithm/string.hpp>
-#include <boost/algorithm/string/join.hpp>
-#include <boost/algorithm/string/split.hpp>
-#include <fstream>
-
-XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_file,"S4U files");
-
-namespace simgrid {
-namespace s4u {
-simgrid::xbt::Extension<s4u::Storage, FileSystemStorageExt> FileSystemStorageExt::EXTENSION_ID;
-
-File::File(std::string fullpath, void* userdata) : File(fullpath, Host::current(), userdata){};
-
-File::File(std::string fullpath, sg_host_t host, void* userdata) : fullpath_(fullpath), userdata_(userdata)
-{
-  // this cannot fail because we get a xbt_die if the mountpoint does not exist
-  Storage* st                  = nullptr;
-  size_t longest_prefix_length = 0;
-  XBT_DEBUG("Search for storage name for '%s' on '%s'", fullpath.c_str(), host->getCname());
-
-  for (auto const& mnt : host->getMountedStorages()) {
-    XBT_DEBUG("See '%s'", mnt.first.c_str());
-    mount_point_ = fullpath.substr(0, mnt.first.length());
-
-    if (mount_point_ == mnt.first && mnt.first.length() > longest_prefix_length) {
-      /* The current mount name is found in the full path and is bigger than the previous*/
-      longest_prefix_length = mnt.first.length();
-      st                    = mnt.second;
-    }
-  }
-  if (longest_prefix_length > 0) { /* Mount point found, split fullpath into mount_name and path+filename*/
-    mount_point_ = fullpath.substr(0, longest_prefix_length);
-    path_        = fullpath.substr(longest_prefix_length, fullpath.length());
-  } else
-    xbt_die("Can't find mount point for '%s' on '%s'", fullpath.c_str(), host->getCname());
-
-  localStorage = st;
-
-  XBT_DEBUG("\tOpen file '%s'", path_.c_str());
-  std::map<std::string, sg_size_t>* content = localStorage->getContent();
-  // if file does not exist create an empty file
-  auto sz = content->find(path_);
-  if (sz != content->end()) {
-    size_ = sz->second;
-  } else {
-    size_ = 0;
-    content->insert({path_, size_});
-    XBT_DEBUG("File '%s' was not found, file created.", path_.c_str());
-  }
-}
-
-sg_size_t File::read(sg_size_t size)
-{
-  XBT_DEBUG("READ %s on disk '%s'", getPath(), localStorage->getCname());
-  // if the current position is close to the end of the file, we may not be able to read the requested size
-  sg_size_t read_size = localStorage->read(std::min(size, size_ - current_position_));
-  current_position_ += read_size;
-  return read_size;
-}
-
-sg_size_t File::write(sg_size_t size)
-{
-  XBT_DEBUG("WRITE %s on disk '%s'. size '%llu/%llu'", getPath(), localStorage->getCname(), size, size_);
-  // If the storage is full before even starting to write
-  if (localStorage->getSizeUsed() >= localStorage->getSize())
-    return 0;
-  /* Substract the part of the file that might disappear from the used sized on the storage element */
-  localStorage->decrUsedSize(size_ - current_position_);
-
-  sg_size_t write_size = localStorage->write(size);
-  localStorage->incrUsedSize(write_size);
-
-  current_position_ += write_size;
-  size_ = current_position_;
-
-  localStorage->getContent()->erase(path_);
-  localStorage->getContent()->insert({path_, size_});
-
-  return write_size;
-}
-
-sg_size_t File::size()
-{
-  return size_;
-}
-
-void File::seek(sg_offset_t offset)
-{
-  current_position_ = offset;
-}
-
-void File::seek(sg_offset_t offset, int origin)
-{
-  switch (origin) {
-    case SEEK_SET:
-      current_position_ = offset;
-      break;
-    case SEEK_CUR:
-      current_position_ += offset;
-      break;
-    case SEEK_END:
-      current_position_ = size_ + offset;
-      break;
-    default:
-      break;
-  }
-}
-
-sg_size_t File::tell()
-{
-  return current_position_;
-}
-
-void File::move(std::string fullpath)
-{
-  /* Check if the new full path is on the same mount point */
-  if (not strncmp(mount_point_.c_str(), fullpath.c_str(), mount_point_.length())) {
-    std::map<std::string, sg_size_t>* content = localStorage->getContent();
-    auto sz = content->find(path_);
-    if (sz != content->end()) { // src file exists
-      sg_size_t new_size = sz->second;
-      content->erase(path_);
-      std::string path = fullpath.substr(mount_point_.length(), fullpath.length());
-      content->insert({path.c_str(), new_size});
-      XBT_DEBUG("Move file from %s to %s, size '%llu'", path_.c_str(), fullpath.c_str(), new_size);
-    } else {
-      XBT_WARN("File %s doesn't exist", path_.c_str());
-    }
-  } else {
-    XBT_WARN("New full path %s is not on the same mount point: %s.", fullpath.c_str(), mount_point_.c_str());
-  }
-}
-
-int File::unlink()
-{
-  /* Check if the file is on local storage */
-  if (localStorage->getContent()->find(path_) == localStorage->getContent()->end()) {
-    XBT_WARN("File %s is not on disk %s. Impossible to unlink", path_.c_str(), localStorage->getCname());
-    return -1;
-  } else {
-    XBT_DEBUG("UNLINK %s on disk '%s'", path_.c_str(), localStorage->getCname());
-    localStorage->decrUsedSize(size_);
-
-    // Remove the file from storage
-    localStorage->getContent()->erase(fullpath_);
-
-    return 0;
-  }
-}
-
-FileSystemStorageExt::FileSystemStorageExt(simgrid::s4u::Storage* ptr)
-{
-  content_ = parseContent(ptr->getImpl()->content_name);
-}
-
-FileSystemStorageExt::~FileSystemStorageExt()
-{
-  delete content_;
-}
-
-std::map<std::string, sg_size_t>* FileSystemStorageExt::parseContent(std::string filename)
-{
-  if (filename.empty())
-    return nullptr;
-
-  std::map<std::string, sg_size_t>* parse_content = new std::map<std::string, sg_size_t>();
-
-  std::ifstream* fs = surf_ifsopen(filename);
-
-  std::string line;
-  std::vector<std::string> tokens;
-  do {
-    std::getline(*fs, line);
-    boost::trim(line);
-    if (line.length() > 0) {
-      boost::split(tokens, line, boost::is_any_of(" \t"), boost::token_compress_on);
-      xbt_assert(tokens.size() == 2, "Parse error in %s: %s", filename.c_str(), line.c_str());
-      sg_size_t size = std::stoull(tokens.at(1));
-
-      usedSize_ += size;
-      parse_content->insert({tokens.front(), size});
-    }
-  } while (not fs->eof());
-  delete fs;
-  return parse_content;
-}
-}
-}
-
-using simgrid::s4u::FileSystemStorageExt;
-
-static void onStorageCreation(simgrid::s4u::Storage& st)
-{
-  st.extension_set(new FileSystemStorageExt(&st));
-}
-
-static void onStorageDestruction(simgrid::s4u::Storage& st)
-{
-  delete st.extension<FileSystemStorageExt>();
-}
-
-/* **************************** Public interface *************************** */
-SG_BEGIN_DECL()
-
-void sg_storage_file_system_init()
-{
-
-  if (FileSystemStorageExt::EXTENSION_ID.valid())
-    return;
-
-  FileSystemStorageExt::EXTENSION_ID = simgrid::s4u::Storage::extension_create<FileSystemStorageExt>();
-
-  simgrid::s4u::Storage::onCreation.connect(&onStorageCreation);
-  simgrid::s4u::Storage::onDestruction.connect(&onStorageDestruction);
-}
-
-SG_END_DECL()
index dcac704..b0de6a6 100644 (file)
@@ -8,8 +8,8 @@
 #include "simgrid/s4u/Link.hpp"
 #include "simgrid/sg_config.h"
 #include "simgrid/simix.hpp"
+#include "src/kernel/lmm/maxmin.hpp"
 #include "src/surf/network_interface.hpp"
-#include "surf/maxmin.hpp"
 #include "xbt/log.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_link, s4u, "Logging specific to the S4U links");
index 9123343..b4920f5 100644 (file)
@@ -3,10 +3,10 @@
 /* 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/s4u/File.hpp"
 #include "simgrid/s4u/Host.hpp"
 #include "simgrid/s4u/Storage.hpp"
 #include "simgrid/simix.hpp"
+#include "src/plugins/file_system/FileSystem.hpp"
 #include "src/surf/StorageImpl.hpp"
 #include <unordered_map>
 
@@ -55,35 +55,6 @@ Host* Storage::getHost()
   return attached_to_;
 }
 
-sg_size_t Storage::getSizeFree()
-{
-  FileSystemStorageExt* file_system = extension<FileSystemStorageExt>();
-
-  return pimpl_->getSize() - file_system->getUsedSize();
-}
-
-sg_size_t Storage::getSizeUsed()
-{
-  FileSystemStorageExt* file_system = extension<FileSystemStorageExt>();
-  return file_system->getUsedSize();
-}
-
-void Storage::decrUsedSize(sg_size_t size)
-{
-  FileSystemStorageExt* file_system = extension<FileSystemStorageExt>();
-  file_system->decrUsedSize(size);
-}
-
-void Storage::incrUsedSize(sg_size_t size)
-{
-  FileSystemStorageExt* file_system = extension<FileSystemStorageExt>();
-  file_system->incrUsedSize(size);
-}
-
-sg_size_t Storage::getSize()
-{
-  return pimpl_->getSize();
-}
 
 std::map<std::string, std::string>* Storage::getProperties()
 {
@@ -100,12 +71,6 @@ void Storage::setProperty(std::string key, std::string value)
   simgrid::simix::kernelImmediate([this, key, value] { this->pimpl_->setProperty(key, value); });
 }
 
-std::map<std::string, sg_size_t>* Storage::getContent()
-{
-  FileSystemStorageExt* file_system = extension<FileSystemStorageExt>();
-  return file_system->getContent();
-}
-
 sg_size_t Storage::read(sg_size_t size)
 {
   return simcall_storage_read(pimpl_, size);
index 281feaa..19e7b14 100644 (file)
@@ -11,9 +11,9 @@
 #include "simgrid/instr.h"
 #include "simgrid/simix.h"
 #include "simgrid_config.h" /* what was compiled in? */
+#include "src/kernel/lmm/maxmin.hpp"
 #include "src/mc/mc_replay.hpp"
 #include "src/surf/surf_interface.hpp"
-#include "surf/maxmin.hpp"
 #include "surf/surf.hpp"
 #include "xbt/config.h"
 #include "xbt/config.hpp"
index ed204c9..29ca5bf 100644 (file)
@@ -464,6 +464,12 @@ void SIMIX_process_runall()
  */
 void SIMIX_process_kill(smx_actor_t process, smx_actor_t issuer) {
 
+  if (process->finished) {
+    XBT_DEBUG("Ignoring request to kill process %s@%s that is already dead", process->getCname(),
+              process->host->getCname());
+    return;
+  }
+
   XBT_DEBUG("Killing process %s@%s", process->getCname(), process->host->getCname());
 
   process->context->iwannadie = 1;
index aaf32c3..28ab3ae 100644 (file)
@@ -29,7 +29,7 @@ int PMPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm c
     int rank        = smpi_process()->index();
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::CollTIData("bcast", comm->group()->index(root), -1.0,
-                                                      datatype->is_basic() ? count : count * datatype->size(), -1,
+                                                      datatype->is_replayable() ? count : count * datatype->size(), -1,
                                                       encode_datatype(datatype), ""));
     if (comm->size() > 1)
       simgrid::smpi::Colls::bcast(buf, count, datatype, root, comm);
@@ -95,8 +95,8 @@ int PMPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbu
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::CollTIData(
                            "gather", comm->group()->index(root), -1.0,
-                           sendtmptype->is_basic() ? sendtmpcount : sendtmpcount * sendtmptype->size(),
-                           (comm->rank() != root || recvtype->is_basic()) ? recvcount : recvcount * recvtype->size(),
+                           sendtmptype->is_replayable() ? sendtmpcount : sendtmpcount * sendtmptype->size(),
+                           (comm->rank() != root || recvtype->is_replayable()) ? recvcount : recvcount * recvtype->size(),
                            encode_datatype(sendtmptype), encode_datatype(recvtype)));
 
     simgrid::smpi::Colls::gather(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcount, recvtype, root, comm);
@@ -135,7 +135,7 @@ int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recv
     }
 
     int rank         = smpi_process()->index();
-    int dt_size_recv = recvtype->is_basic() ? 1 : recvtype->size();
+    int dt_size_recv = recvtype->is_replayable() ? 1 : recvtype->size();
 
     std::vector<int>* trace_recvcounts = new std::vector<int>;
     if (comm->rank() == root) {
@@ -146,7 +146,7 @@ int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recv
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::VarCollTIData(
                            "gatherV", comm->group()->index(root),
-                           sendtmptype->is_basic() ? sendtmpcount : sendtmpcount * sendtmptype->size(), nullptr,
+                           sendtmptype->is_replayable() ? sendtmpcount : sendtmpcount * sendtmptype->size(), nullptr,
                            dt_size_recv, trace_recvcounts, encode_datatype(sendtmptype), encode_datatype(recvtype)));
 
     retval = simgrid::smpi::Colls::gatherv(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcounts, displs, recvtype, root, comm);
@@ -182,8 +182,8 @@ int PMPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype,
 
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::CollTIData("allGather", -1, -1.0,
-                                                      sendtype->is_basic() ? sendcount : sendcount * sendtype->size(),
-                                                      recvtype->is_basic() ? recvcount : recvcount * recvtype->size(),
+                                                      sendtype->is_replayable() ? sendcount : sendcount * sendtype->size(),
+                                                      recvtype->is_replayable() ? recvcount : recvcount * recvtype->size(),
                                                       encode_datatype(sendtype), encode_datatype(recvtype)));
 
     simgrid::smpi::Colls::allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm);
@@ -216,7 +216,7 @@ int PMPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
       sendtype=recvtype;
     }
     int rank               = smpi_process()->index();
-    int dt_size_recv       = recvtype->is_basic() ? 1 : recvtype->size();
+    int dt_size_recv       = recvtype->is_replayable() ? 1 : recvtype->size();
 
     std::vector<int>* trace_recvcounts = new std::vector<int>;
     for (int i = 0; i < comm->size(); i++) // copy data to avoid bad free
@@ -224,7 +224,7 @@ int PMPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
 
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::VarCollTIData(
-                           "allGatherV", -1, sendtype->is_basic() ? sendcount : sendcount * sendtype->size(), nullptr,
+                           "allGatherV", -1, sendtype->is_replayable() ? sendcount : sendcount * sendtype->size(), nullptr,
                            dt_size_recv, trace_recvcounts, encode_datatype(sendtype), encode_datatype(recvtype)));
 
     simgrid::smpi::Colls::allgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm);
@@ -262,8 +262,8 @@ int PMPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype,
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::CollTIData(
                            "scatter", comm->group()->index(root), -1.0,
-                           (comm->rank() != root || sendtype->is_basic()) ? sendcount : sendcount * sendtype->size(),
-                           recvtype->is_basic() ? recvcount : recvcount * recvtype->size(), encode_datatype(sendtype),
+                           (comm->rank() != root || sendtype->is_replayable()) ? sendcount : sendcount * sendtype->size(),
+                           recvtype->is_replayable() ? recvcount : recvcount * recvtype->size(), encode_datatype(sendtype),
                            encode_datatype(recvtype)));
 
     simgrid::smpi::Colls::scatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm);
@@ -295,7 +295,7 @@ int PMPI_Scatterv(void *sendbuf, int *sendcounts, int *displs,
       recvcount = sendcounts[comm->rank()];
     }
     int rank               = smpi_process()->index();
-    int dt_size_send       = sendtype->is_basic() ? 1 : sendtype->size();
+    int dt_size_send       = sendtype->is_replayable() ? 1 : sendtype->size();
 
     std::vector<int>* trace_sendcounts = new std::vector<int>;
     if (comm->rank() == root) {
@@ -305,7 +305,7 @@ int PMPI_Scatterv(void *sendbuf, int *sendcounts, int *displs,
 
     TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::VarCollTIData(
                                                "scatterV", comm->group()->index(root), dt_size_send, trace_sendcounts,
-                                               recvtype->is_basic() ? recvcount : recvcount * recvtype->size(), nullptr,
+                                               recvtype->is_replayable() ? recvcount : recvcount * recvtype->size(), nullptr,
                                                encode_datatype(sendtype), encode_datatype(recvtype)));
 
     retval = simgrid::smpi::Colls::scatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm);
@@ -332,7 +332,7 @@ int PMPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
 
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::CollTIData("reduce", comm->group()->index(root), 0,
-                                                      datatype->is_basic() ? count : count * datatype->size(), -1,
+                                                      datatype->is_replayable() ? count : count * datatype->size(), -1,
                                                       encode_datatype(datatype), ""));
 
     simgrid::smpi::Colls::reduce(sendbuf, recvbuf, count, datatype, op, root, comm);
@@ -382,7 +382,7 @@ int PMPI_Allreduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp
 
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::CollTIData("allReduce", -1, 0,
-                                                      datatype->is_basic() ? count : count * datatype->size(), -1,
+                                                      datatype->is_replayable() ? count : count * datatype->size(), -1,
                                                       encode_datatype(datatype), ""));
 
     simgrid::smpi::Colls::allreduce(sendtmpbuf, recvbuf, count, datatype, op, comm);
@@ -414,7 +414,7 @@ int PMPI_Scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MP
     int rank               = smpi_process()->index();
 
     TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::Pt2PtTIData(
-                                               "scan", -1, datatype->is_basic() ? count : count * datatype->size(),
+                                               "scan", -1, datatype->is_replayable() ? count : count * datatype->size(),
                                                encode_datatype(datatype)));
 
     retval = simgrid::smpi::Colls::scan(sendbuf, recvbuf, count, datatype, op, comm);
@@ -446,7 +446,7 @@ int PMPI_Exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
     }
 
     TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::Pt2PtTIData(
-                                               "exscan", -1, datatype->is_basic() ? count : count * datatype->size(),
+                                               "exscan", -1, datatype->is_replayable() ? count : count * datatype->size(),
                                                encode_datatype(datatype)));
 
     retval = simgrid::smpi::Colls::exscan(sendtmpbuf, recvbuf, count, datatype, op, comm);
@@ -476,7 +476,7 @@ int PMPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datat
   } else {
     int rank               = smpi_process()->index();
     std::vector<int>* trace_recvcounts = new std::vector<int>;
-    int dt_send_size                   = datatype->is_basic() ? 1 : datatype->size();
+    int dt_send_size                   = datatype->is_replayable() ? 1 : datatype->size();
     int totalcount    = 0;
 
     for (int i = 0; i < comm->size(); i++) { // copy data to avoid bad free
@@ -524,7 +524,7 @@ int PMPI_Reduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount,
     int count = comm->size();
 
     int rank               = smpi_process()->index();
-    int dt_send_size                   = datatype->is_basic() ? 1 : datatype->size();
+    int dt_send_size                   = datatype->is_replayable() ? 1 : datatype->size();
     std::vector<int>* trace_recvcounts = new std::vector<int>(recvcount * dt_send_size); // copy data to avoid bad free
 
     void* sendtmpbuf       = sendbuf;
@@ -579,8 +579,8 @@ int PMPI_Alltoall(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* rec
     TRACE_smpi_comm_in(
         rank, __FUNCTION__,
         new simgrid::instr::CollTIData("allToAll", -1, -1.0,
-                                       sendtmptype->is_basic() ? sendtmpcount : sendtmpcount * sendtmptype->size(),
-                                       recvtype->is_basic() ? recvcount : recvcount * recvtype->size(),
+                                       sendtmptype->is_replayable() ? sendtmpcount : sendtmpcount * sendtmptype->size(),
+                                       recvtype->is_replayable() ? recvcount : recvcount * recvtype->size(),
                                        encode_datatype(sendtmptype), encode_datatype(recvtype)));
 
     retval = simgrid::smpi::Colls::alltoall(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcount, recvtype, comm);
index fd9d4a6..4b113d6 100644 (file)
@@ -161,7 +161,7 @@ int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MP
 
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::Pt2PtTIData("Irecv", comm->group()->index(src),
-                                                       datatype->is_basic() ? count : count * datatype->size(),
+                                                       datatype->is_replayable() ? count : count * datatype->size(),
                                                        encode_datatype(datatype)));
 
     *request = simgrid::smpi::Request::irecv(buf, count, datatype, src, tag, comm);
@@ -202,7 +202,7 @@ int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MP
     int trace_dst = comm->group()->index(dst);
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::Pt2PtTIData("Isend", trace_dst,
-                                                       datatype->is_basic() ? count : count * datatype->size(),
+                                                       datatype->is_replayable() ? count : count * datatype->size(),
                                                        encode_datatype(datatype)));
 
     TRACE_smpi_send(rank, rank, trace_dst, tag, count * datatype->size());
@@ -244,7 +244,7 @@ int PMPI_Issend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, M
     int trace_dst = comm->group()->index(dst);
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::Pt2PtTIData("ISsend", trace_dst,
-                                                       datatype->is_basic() ? count : count * datatype->size(),
+                                                       datatype->is_replayable() ? count : count * datatype->size(),
                                                        encode_datatype(datatype)));
     TRACE_smpi_send(rank, rank, trace_dst, tag, count * datatype->size());
 
@@ -284,7 +284,7 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI
     int src_traced         = comm->group()->index(src);
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::Pt2PtTIData("recv", src_traced,
-                                                       datatype->is_basic() ? count : count * datatype->size(),
+                                                       datatype->is_replayable() ? count : count * datatype->size(),
                                                        encode_datatype(datatype)));
 
     simgrid::smpi::Request::recv(buf, count, datatype, src, tag, comm, status);
@@ -327,7 +327,7 @@ int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI
     int dst_traced         = comm->group()->index(dst);
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::Pt2PtTIData("send", dst_traced,
-                                                       datatype->is_basic() ? count : count * datatype->size(),
+                                                       datatype->is_replayable() ? count : count * datatype->size(),
                                                        encode_datatype(datatype)));
     if (not TRACE_smpi_view_internals()) {
       TRACE_smpi_send(rank, rank, dst_traced, tag,count*datatype->size());
@@ -365,7 +365,7 @@ int PMPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, MP
     int dst_traced         = comm->group()->index(dst);
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::Pt2PtTIData("Ssend", dst_traced,
-                                                       datatype->is_basic() ? count : count * datatype->size(),
+                                                       datatype->is_replayable() ? count : count * datatype->size(),
                                                        encode_datatype(datatype)));
     TRACE_smpi_send(rank, rank, dst_traced, tag, count * datatype->size());
 
@@ -414,8 +414,8 @@ int PMPI_Sendrecv(void* sendbuf, int sendcount, MPI_Datatype sendtype, int dst,
     src_hack->push_back(src_traced);
     TRACE_smpi_comm_in(rank, __FUNCTION__,
                        new simgrid::instr::VarCollTIData(
-                           "sendRecv", -1, sendtype->is_basic() ? sendcount : sendcount * sendtype->size(), dst_hack,
-                           recvtype->is_basic() ? recvcount : recvcount * recvtype->size(), src_hack,
+                           "sendRecv", -1, sendtype->is_replayable() ? sendcount : sendcount * sendtype->size(), dst_hack,
+                           recvtype->is_replayable() ? recvcount : recvcount * recvtype->size(), src_hack,
                            encode_datatype(sendtype), encode_datatype(recvtype)));
 
     TRACE_smpi_send(rank, rank, dst_traced, sendtag, sendcount * sendtype->size());
index 71d64a1..eb5aa7b 100644 (file)
@@ -199,7 +199,7 @@ int PMPI_Get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
     MPI_Group group;
     win->get_group(&group);
     TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::Pt2PtTIData("Get", target_rank,
-                                                       origin_datatype->is_basic() ? origin_count : origin_count * origin_datatype->size(),
+                                                       origin_datatype->is_replayable() ? origin_count : origin_count * origin_datatype->size(),
                                                        encode_datatype(origin_datatype)));
 
     retval = win->get( origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count,
@@ -238,7 +238,7 @@ int PMPI_Rget( void *origin_addr, int origin_count, MPI_Datatype origin_datatype
     MPI_Group group;
     win->get_group(&group);
     TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::Pt2PtTIData("Rget", target_rank,
-                                                       origin_datatype->is_basic() ? origin_count : origin_count * origin_datatype->size(),
+                                                       origin_datatype->is_replayable() ? origin_count : origin_count * origin_datatype->size(),
                                                        encode_datatype(origin_datatype)));
 
     retval = win->get( origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count,
@@ -275,7 +275,7 @@ int PMPI_Put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
     win->get_group(&group);
     int dst_traced = group->index(target_rank);
     TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::Pt2PtTIData("Put", dst_traced,
-                                                       origin_datatype->is_basic() ? origin_count : origin_count * origin_datatype->size(),
+                                                       origin_datatype->is_replayable() ? origin_count : origin_count * origin_datatype->size(),
                                                        encode_datatype(origin_datatype)));
     TRACE_smpi_send(rank, rank, dst_traced, SMPI_RMA_TAG, origin_count*origin_datatype->size());
 
@@ -316,7 +316,7 @@ int PMPI_Rput( void *origin_addr, int origin_count, MPI_Datatype origin_datatype
     win->get_group(&group);
     int dst_traced = group->index(target_rank);
     TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::Pt2PtTIData("Rput", dst_traced,
-                                                       origin_datatype->is_basic() ? origin_count : origin_count * origin_datatype->size(),
+                                                       origin_datatype->is_replayable() ? origin_count : origin_count * origin_datatype->size(),
                                                        encode_datatype(origin_datatype)));
     TRACE_smpi_send(rank, rank, dst_traced, SMPI_RMA_TAG, origin_count*origin_datatype->size());
 
@@ -355,7 +355,7 @@ int PMPI_Accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_da
     MPI_Group group;
     win->get_group(&group);
     TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::Pt2PtTIData("Accumulate", target_rank,
-                                                       origin_datatype->is_basic() ? origin_count : origin_count * origin_datatype->size(),
+                                                       origin_datatype->is_replayable() ? origin_count : origin_count * origin_datatype->size(),
                                                        encode_datatype(origin_datatype)));
     retval = win->accumulate( origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count,
                                   target_datatype, op);
@@ -395,7 +395,7 @@ int PMPI_Raccumulate( void *origin_addr, int origin_count, MPI_Datatype origin_d
     MPI_Group group;
     win->get_group(&group);
     TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::Pt2PtTIData("Raccumulate", target_rank,
-                                                       origin_datatype->is_basic() ? origin_count : origin_count * origin_datatype->size(),
+                                                       origin_datatype->is_replayable() ? origin_count : origin_count * origin_datatype->size(),
                                                        encode_datatype(origin_datatype)));
 
     retval = win->accumulate( origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count,
@@ -435,7 +435,7 @@ MPI_Datatype target_datatype, MPI_Op op, MPI_Win win){
     MPI_Group group;
     win->get_group(&group);
     TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::Pt2PtTIData("Get_accumulate", target_rank,
-                                                       target_datatype->is_basic() ? target_count : target_count * target_datatype->size(),
+                                                       target_datatype->is_replayable() ? target_count : target_count * target_datatype->size(),
                                                        encode_datatype(target_datatype)));
 
     retval = win->get_accumulate( origin_addr, origin_count, origin_datatype, result_addr,
@@ -480,7 +480,7 @@ MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request* request){
     MPI_Group group;
     win->get_group(&group);
     TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::Pt2PtTIData("Rget_accumulate", target_rank,
-                                                       target_datatype->is_basic() ? target_count : target_count * target_datatype->size(),
+                                                       target_datatype->is_replayable() ? target_count : target_count * target_datatype->size(),
                                                        encode_datatype(target_datatype)));
 
     retval = win->get_accumulate( origin_addr, origin_count, origin_datatype, result_addr,
@@ -520,7 +520,7 @@ int PMPI_Compare_and_swap(void* origin_addr, void* compare_addr, void* result_ad
     MPI_Group group;
     win->get_group(&group);
     TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::Pt2PtTIData("Compare_and_swap", target_rank,
-                                                       datatype->is_basic() ? 1 : datatype->size(),
+                                                       datatype->is_replayable() ? 1 : datatype->size(),
                                                        encode_datatype(datatype)));
 
     retval = win->compare_and_swap(origin_addr, compare_addr, result_addr, datatype, target_rank, target_disp);
index 2453f10..e96134e 100644 (file)
@@ -103,6 +103,7 @@ public:
   void commit();
   bool is_valid();
   bool is_basic();
+  bool is_replayable();
   void addflag(int flag);
   int extent(MPI_Aint* lb, MPI_Aint* extent);
   MPI_Aint get_extent();
index 8e02386..a257225 100644 (file)
@@ -87,6 +87,8 @@ static double parse_double(const char *string)
   return value;
 }
 
+
+//TODO: this logic should be moved inside the datatype class, to support all predefined types and get rid of is_replayable.
 static MPI_Datatype decode_datatype(const char *const action)
 {
   switch(atoi(action)) {
index 4237217..8da55c7 100644 (file)
@@ -198,6 +198,12 @@ bool Datatype::is_basic()
   return (flags_ & DT_FLAG_BASIC);
 }
 
+bool Datatype::is_replayable()
+{
+  return ((this==MPI_BYTE)||(this==MPI_DOUBLE)||(this==MPI_INT)||
+          (this==MPI_CHAR)||(this==MPI_SHORT)||(this==MPI_LONG)||(this==MPI_FLOAT));
+}
+
 size_t Datatype::size(){
   return size_;
 }
index 6b79856..7741eb1 100644 (file)
@@ -5,7 +5,7 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "StorageImpl.hpp"
-#include "surf/maxmin.hpp"
+#include "src/kernel/lmm/maxmin.hpp"
 #include "surf_private.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_storage, surf, "Logging specific to the SURF storage module");
@@ -41,7 +41,7 @@ StorageImpl* StorageImpl::byName(std::string name)
 
 StorageModel::StorageModel() : Model()
 {
-  maxminSystem_ = new s_lmm_system_t(true /* lazy update */);
+  maxminSystem_ = new simgrid::kernel::lmm::s_lmm_system_t(true /* lazy update */);
 }
 
 StorageModel::~StorageModel()
index d83cd62..17036c1 100644 (file)
@@ -115,7 +115,6 @@ public:
    * @return The StorageAction corresponding to the writing
    */
   virtual StorageAction* write(sg_size_t size) = 0;
-  virtual sg_size_t getSize() { return size_; }
   virtual std::string getHost() { return attach_; }
 
   static std::unordered_map<std::string, StorageImpl*>* storagesMap() { return StorageImpl::storages; }
@@ -124,11 +123,10 @@ public:
   lmm_constraint_t constraintRead_;  /* Constraint for maximum write bandwidth*/
 
   std::string typeId_;
-  sg_size_t usedSize_ = 0;
-  std::string content_name;
+  std::string content_name; // Only used at parsing time then goes to the FileSystemExtension
+  sg_size_t size_;          // Only used at parsing time then goes to the FileSystemExtension
 
 private:
-  sg_size_t size_;
   static std::unordered_map<std::string, StorageImpl*>* storages;
   // Name of the host to which this storage is attached. Only used at platform parsing time, then the interface stores
   // the Host directly.
index d25bf1f..bfa4e53 100644 (file)
@@ -7,7 +7,7 @@
 #include "cpu_cas01.hpp"
 #include "cpu_ti.hpp"
 #include "simgrid/sg_config.h"
-#include "surf/maxmin.hpp"
+#include "src/kernel/lmm/maxmin.hpp"
 #include <algorithm>
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu_cas, surf_cpu, "Logging specific to the SURF CPU IMPROVED module");
@@ -53,7 +53,7 @@ CpuCas01Model::CpuCas01Model() : simgrid::surf::CpuModel()
   }
 
   p_cpuRunningActionSetThatDoesNotNeedBeingChecked = new ActionList();
-  maxminSystem_                                    = new s_lmm_system_t(selectiveUpdate_);
+  maxminSystem_                                    = new simgrid::kernel::lmm::s_lmm_system_t(selectiveUpdate_);
 
   if (getUpdateMechanism() == UM_LAZY) {
     modifiedSet_ = new ActionLmmList();
@@ -104,7 +104,7 @@ bool CpuCas01::isUsed()
 /** @brief take into account changes of speed (either load or max) */
 void CpuCas01::onSpeedChange() {
   lmm_variable_t var = nullptr;
-  lmm_element_t elem = nullptr;
+  const_lmm_element_t elem = nullptr;
 
   model()->getMaxminSystem()->update_constraint_bound(constraint(), coresAmount_ * speed_.scale * speed_.peak);
   while ((var = constraint()->get_variable(&elem))) {
@@ -138,7 +138,7 @@ void CpuCas01::apply_event(tmgr_trace_event_t event, double value)
     } else {
       lmm_constraint_t cnst = constraint();
       lmm_variable_t var = nullptr;
-      lmm_element_t elem = nullptr;
+      const_lmm_element_t elem = nullptr;
       double date = surf_get_clock();
 
       turnOff();
index ab01fc3..a726ecb 100644 (file)
@@ -7,7 +7,7 @@
 #define SURF_CPU_INTERFACE_HPP_
 
 #include "simgrid/s4u/Host.hpp"
-#include "surf/maxmin.hpp"
+#include "src/kernel/lmm/maxmin.hpp"
 
 #include <list>
 
index 915e5c2..e7338e9 100644 (file)
@@ -9,7 +9,7 @@
 #include "simgrid/s4u/Host.hpp"
 #include "simgrid/sg_config.h"
 #include "src/instr/instr_private.hpp" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals
-#include "surf/maxmin.hpp"
+#include "src/kernel/lmm/maxmin.hpp"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_network);
 
@@ -87,14 +87,14 @@ void surf_network_model_init_Reno()
   if (surf_network_model)
     return;
 
-  lmm_set_default_protocol_function(simgrid::surf::func_reno_f, simgrid::surf::func_reno_fp,
-                                    simgrid::surf::func_reno_fpi);
+  lmm_set_default_protocol_function(simgrid::kernel::lmm::func_reno_f, simgrid::kernel::lmm::func_reno_fp,
+                                    simgrid::kernel::lmm::func_reno_fpi);
 
   xbt_cfg_setdefault_double("network/latency-factor", 13.01);
   xbt_cfg_setdefault_double("network/bandwidth-factor", 0.97);
   xbt_cfg_setdefault_double("network/weight-S", 20537);
 
-  surf_network_model = new simgrid::surf::NetworkCm02Model(&simgrid::surf::lagrange_solve);
+  surf_network_model = new simgrid::surf::NetworkCm02Model(&simgrid::kernel::lmm::lagrange_solve);
   all_existing_models->push_back(surf_network_model);
 }
 
@@ -104,14 +104,14 @@ void surf_network_model_init_Reno2()
   if (surf_network_model)
     return;
 
-  lmm_set_default_protocol_function(simgrid::surf::func_reno2_f, simgrid::surf::func_reno2_fp,
-                                    simgrid::surf::func_reno2_fpi);
+  lmm_set_default_protocol_function(simgrid::kernel::lmm::func_reno2_f, simgrid::kernel::lmm::func_reno2_fp,
+                                    simgrid::kernel::lmm::func_reno2_fpi);
 
   xbt_cfg_setdefault_double("network/latency-factor", 13.01);
   xbt_cfg_setdefault_double("network/bandwidth-factor", 0.97);
   xbt_cfg_setdefault_double("network/weight-S", 20537);
 
-  surf_network_model = new simgrid::surf::NetworkCm02Model(&simgrid::surf::lagrange_solve);
+  surf_network_model = new simgrid::surf::NetworkCm02Model(&simgrid::kernel::lmm::lagrange_solve);
   all_existing_models->push_back(surf_network_model);
 }
 
@@ -120,14 +120,14 @@ void surf_network_model_init_Vegas()
   if (surf_network_model)
     return;
 
-  lmm_set_default_protocol_function(simgrid::surf::func_vegas_f, simgrid::surf::func_vegas_fp,
-                                    simgrid::surf::func_vegas_fpi);
+  lmm_set_default_protocol_function(simgrid::kernel::lmm::func_vegas_f, simgrid::kernel::lmm::func_vegas_fp,
+                                    simgrid::kernel::lmm::func_vegas_fpi);
 
   xbt_cfg_setdefault_double("network/latency-factor", 13.01);
   xbt_cfg_setdefault_double("network/bandwidth-factor", 0.97);
   xbt_cfg_setdefault_double("network/weight-S", 20537);
 
-  surf_network_model = new simgrid::surf::NetworkCm02Model(&simgrid::surf::lagrange_solve);
+  surf_network_model = new simgrid::surf::NetworkCm02Model(&simgrid::kernel::lmm::lagrange_solve);
   all_existing_models->push_back(surf_network_model);
 }
 
@@ -152,7 +152,7 @@ NetworkCm02Model::NetworkCm02Model()
     xbt_die("Unsupported optimization (%s) for this model. Accepted: Full, Lazy.", optim.c_str());
   }
 
-  maxminSystem_ = new s_lmm_system_t(selectiveUpdate_);
+  maxminSystem_ = new simgrid::kernel::lmm::s_lmm_system_t(selectiveUpdate_);
   loopback_     = NetworkCm02Model::createLink("__loopback__", 498000000, 0.000015, SURF_LINK_FATPIPE);
 
   if (getUpdateMechanism() == UM_LAZY) {
@@ -380,7 +380,7 @@ void NetworkCm02Link::apply_event(tmgr_trace_event_t triggered, double value)
       turnOn();
     else {
       lmm_variable_t var = nullptr;
-      lmm_element_t elem = nullptr;
+      const_lmm_element_t elem = nullptr;
       double now = surf_get_clock();
 
       turnOff();
@@ -414,8 +414,8 @@ void NetworkCm02Link::setBandwidth(double value)
     double delta = sg_weight_S_parameter / value - sg_weight_S_parameter / (bandwidth_.peak * bandwidth_.scale);
 
     lmm_variable_t var;
-    lmm_element_t elem = nullptr;
-    lmm_element_t nextelem = nullptr;
+    const_lmm_element_t elem     = nullptr;
+    const_lmm_element_t nextelem = nullptr;
     int numelem = 0;
     while ((var = constraint()->get_variable_safe(&elem, &nextelem, &numelem))) {
       NetworkCm02Action* action = static_cast<NetworkCm02Action*>(var->get_id());
@@ -428,10 +428,10 @@ void NetworkCm02Link::setBandwidth(double value)
 
 void NetworkCm02Link::setLatency(double value)
 {
-  double delta           = value - latency_.peak;
-  lmm_variable_t var = nullptr;
-  lmm_element_t elem = nullptr;
-  lmm_element_t nextelem = nullptr;
+  double delta                 = value - latency_.peak;
+  lmm_variable_t var           = nullptr;
+  const_lmm_element_t elem     = nullptr;
+  const_lmm_element_t nextelem = nullptr;
   int numelem = 0;
 
   latency_.peak = value;
index 4752d1a..1dc1b1e 100644 (file)
@@ -7,10 +7,10 @@
 #include <utility>
 
 #include "simgrid/sg_config.h"
+#include "src/kernel/lmm/maxmin.hpp"
 #include "src/surf/HostImpl.hpp"
 #include "src/surf/network_ib.hpp"
 #include "src/surf/xml/platf.hpp"
-#include "surf/maxmin.hpp"
 #include <boost/algorithm/string/classification.hpp>
 #include <boost/algorithm/string/split.hpp>
 
index e678a32..d4ab529 100644 (file)
@@ -7,9 +7,9 @@
 #define SURF_NETWORK_INTERFACE_HPP_
 
 #include "simgrid/s4u/Link.hpp"
+#include "src/kernel/lmm/maxmin.hpp"
 #include "src/surf/PropertyHolder.hpp"
 #include "src/surf/surf_interface.hpp"
-#include "surf/maxmin.hpp"
 #include "xbt/base.h"
 #include <list>
 #include <unordered_map>
@@ -65,7 +65,7 @@ public:
    *
    * @param system The lmm_system_t to solve
    */
-  void (*f_networkSolve)(lmm_system_t) = lmm_solve;
+  void (*f_networkSolve)(lmm_system_t) = simgrid::kernel::lmm::lmm_solve;
 
   /**
    * @brief Get the right multiplicative factor for the latency.
index 9da1734..d94f6fb 100644 (file)
@@ -34,8 +34,8 @@ namespace simgrid {
 namespace surf {
 
 HostL07Model::HostL07Model() : HostModel() {
-  maxminSystem_            = new s_lmm_system_t(true /* lazy */);
-  maxminSystem_->solve_fun = &bottleneck_solve;
+  maxminSystem_            = new simgrid::kernel::lmm::s_lmm_system_t(true /* lazy */);
+  maxminSystem_->solve_fun = &simgrid::kernel::lmm::bottleneck_solve;
   surf_network_model = new NetworkL07Model(this,maxminSystem_);
   surf_cpu_model_pm = new CpuL07Model(this,maxminSystem_);
 }
@@ -295,7 +295,7 @@ bool CpuL07::isUsed(){
 /** @brief take into account changes of speed (either load or max) */
 void CpuL07::onSpeedChange() {
   lmm_variable_t var = nullptr;
-  lmm_element_t elem = nullptr;
+  const_lmm_element_t elem = nullptr;
 
   model()->getMaxminSystem()->update_constraint_bound(constraint(), speed_.peak * speed_.scale);
   while ((var = constraint()->get_variable(&elem))) {
@@ -365,7 +365,7 @@ void LinkL07::setLatency(double value)
 {
   lmm_variable_t var = nullptr;
   L07Action *action;
-  lmm_element_t elem = nullptr;
+  const_lmm_element_t elem = nullptr;
 
   latency_.peak = value;
   while ((var = constraint()->get_variable(&elem))) {
index f016c1e..340c601 100644 (file)
@@ -5,8 +5,8 @@
 
 #include "storage_n11.hpp"
 #include "simgrid/s4u/Engine.hpp"
+#include "src/kernel/lmm/maxmin.hpp"
 #include "src/kernel/routing/NetPoint.hpp"
-#include "surf/maxmin.hpp"
 #include <cmath> /*ceil*/
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_storage);
index c52f14f..7def179 100644 (file)
@@ -1,6 +1,10 @@
 # C examples
-foreach(x actions-comm actions-storage cloud-sharing get_sender host_on_off host_on_off_recv host_on_off_processes
-          process-yield
+foreach(x actions-comm actions-storage
+          async-wait async-waitall async-waitany
+          cloud-sharing get_sender host_on_off host_on_off_recv host_on_off_processes
+          process-daemon process-kill process-migration process-suspend process-yield
+          energy-ptask
+          io-raw-storage
           trace_integration)
   add_executable       (${x}  ${x}/${x}.c)
   target_link_libraries(${x}  simgrid)
@@ -39,7 +43,13 @@ set(xml_files     ${xml_files}     ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/acti
                                    ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actions-comm_split_d.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/actions-storage/actions-storage_d.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/app-bittorrent/app-bittorrent_d.xml
-                                  ${CMAKE_CURRENT_SOURCE_DIR}/process-yield/process-yield_d.xml                                   
+                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/async-wait_d.xml
+                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/async-wait2_d.xml
+                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/async-wait3_d.xml
+                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/async-wait4_d.xml
+                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-waitall/async-waitall_d.xml
+                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-waitany/async-waitany_d.xml
+                                   ${CMAKE_CURRENT_SOURCE_DIR}/process-yield/process-yield_d.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/trace_integration/test-hbp1.0-hbp1.0-hbp1.0.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/trace_integration/test-hbp1.0-hbp3.0-hbp4.0.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/trace_integration/test-hbp1.5-hbp1.5.xml
@@ -53,20 +63,26 @@ set(xml_files     ${xml_files}     ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/acti
                                    ${CMAKE_CURRENT_SOURCE_DIR}/trace_integration/test-hbp1-c1s1-c3s2.xml
                                    ${CMAKE_CURRENT_SOURCE_DIR}/trace_integration/test-hbp2.5-hbp1.5.xml    PARENT_SCOPE)
 
-foreach(x get_sender host_on_off host_on_off_processes host_on_off_recv
+foreach(x 
+    actions-comm actions-storage
+    async-wait async-waitall async-waitany
+    app-bittorrent
+    host_on_off host_on_off_processes host_on_off_recv
+    get_sender
     task_destroy_cancel task_listen_from task_progress 
-    process-yield 
+    process-daemon process-kill process-migration process-suspend process-yield
+    energy-ptask
+    io-raw-storage
     trace_integration)
-  ADD_TESH_FACTORIES(tesh-msg-${x} "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/${x} --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/${x} ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/${x}/${x}.tesh)
+  ADD_TESH_FACTORIES(tesh-msg-${x} "thread;ucontext;raw;boost" 
+                                   --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms
+                                  --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/msg/${x}
+                                  --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/${x} 
+                                  ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/${x}/${x}.tesh)
 endforeach()
 
-foreach(x actions-comm actions-storage app-bittorrent)
-  ADD_TESH_FACTORIES(tesh-msg-${x} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/msg/${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/${x} ${x}.tesh)
-endforeach()
-# One context factory is enough for these ones
-
 foreach(x cloud-sharing)
-  ADD_TESH(tesh-msg-${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/${x} --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/${x} ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/${x}/${x}.tesh)
+  ADD_TESH(tesh-msg-${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/${x} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/${x} ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/${x}/${x}.tesh)
 endforeach()
 
-ADD_TESH_FACTORIES(tesh-app-bittorrent-parallel         "thread;ucontext;raw;boost" --cfg contexts/nthreads:4 ${CONTEXTS_SYNCHRO} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/msg/app-bittorrent --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/app-bittorrent app-bittorrent.tesh)
+ADD_TESH_FACTORIES(tesh-app-bittorrent-parallel         "thread;ucontext;raw;boost" --cfg contexts/nthreads:4 ${CONTEXTS_SYNCHRO} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/msg/app-bittorrent --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/app-bittorrent app-bittorrent.tesh)
index d2833bb..22108dc 100644 (file)
@@ -1,5 +1,5 @@
 ! output sort 19
-$ ${bindir:=.}/actions-comm --log=actions.thres=verbose ${srcdir:=.}/small_platform_fatpipe.xml actions-comm_split_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/actions-comm --log=actions.thres=verbose ${platfdir}/small_platform_fatpipe.xml actions-comm_split_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [ 20.703314] (1:p0@Tremblay) p0 recv p1 20.703314
 > [ 20.703314] (2:p1@Ruby) p1 send p0 1e10 20.703314
 > [ 30.897513] (0:maestro@) Simulation time 30.8975
@@ -7,7 +7,7 @@ $ ${bindir:=.}/actions-comm --log=actions.thres=verbose ${srcdir:=.}/small_platf
 > [ 30.897513] (2:p1@Ruby) p1 compute 1e9 10.194200
 
 ! output sort 19
-$ ${bindir:=.}/actions-comm --log=actions.thres=verbose ${srcdir:=.}/small_platform_fatpipe.xml actions-comm_d.xml actions-comm.txt "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/actions-comm --log=actions.thres=verbose ${platfdir}/small_platform_fatpipe.xml actions-comm_d.xml actions-comm.txt "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:p0@Tremblay) p0 comm_size 3 0.000000
 > [  1.037020] (1:p0@Tremblay) p0 bcast 5e8 1.037020
 > [  1.037020] (2:p1@Ruby) p1 bcast 5e8 1.037020
index e8219a1..d9a69ee 100644 (file)
@@ -1,5 +1,5 @@
 ! output sort 19
-$ ${bindir:=.}/actions-storage --log=storage_actions.thres=verbose ${srcdir:=.}/storage/storage.xml actions-storage_d.xml actions-storage.txt "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/actions-storage --log=storage_actions.thres=verbose ${platfdir}/storage/storage.xml actions-storage_d.xml actions-storage.txt "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:p0@denise) p0 open /home/lib/libsimgrid.so.3.6.2 0.000000
 > [  0.063552] (1:p0@denise) p0 read /home/lib/libsimgrid.so.3.6.2 12710497 0.063552
 > [  0.063552] (1:p0@denise) p0 close /home/lib/libsimgrid.so.3.6.2 0.000000
index 262fce3..0908021 100644 (file)
@@ -4,7 +4,7 @@ p Testing the Bittorrent implementation with MSG
 
 ! timeout 10
 ! output sort 19
-$ ${bindir:=.}/bittorrent ${srcdir:=.}/cluster.xml app-bittorrent_d.xml "--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/bittorrent ${platfdir}/cluster.xml app-bittorrent_d.xml "--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n"
 > [    0.000000] (1:tracker@node-0.acme.org) Tracker launched.
 > [    0.000000] (2:peer@node-1.acme.org) Hi, I'm joining the network with id 2
 > [    0.000000] (3:peer@node-2.acme.org) Hi, I'm joining the network with id 3
similarity index 62%
rename from examples/msg/async-wait/async-wait.c
rename to teshsuite/msg/async-wait/async-wait.c
index 0c4d599..beb85ca 100644 (file)
@@ -8,15 +8,15 @@
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_wait, "Messages specific for this msg example");
 
 /* Main function of the Sender process */
-static int sender(int argc, char *argv[])
+static int sender(int argc, charargv[])
 {
-  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 */
-  long receivers_count = xbt_str_parse_int(argv[4], "Invalid amount of receivers: %s");    /* - number of receivers */
-  double sleep_start_time = xbt_str_parse_double(argv[5], "Invalid sleep start time: %s"); /* - start time */
-  double sleep_test_time = xbt_str_parse_double(argv[6], "Invalid test time: %s");         /* - test time */
+  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 */
+  long receivers_count    = xbt_str_parse_int(argv[4], "Invalid amount of receivers: %s");   /* - number of receivers */
+  double sleep_start_time = xbt_str_parse_double(argv[5], "Invalid sleep start time: %s");   /* - start time */
+  double sleep_test_time  = xbt_str_parse_double(argv[6], "Invalid test time: %s");          /* - test time */
 
   XBT_INFO("sleep_start_time : %f , sleep_test_time : %f", sleep_start_time, sleep_test_time);
 
@@ -25,15 +25,15 @@ static int sender(int argc, char *argv[])
     char mailbox[80];
     char taskname[80];
 
-    snprintf(mailbox,79, "receiver-%ld", i % receivers_count);
-    snprintf(taskname,79, "Task_%d", i);
+    snprintf(mailbox, 79, "receiver-%ld", i % receivers_count);
+    snprintf(taskname, 79, "Task_%d", i);
 
     /* This process first creates a task and send it asynchronously with @ref MSG_task_isend. Then, if: */
     msg_task_t task = MSG_task_create(taskname, task_comp_size, task_comm_size, NULL);
     msg_comm_t comm = MSG_task_isend(task, mailbox);
     XBT_INFO("Send to receiver-%ld Task_%d", i % receivers_count, i);
 
-    if (sleep_test_time > 0) { /* - "test_time" is set to 0, wait on @ref MSG_comm_wait */
+    if (sleep_test_time > 0) {           /* - "test_time" is set to 0, wait on @ref MSG_comm_wait */
       while (MSG_comm_test(comm) == 0) { /* - Call @ref MSG_comm_test every "test_time" otherwise */
         MSG_process_sleep(sleep_test_time);
       }
@@ -64,25 +64,25 @@ static int sender(int argc, char *argv[])
 }
 
 /* Receiver process expects 3 arguments: */
-static int receiver(int argc, char *argv[])
+static int receiver(int argc, charargv[])
 {
-  xbt_assert(argc==4, "The relay_runner function does not accept any parameter from the XML deployment file");
-  int id = xbt_str_parse_int(argv[1], "Invalid id: %s");                                        /* - unique id */
+  xbt_assert(argc == 4, "The relay_runner function does not accept any parameter from the XML deployment file");
+  int id                  = xbt_str_parse_int(argv[1], "Invalid id: %s");                       /* - unique id */
   double sleep_start_time = xbt_str_parse_double(argv[2], "Invalid sleep start parameter: %s"); /* - start time */
-  double sleep_test_time = xbt_str_parse_double(argv[3], "Invalid sleep test parameter: %s");   /* - test time */
+  double sleep_test_time  = xbt_str_parse_double(argv[3], "Invalid sleep test parameter: %s");  /* - test time */
   XBT_INFO("sleep_start_time : %f , sleep_test_time : %f", sleep_start_time, sleep_test_time);
 
   MSG_process_sleep(sleep_start_time); /* This process first sleeps for "start time" seconds.  */
 
   char mailbox[80];
-  snprintf(mailbox,79, "receiver-%d", id);
+  snprintf(mailbox, 79, "receiver-%d", id);
   while (1) {
     msg_task_t task = NULL;
     msg_comm_t comm = MSG_task_irecv(&task, mailbox); /* Then it posts asynchronous receives (@ref MSG_task_irecv) and*/
     XBT_INFO("Wait to receive a task");
 
-    if (sleep_test_time > 0) {               /* - if "test_time" is set to 0, wait on @ref MSG_comm_wait */
-      while (MSG_comm_test(comm) == 0) {     /* - Call @ref MSG_comm_test every "test_time" otherwise */
+    if (sleep_test_time > 0) {           /* - if "test_time" is set to 0, wait on @ref MSG_comm_wait */
+      while (MSG_comm_test(comm) == 0) { /* - Call @ref MSG_comm_test every "test_time" otherwise */
         MSG_process_sleep(sleep_test_time);
       }
     } else {
@@ -106,19 +106,20 @@ static int receiver(int argc, char *argv[])
   return 0;
 }
 
-int main(int argc, char *argv[])
+int main(int argc, charargv[])
 {
   MSG_init(&argc, argv);
   xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
-             "\tExample: %s msg_platform.xml msg_deployment.xml\n", argv[0], argv[0]);
+                       "\tExample: %s msg_platform.xml msg_deployment.xml\n",
+             argv[0], argv[0]);
 
-  MSG_create_environment(argv[1]);/* - Load the platform description */
+  MSG_create_environment(argv[1]); /* - Load the platform description */
 
   MSG_function_register("sender", sender);
   MSG_function_register("receiver", receiver);
-  MSG_launch_application(argv[2]);/* - Deploy the sender and receiver processes */
+  MSG_launch_application(argv[2]); /* - Deploy the sender and receiver processes */
 
-  msg_error_t res = MSG_main();  /* - Run the simulation */
+  msg_error_t res = MSG_main(); /* - Run the simulation */
 
   XBT_INFO("Simulation time %g", MSG_get_clock());
 
similarity index 88%
rename from examples/msg/async-wait/async-wait.tesh
rename to teshsuite/msg/async-wait/async-wait.tesh
index ad11802..c68fb5a 100644 (file)
@@ -2,7 +2,7 @@
 
 p Test1 MSG_comm_test() with Sleep_sender > Sleep_receiver
 
-$ $SG_TEST_EXENV ${bindir:=.}/async-wait ${srcdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/../msg/async-wait/async-wait_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/async-wait ${platfdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/async-wait_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sender@Tremblay) sleep_start_time : 5.000000 , sleep_test_time : 0.100000
 > [  0.000000] (2:receiver@Ruby) sleep_start_time : 1.000000 , sleep_test_time : 0.100000
 > [  1.000000] (2:receiver@Ruby) Wait to receive a task
@@ -29,7 +29,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/async-wait ${srcdir:=.}/small_platform_fatpipe.xml
 
 p Test2 MSG_comm_test() with Sleep_sender < Sleep_receiver
 
-$ $SG_TEST_EXENV ${bindir:=.}/async-wait ${srcdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/../msg/async-wait/async-wait2_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/async-wait ${platfdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/async-wait2_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sender@Tremblay) sleep_start_time : 1.000000 , sleep_test_time : 0.100000
 > [  0.000000] (2:receiver@Ruby) sleep_start_time : 5.000000 , sleep_test_time : 0.100000
 > [  1.000000] (1:sender@Tremblay) Send to receiver-0 Task_0
@@ -56,7 +56,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/async-wait ${srcdir:=.}/small_platform_fatpipe.xml
 
 p Test1 MSG_comm_wait() with Sleep_sender > Sleep_receiver
 
-$ $SG_TEST_EXENV ${bindir:=.}/async-wait ${srcdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/../msg/async-wait/async-wait3_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/async-wait ${platfdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/async-wait3_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sender@Tremblay) sleep_start_time : 5.000000 , sleep_test_time : 0.000000
 > [  0.000000] (2:receiver@Ruby) sleep_start_time : 1.000000 , sleep_test_time : 0.000000
 > [  1.000000] (2:receiver@Ruby) Wait to receive a task
@@ -84,7 +84,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/async-wait ${srcdir:=.}/small_platform_fatpipe.xml
 
 p Test2 MSG_comm_wait() with Sleep_sender < Sleep_receiver
 
-$ $SG_TEST_EXENV ${bindir:=.}/async-wait ${srcdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/../msg/async-wait/async-wait4_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/async-wait ${platfdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/async-wait4_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sender@Tremblay) sleep_start_time : 1.000000 , sleep_test_time : 0.000000
 > [  0.000000] (2:receiver@Ruby) sleep_start_time : 5.000000 , sleep_test_time : 0.000000
 > [  1.000000] (1:sender@Tremblay) Send to receiver-0 Task_0
similarity index 71%
rename from examples/msg/async-waitall/async-waitall.c
rename to teshsuite/msg/async-waitall/async-waitall.c
index c828b13..b586690 100644 (file)
@@ -7,28 +7,28 @@
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_waitall, "Messages specific for this msg example");
 
-static int sender(int argc, char *argv[])
+static int sender(int argc, charargv[])
 {
-  xbt_assert(argc==5,"This function expects 4 parameters from the XML deployment file");
-  long number_of_tasks = xbt_str_parse_int(argv[1], "Invalid amount of tasks: %s");
+  xbt_assert(argc == 5, "This function expects 4 parameters from the XML deployment file");
+  long number_of_tasks  = xbt_str_parse_int(argv[1], "Invalid amount of tasks: %s");
   double task_comp_size = xbt_str_parse_double(argv[2], "Invalid computational size: %s");
   double task_comm_size = xbt_str_parse_double(argv[3], "Invalid communication size: %s");
-  long receivers_count = xbt_str_parse_int(argv[4], "Invalid amount of receivers: %s");
+  long receivers_count  = xbt_str_parse_int(argv[4], "Invalid amount of receivers: %s");
 
-  msg_comm_t *comm = xbt_new(msg_comm_t, number_of_tasks + receivers_count);
+  msg_comm_tcomm = xbt_new(msg_comm_t, number_of_tasks + receivers_count);
   for (int i = 0; i < number_of_tasks; i++) {
     char mailbox[80];
     char taskname[80];
-    snprintf(mailbox,79, "receiver-%ld", i % receivers_count);
-    snprintf(taskname,79, "Task_%d", i);
+    snprintf(mailbox, 79, "receiver-%ld", i % receivers_count);
+    snprintf(taskname, 79, "Task_%d", i);
     msg_task_t task = MSG_task_create(taskname, task_comp_size, task_comm_size, NULL);
-    comm[i] = MSG_task_isend(task, mailbox);
+    comm[i]         = MSG_task_isend(task, mailbox);
     XBT_INFO("Send to receiver-%ld Task_%d", i % receivers_count, i);
   }
   for (int i = 0; i < receivers_count; i++) {
     char mailbox[80];
-    snprintf(mailbox,79, "receiver-%ld", i % receivers_count);
-    msg_task_t task = MSG_task_create("finalize", 0, 0, 0);
+    snprintf(mailbox, 79, "receiver-%ld", i % receivers_count);
+    msg_task_t task           = MSG_task_create("finalize", 0, 0, 0);
     comm[i + number_of_tasks] = MSG_task_isend(task, mailbox);
     XBT_INFO("Send to receiver-%ld finalize", i % receivers_count);
   }
@@ -43,13 +43,13 @@ static int sender(int argc, char *argv[])
   return 0;
 }
 
-static int receiver(int argc, char *argv[])
+static int receiver(int argc, charargv[])
 {
-  xbt_assert(argc==2,"This function expects 1 parameter from the XML deployment file");
+  xbt_assert(argc == 2, "This function expects 1 parameter from the XML deployment file");
   int id = xbt_str_parse_int(argv[1], "Any process of this example must have a numerical name, not %s");
 
   char mailbox[80];
-  snprintf(mailbox,79, "receiver-%d", id);
+  snprintf(mailbox, 79, "receiver-%d", id);
 
   MSG_process_sleep(10);
   while (1) {
@@ -74,11 +74,12 @@ static int receiver(int argc, char *argv[])
   return 0;
 }
 
-int main(int argc, char *argv[])
+int main(int argc, charargv[])
 {
   MSG_init(&argc, argv);
   xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
-             "\tExample: %s msg_platform.xml msg_deployment.xml\n", argv[0], argv[0]);
+                       "\tExample: %s msg_platform.xml msg_deployment.xml\n",
+             argv[0], argv[0]);
 
   MSG_create_environment(argv[1]);
   MSG_function_register("sender", sender);
@@ -2,7 +2,7 @@
 p Test1 MSG_comm_waitall() for sender
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/async-waitall ${srcdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/../msg/async-waitall/async-waitall_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/async-waitall ${platfdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/async-waitall_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sender@Tremblay) Send to receiver-0 Task_0
 > [  0.000000] (1:sender@Tremblay) Send to receiver-0 Task_1
 > [  0.000000] (1:sender@Tremblay) Send to receiver-0 Task_2
similarity index 72%
rename from examples/msg/async-waitany/async-waitany.c
rename to teshsuite/msg/async-waitany/async-waitany.c
index 95b92aa..2ae48e6 100644 (file)
@@ -7,14 +7,14 @@
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_waitany, "Messages specific for this msg example");
 
-static int sender(int argc, char *argv[])
+static int sender(int argc, charargv[])
 {
-  xbt_assert(argc==6, "This function expects 5 parameters from the XML deployment file");
-  long number_of_tasks = xbt_str_parse_int(argv[1], "Invalid amount of tasks: %s");
+  xbt_assert(argc == 6, "This function expects 5 parameters from the XML deployment file");
+  long number_of_tasks  = xbt_str_parse_int(argv[1], "Invalid amount of tasks: %s");
   double task_comp_size = xbt_str_parse_double(argv[2], "Invalid computational size: %s");
   double task_comm_size = xbt_str_parse_double(argv[3], "Invalid communication size: %s");
-  long receivers_count = xbt_str_parse_int(argv[4], "Invalid amount of receivers: %s");
-  int diff_com = xbt_str_parse_int(argv[5], "Invalid value for diff_comm: %s");
+  long receivers_count  = xbt_str_parse_int(argv[4], "Invalid amount of receivers: %s");
+  int diff_com          = xbt_str_parse_int(argv[5], "Invalid value for diff_comm: %s");
 
   xbt_dynar_t comms = xbt_dynar_new(sizeof(msg_comm_t), NULL);
   /* First pack the communications in the dynar */
@@ -23,8 +23,8 @@ static int sender(int argc, char *argv[])
 
     char mailbox[80];
     char taskname[80];
-    snprintf(mailbox,79, "receiver-%ld", (i % receivers_count));
-    snprintf(taskname,79, "Task_%d", i);
+    snprintf(mailbox, 79, "receiver-%ld", (i % receivers_count));
+    snprintf(taskname, 79, "Task_%d", i);
     msg_task_t task = MSG_task_create(taskname, task_comp_size, task_comm_size / coef, NULL);
     msg_comm_t comm = MSG_task_isend(task, mailbox);
     xbt_dynar_push_as(comms, msg_comm_t, comm);
@@ -41,8 +41,8 @@ static int sender(int argc, char *argv[])
 
   /* Here we are waiting for the completion of all tasks */
   for (int i = 0; i < receivers_count; i++) {
-    msg_task_t task = NULL;
-    msg_comm_t comm = MSG_task_irecv(&task, "finalize");
+    msg_task_t task      = NULL;
+    msg_comm_t comm      = MSG_task_irecv(&task, "finalize");
     msg_error_t res_wait = MSG_comm_wait(comm, -1);
     xbt_assert(res_wait == MSG_OK, "MSG_comm_wait failed");
     MSG_comm_destroy(comm);
@@ -53,21 +53,21 @@ static int sender(int argc, char *argv[])
   return 0;
 }
 
-static int receiver(int argc, char *argv[])
+static int receiver(int argc, charargv[])
 {
-  xbt_assert(argc==3, "This function expects 2 parameters from the XML deployment file");
-  int id = xbt_str_parse_int(argv[1], "ID should be numerical, not %s");
-  int task_amount = xbt_str_parse_int(argv[2], "Invalid amount of tasks: %s");
-  msg_task_t *tasks = xbt_new(msg_task_t, task_amount);
+  xbt_assert(argc == 3, "This function expects 2 parameters from the XML deployment file");
+  int id            = xbt_str_parse_int(argv[1], "ID should be numerical, not %s");
+  int task_amount   = xbt_str_parse_int(argv[2], "Invalid amount of tasks: %s");
+  msg_task_ttasks = xbt_new(msg_task_t, task_amount);
   xbt_dynar_t comms = xbt_dynar_new(sizeof(msg_comm_t), NULL);
 
   char mailbox[80];
-  snprintf(mailbox,79, "receiver-%d", id);
+  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);
-    tasks[i] = NULL;
+    tasks[i]        = NULL;
     msg_comm_t comm = MSG_task_irecv(&tasks[i], mailbox);
     xbt_dynar_push_as(comms, msg_comm_t, comm);
   }
@@ -94,11 +94,12 @@ static int receiver(int argc, char *argv[])
   return 0;
 }
 
-int main(int argc, char *argv[])
+int main(int argc, charargv[])
 {
   MSG_init(&argc, argv);
   xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
-                  "\tExample: %s msg_platform.xml msg_deployment.xml\n", argv[0], argv[0]);
+                       "\tExample: %s msg_platform.xml msg_deployment.xml\n",
+             argv[0], argv[0]);
 
   MSG_create_environment(argv[1]);
 
@@ -3,7 +3,7 @@
 p Testing the MSG_comm_waitany function
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/async-waitany ${srcdir:=.}/small_platform.xml ${srcdir:=.}/../msg/async-waitany/async-waitany_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/async-waitany ${platfdir:=.}/small_platform.xml ${srcdir:=.}/async-waitany_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:sender@Tremblay) Send to receiver-0 Task_0 comm_size 1000000.000000
 > [  0.000000] (1:sender@Tremblay) Send to receiver-1 Task_1 comm_size 1000000.000000
 > [  0.000000] (1:sender@Tremblay) Send to receiver-0 Task_2 comm_size 1000000.000000
index 3ff450c..a06a44f 100644 (file)
@@ -1,6 +1,6 @@
 #! ./tesh
 
-$ $SG_TEST_EXENV ${bindir:=.}/cloud-sharing$EXEEXT --log=root.fmt:%m%n ${srcdir:=.}/../../../examples/platforms/cluster_backbone.xml
+$ $SG_TEST_EXENV ${bindir:=.}/cloud-sharing$EXEEXT --log=root.fmt:%m%n ${platfdir}/cluster_backbone.xml
 > # TEST ON SINGLE-CORE PMs
 > ## Check computation on regular PMs
 > ### Test '(o)1'. A task on a regular PM
similarity index 75%
rename from examples/msg/energy-ptask/energy-ptask.c
rename to teshsuite/msg/energy-ptask/energy-ptask.c
index d368bb1..8a41939 100644 (file)
@@ -3,8 +3,8 @@
 /* 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 "simgrid/plugins/energy.h"
+#include "simgrid/msg.h"
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, "Messages specific for this msg example");
 
@@ -16,26 +16,26 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, "Messages specific for this msg example")
  *   interfaces, but it's not possible ATM).
  */
 
-static int runner(int argc, char *argv[])
+static int runner(int argc, charargv[])
 {
   /* Retrieve the list of all hosts as an array of hosts */
-  int hosts_count = MSG_get_host_number();
-  msg_host_t *hosts = xbt_dynar_to_array(MSG_hosts_as_dynar());
+  int hosts_count   = MSG_get_host_number();
+  msg_host_thosts = xbt_dynar_to_array(MSG_hosts_as_dynar());
 
   XBT_INFO("First, build a classical parallel task, with 1 Gflop to execute on each node, "
            "and 10MB to exchange between each pair");
-  double *computation_amounts = xbt_new0(double, hosts_count);
-  double *communication_amounts = xbt_new0(double, hosts_count * hosts_count);
+  double* computation_amounts   = xbt_new0(double, hosts_count);
+  double* communication_amounts = xbt_new0(double, hosts_count* hosts_count);
 
-  for (int i = 0; i < hosts_count; i++)
+  for (int i               = 0; i < hosts_count; i++)
     computation_amounts[i] = 1e9; // 1 Gflop
 
   for (int i = 0; i < hosts_count; i++)
-    for (int j = i + 1; j < hosts_count; j++)
+    for (int j                                   = i + 1; j < hosts_count; j++)
       communication_amounts[i * hosts_count + j] = 1e7; // 10 MB
 
   msg_task_t ptask =
-    MSG_parallel_task_create("parallel task", hosts_count, hosts, computation_amounts, communication_amounts, NULL);
+      MSG_parallel_task_create("parallel task", hosts_count, hosts, computation_amounts, communication_amounts, NULL);
   MSG_parallel_task_execute(ptask);
   MSG_task_destroy(ptask);
   xbt_free(communication_amounts);
@@ -59,28 +59,29 @@ static int runner(int argc, char *argv[])
 
   XBT_INFO("Then, build a parallel task involving only computations and no communication (1 Gflop per node)");
   computation_amounts = xbt_new0(double, hosts_count);
-  for (int i = 0; i < hosts_count; i++)
+  for (int i               = 0; i < hosts_count; i++)
     computation_amounts[i] = 1e9; // 1 Gflop
-  ptask = MSG_parallel_task_create("parallel exec", hosts_count, hosts, computation_amounts, NULL/* no comm */, NULL);
+  ptask = MSG_parallel_task_create("parallel exec", hosts_count, hosts, computation_amounts, NULL /* no comm */, NULL);
   MSG_parallel_task_execute(ptask);
   MSG_task_destroy(ptask);
   xbt_free(computation_amounts);
 
   XBT_INFO("Then, build a parallel task with no computation nor communication (synchro only)");
-  computation_amounts = xbt_new0(double, hosts_count);
-  communication_amounts = xbt_new0(double, hosts_count * hosts_count); /* memset to 0 by xbt_new0 */
-  ptask = MSG_parallel_task_create("parallel sync", hosts_count, hosts, computation_amounts, communication_amounts, NULL);
+  computation_amounts   = xbt_new0(double, hosts_count);
+  communication_amounts = xbt_new0(double, hosts_count* hosts_count); /* memset to 0 by xbt_new0 */
+  ptask =
+      MSG_parallel_task_create("parallel sync", hosts_count, hosts, computation_amounts, communication_amounts, NULL);
   MSG_parallel_task_execute(ptask);
   MSG_task_destroy(ptask);
   xbt_free(communication_amounts);
   xbt_free(computation_amounts);
 
   XBT_INFO("Finally, trick the ptask to do a 'remote execution', on host %s", MSG_host_get_name(hosts[1]));
-  computation_amounts = xbt_new0(double, 1);
+  computation_amounts    = xbt_new0(double, 1);
   computation_amounts[0] = 1e9; // 1 Gflop
-  msg_host_t *remote = xbt_new(msg_host_t,1);
-  remote[0] = hosts[1];
-  ptask = MSG_parallel_task_create("remote exec", 1, remote, computation_amounts, NULL/* no comm */, NULL);
+  msg_host_t* remote     = xbt_new(msg_host_t, 1);
+  remote[0]              = hosts[1];
+  ptask = MSG_parallel_task_create("remote exec", 1, remote, computation_amounts, NULL /* no comm */, NULL);
   MSG_parallel_task_execute(ptask);
   MSG_task_destroy(ptask);
   xbt_free(remote);
@@ -91,7 +92,7 @@ static int runner(int argc, char *argv[])
   return 0;
 }
 
-int main(int argc, char *argv[])
+int main(int argc, charargv[])
 {
   MSG_init(&argc, argv);
   MSG_config("host/model", "ptask_L07");
@@ -99,14 +100,14 @@ int main(int argc, char *argv[])
   xbt_assert(argc <= 3, "1Usage: %s <platform file> [--energy]", argv[0]);
   xbt_assert(argc >= 2, "2Usage: %s <platform file> [--energy]", argv[0]);
 
-  if(argc == 3 && argv[2][2] == 'e')
+  if (argc == 3 && argv[2][2] == 'e')
     sg_host_energy_plugin_init();
 
   MSG_create_environment(argv[1]);
 
   /* Pick a process, no matter which, from the platform file */
   xbt_dynar_t all_hosts = MSG_hosts_as_dynar();
-  msg_host_t first_host = xbt_dynar_getfirst_as(all_hosts,msg_host_t);
+  msg_host_t first_host = xbt_dynar_getfirst_as(all_hosts, msg_host_t);
   xbt_dynar_free(&all_hosts);
 
   MSG_process_create("test", runner, NULL, first_host);
similarity index 88%
rename from examples/msg/energy-ptask/energy-ptask.tesh
rename to teshsuite/msg/energy-ptask/energy-ptask.tesh
index 6414155..1a10204 100644 (file)
@@ -1,6 +1,6 @@
 #! ./tesh
 
-$ ${bindir:=.}/energy-ptask/energy-ptask$EXEEXT ${srcdir:=.}/../platforms/energy_platform.xml --energy "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/energy-ptask$EXEEXT ${platfdir:=.}/energy_platform.xml --energy "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
 > [  0.000000] (1:test@MyHost1) First, build a classical parallel task, with 1 Gflop to execute on each node, and 10MB to exchange between each pair
 > [300.000000] (1:test@MyHost1) We can do the same with a timeout of one second enabled.
index a7a5408..4427c44 100644 (file)
@@ -1,5 +1,5 @@
 ! output sort
-$ ./get_sender  ${srcdir:=.}/../../../examples/platforms/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./get_sender  ${platfdir}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:send@Tremblay) Sending
 > [  0.000000] (2:receive@Tremblay) Receiving
 > [  0.000195] (2:receive@Tremblay) Got a message sent by 'send'
index 9b66f65..633fdf8 100644 (file)
@@ -1,5 +1,5 @@
 
-$ ./host_on_off ${srcdir:=.}/../../../examples/platforms/small_platform.xml
+$ ./host_on_off ${platfdir}/small_platform.xml
 > [Tremblay:master:(1) 0.000000] [msg_test/INFO] Sending "task on"
 > [Jupiter:slave:(2) 0.824497] [msg_test/INFO] Task "task on" done
 > [Tremblay:master:(1) 1.169155] [msg_test/INFO] Sending "task off"
index 5d5d220..763d9b6 100644 (file)
@@ -1,5 +1,5 @@
 
-$ ./host_on_off_processes ${srcdir:=.}/../../../examples/platforms/small_platform.xml 1 --log=no_loc
+$ ./host_on_off_processes ${platfdir}/small_platform.xml 1 --log=no_loc
 > [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO] Test 1:
 > [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO]   Create a process on Jupiter
 > [Jupiter:process_daemon:(2) 0.000000] [msg_test/INFO]   Start daemon on Jupiter (76296000.000000)
@@ -12,7 +12,7 @@ $ ./host_on_off_processes ${srcdir:=.}/../../../examples/platforms/small_platfor
 > [Tremblay:test_launcher:(1) 13.000000] [msg_test/INFO]   Test done. See you!
 > [13.000000] [msg_test/INFO] Simulation time 13
 
-$ ./host_on_off_processes ${srcdir:=.}/../../../examples/platforms/small_platform.xml 2 --log=no_loc
+$ ./host_on_off_processes ${platfdir}/small_platform.xml 2 --log=no_loc
 > [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO] Test 2:
 > [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO]   Turn off Jupiter
 > [0.000000] [simix_process/WARNING] Cannot launch process 'process_daemon' on failed host 'Jupiter'
@@ -24,7 +24,7 @@ $ ./host_on_off_processes ${srcdir:=.}/../../../examples/platforms/small_platfor
 > [Tremblay:test_launcher:(1) 20.000000] [msg_test/INFO]   Test done. See you!
 > [20.000000] [msg_test/INFO] Simulation time 20
 
-$ ./host_on_off_processes ${srcdir:=.}/../../../examples/platforms/small_platform.xml 3 --log=no_loc
+$ ./host_on_off_processes ${platfdir}/small_platform.xml 3 --log=no_loc
 > [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO] Test 3:
 > [Jupiter:process_sleep:(2) 0.000000] [msg_test/INFO]   I'm alive but I should sleep
 > [Jupiter:process_sleep:(2) 10.000000] [msg_test/INFO]   I'm alive but I should sleep
@@ -43,7 +43,7 @@ $ ./host_on_off_processes ${srcdir:=.}/../../../examples/platforms/small_platfor
 > [Tremblay:test_launcher:(1) 10100.000000] [msg_test/INFO]   Test done. See you!
 > [10100.000000] [msg_test/INFO] Simulation time 10100
 
-$ ./host_on_off_processes ${srcdir:=.}/../../../examples/platforms/small_platform.xml 4 --log=no_loc
+$ ./host_on_off_processes ${platfdir}/small_platform.xml 4 --log=no_loc
 > [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO] Test 4 (turn off src during a communication) : Create a Process/task to make a communication between Jupiter and Tremblay and turn off Jupiter during the communication
 > [Tremblay:commRX:(2) 10.000000] [msg_test/INFO]   Start RX
 > [Jupiter:commTX:(3) 10.000000] [msg_test/INFO]   Start TX
@@ -55,7 +55,7 @@ $ ./host_on_off_processes ${srcdir:=.}/../../../examples/platforms/small_platfor
 > [Tremblay:commRX:(2) 20.000000] [msg_test/INFO]   RX Done
 > [20.000000] [msg_test/INFO] Simulation time 20
 
-$ ./host_on_off_processes ${srcdir:=.}/../../../examples/platforms/small_platform.xml 5 --log=no_loc
+$ ./host_on_off_processes ${platfdir}/small_platform.xml 5 --log=no_loc
 > [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO] Test 5 (turn off dest during a communication : Create a Process/task to make a communication between Tremblay and Jupiter and turn off Jupiter during the communication
 > [Jupiter:commRX:(2) 10.000000] [msg_test/INFO]   Start RX
 > [Tremblay:commTX:(3) 10.000000] [msg_test/INFO]   Start TX
@@ -66,7 +66,7 @@ $ ./host_on_off_processes ${srcdir:=.}/../../../examples/platforms/small_platfor
 > [Tremblay:commTX:(3) 40.000000] [msg_test/INFO]   TX done
 > [40.000000] [msg_test/INFO] Simulation time 40
 
-$ ./host_on_off_processes ${srcdir:=.}/../../../examples/platforms/small_platform.xml 6 --log=no_loc
+$ ./host_on_off_processes ${platfdir}/small_platform.xml 6 --log=no_loc
 > [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO] Test 6: Turn on Jupiter, assign a VM on Jupiter, launch a process inside the VM, and turn off the node
 > [vm0:process_daemon:(2) 0.000000] [msg_test/INFO]   Start daemon on vm0 (76296000.000000)
 > [vm0:process_daemon:(2) 0.000000] [msg_test/INFO]   Execute daemon
index 271bae3..b595980 100644 (file)
@@ -1,4 +1,4 @@
-$ ./host_on_off_recv ${srcdir:=.}/../../../examples/platforms/small_platform.xml
+$ ./host_on_off_recv ${platfdir}/small_platform.xml
 > [Tremblay:master:(1) 0.000000] [msg_test/INFO] Master starting
 > [Jupiter:slave:(2) 0.000000] [msg_test/INFO] Slave receiving
 > [Tremblay:master:(1) 1.000000] [msg_test/INFO] Turning off the slave host
diff --git a/teshsuite/msg/io-raw-storage/io-raw-storage.c b/teshsuite/msg/io-raw-storage/io-raw-storage.c
new file mode 100644 (file)
index 0000000..c9225d2
--- /dev/null
@@ -0,0 +1,68 @@
+/* Copyright (c) 2006-2016. 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"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(storage, "Messages specific for this simulation");
+
+static int host(int argc, char* argv[])
+{
+  const char* host_name = MSG_host_get_name(MSG_host_self());
+
+  /* - Display information on the disks mounted by the current host */
+  XBT_INFO("*** Storage info on %s ***", host_name);
+
+  xbt_dict_cursor_t cursor = NULL;
+  char* mount_name;
+  char* storage_name;
+
+  /* - Retrieve all mount points of current host */
+  xbt_dict_t storage_list = MSG_host_get_mounted_storage_list(MSG_host_self());
+
+  /* - For each disk mounted on host, display disk name and mount point */
+  xbt_dict_foreach (storage_list, cursor, mount_name, storage_name)
+    XBT_INFO("Storage name: %s, mount name: %s", storage_name, mount_name);
+
+  xbt_dict_free(&storage_list);
+
+  /* - Write 200,000 bytes on Disk4 */
+  msg_storage_t storage = MSG_storage_get_by_name("Disk4");
+  sg_size_t write       = MSG_storage_write(storage, 200000); // Write 200,000 bytes
+  XBT_INFO("Wrote %llu bytes on 'Disk4'", write);
+
+  /*  - Now read 200,000 bytes */
+  sg_size_t read = MSG_storage_read(storage, 200000);
+  XBT_INFO("Read %llu bytes on 'Disk4'", read);
+
+  /* - Attach some user data to disk1 */
+  XBT_INFO("*** Get/set data for storage element: Disk4 ***");
+
+  char* data = MSG_storage_get_data(storage);
+
+  XBT_INFO("Get storage data: '%s'", data);
+
+  MSG_storage_set_data(storage, xbt_strdup("Some user data"));
+  data = MSG_storage_get_data(storage);
+  XBT_INFO("Set and get data: '%s'", data);
+  xbt_free(data);
+
+  return 1;
+}
+
+int main(int argc, char* argv[])
+{
+  MSG_init(&argc, argv);
+
+  MSG_create_environment(argv[1]);
+  MSG_function_register("host", host);
+  xbt_dynar_t hosts = MSG_hosts_as_dynar();
+  MSG_process_create(NULL, host, NULL, xbt_dynar_get_as(hosts, 3, msg_host_t));
+  xbt_dynar_free(&hosts);
+
+  msg_error_t res = MSG_main();
+  XBT_INFO("Simulated time: %g", MSG_get_clock());
+
+  return res != MSG_OK;
+}
diff --git a/teshsuite/msg/io-raw-storage/io-raw-storage.tesh b/teshsuite/msg/io-raw-storage/io-raw-storage.tesh
new file mode 100644 (file)
index 0000000..52e2412
--- /dev/null
@@ -0,0 +1,12 @@
+#! ./tesh
+
+$ ./io-raw-storage$EXEEXT ${platfdir}/storage/storage.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+> [  0.000000] (1:@denise) *** Storage info on denise ***
+> [  0.000000] (1:@denise) Storage name: Disk2, mount name: c:
+> [  0.000000] (1:@denise) Storage name: Disk4, mount name: /home
+> [  0.003333] (1:@denise) Wrote 200000 bytes on 'Disk4'
+> [  0.004333] (1:@denise) Read 200000 bytes on 'Disk4'
+> [  0.004333] (1:@denise) *** Get/set data for storage element: Disk4 ***
+> [  0.004333] (1:@denise) Get storage data: '(null)'
+> [  0.004333] (1:@denise) Set and get data: 'Some user data'
+> [  0.004333] (0:maestro@) Simulated time: 0.00433333
@@ -2,7 +2,7 @@
 
 p Testing the process daemonization feature of MSG
 
-$ $SG_TEST_EXENV ${bindir:=.}/process-daemon ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/process-daemon ${platfdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:worker@Boivin) Let's do some work (for 10 sec on Boivin).
 > [  0.000000] (2:daemon@Tremblay) Hello from the infinite loop
 > [  3.000000] (2:daemon@Tremblay) Hello from the infinite loop
similarity index 62%
rename from examples/msg/process-kill/process-kill.c
rename to teshsuite/msg/process-kill/process-kill.c
index fe02ef8..e9ac481 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007, 2009-2016. The SimGrid Team. All rights reserved.    */
+/* Copyright (c) 2007, 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. */
@@ -7,28 +7,28 @@
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_process_kill, "Messages specific for this msg example");
 
-static int victim(int argc, char *argv[])
+static int victim_fun(XBT_ATTRIB_UNUSED int argc, XBT_ATTRIB_UNUSED char* argv[])
 {
   XBT_INFO("Hello!");
   XBT_INFO("Suspending myself");
   MSG_process_suspend(MSG_process_self()); /* - First suspend itself */
   XBT_INFO("OK, OK. Let's work");          /* - Then is resumed and start to execute a task */
   MSG_task_execute(MSG_task_create("work", 1e9, 0, NULL));
-  XBT_INFO("Bye!");  /* - But will never reach the end of it */
+  XBT_INFO("Bye!"); /* - But will never reach the end of it */
   return 0;
 }
 
-static int killer(int argc, char *argv[])
+static int killer(XBT_ATTRIB_UNUSED int argc, XBT_ATTRIB_UNUSED char* argv[])
 {
-  XBT_INFO("Hello!");         /* - First start a victim process */
-  msg_process_t poor_victim = MSG_process_create("victim", victim, NULL, MSG_host_by_name("Fafard"));
+  XBT_INFO("Hello!"); /* - First start a victim process */
+  msg_process_t victim = MSG_process_create("victim", victim_fun, NULL, MSG_host_by_name("Fafard"));
   MSG_process_sleep(10.0);
 
-  XBT_INFO("Resume process"); /* - Resume it from its suspended state */
-  MSG_process_resume(poor_victim);
+  XBT_INFO("Resume victim"); /* - Resume it from its suspended state */
+  MSG_process_resume(victim);
 
-  XBT_INFO("Kill process");   /* - and then kill it */
-  MSG_process_kill(poor_victim);
+  XBT_INFO("Kill victim"); /* - and then kill it */
+  MSG_process_kill(victim);
 
   XBT_INFO("OK, goodbye now. I commit a suicide.");
   MSG_process_kill(MSG_process_self());
@@ -37,12 +37,12 @@ static int killer(int argc, char *argv[])
   return 0;
 }
 
-int main(int argc, char *argv[])
+int main(int argc, charargv[])
 {
   MSG_init(&argc, argv);
   xbt_assert(argc == 2, "Usage: %s platform_file\n\tExample: %s msg_platform.xml\n", argv[0], argv[0]);
 
-  MSG_create_environment(argv[1]);   /* - Load the platform description */
+  MSG_create_environment(argv[1]); /* - Load the platform description */
   /* - Create and deploy killer process, that will create the victim process  */
   MSG_process_create("killer", killer, NULL, MSG_host_by_name("Tremblay"));
 
similarity index 58%
rename from examples/msg/process-kill/process-kill.tesh
rename to teshsuite/msg/process-kill/process-kill.tesh
index abe9ae6..7b20fb9 100644 (file)
@@ -2,11 +2,11 @@
 
 p Testing a MSG_process_kill function
 
-$ $SG_TEST_EXENV ${bindir:=.}/process-kill ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/process-kill ${platfdir}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:killer@Tremblay) Hello!
 > [  0.000000] (2:victim@Fafard) Hello!
 > [  0.000000] (2:victim@Fafard) Suspending myself
-> [ 10.000000] (1:killer@Tremblay) Resume process
-> [ 10.000000] (1:killer@Tremblay) Kill process
+> [ 10.000000] (1:killer@Tremblay) Resume victim
+> [ 10.000000] (1:killer@Tremblay) Kill victim
 > [ 10.000000] (1:killer@Tremblay) OK, goodbye now. I commit a suicide.
 > [ 10.000000] (0:maestro@) Simulation time 10
@@ -11,13 +11,13 @@ msg_bar_t barrier;
 static msg_process_t controlled_process = NULL;
 
 /* The Emigrant process will be moved from host to host. */
-static int emigrant(int argc, char *argv[])
+static int emigrant(int argc, charargv[])
 {
   XBT_INFO("I'll look for a new job on another machine ('Boivin') where the grass is greener.");
-  MSG_process_migrate(MSG_process_self(), MSG_host_by_name("Boivin"));    /* - First, move to another host by myself */
+  MSG_process_migrate(MSG_process_self(), MSG_host_by_name("Boivin")); /* - First, move to another host by myself */
 
   XBT_INFO("Yeah, found something to do");
-  msg_task_t task = MSG_task_create("job", 98095000, 0, NULL);            /* - Execute some work there */
+  msg_task_t task = MSG_task_create("job", 98095000, 0, NULL); /* - Execute some work there */
   MSG_task_execute(task);
   MSG_task_destroy(task);
   MSG_process_sleep(2);
@@ -35,9 +35,9 @@ 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[])
+static int policeman(int argc, charargv[])
 {
-  XBT_INFO("Wait at the checkpoint.");  /* - block on the mutex+condition */
+  XBT_INFO("Wait at the checkpoint."); /* - block on the mutex+condition */
   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");
@@ -46,12 +46,12 @@ static int policeman(int argc, char *argv[])
   return 0;
 }
 
-int main(int argc, char *argv[])
+int main(int argc, charargv[])
 {
   MSG_init(&argc, argv);
   xbt_assert(argc == 2, "Usage: %s platform_file\n\tExample: %s msg_platform.xml\n", argv[0], argv[0]);
 
-  MSG_create_environment(argv[1]);  /* - Load the platform description */
+  MSG_create_environment(argv[1]); /* - Load the platform description */
   /* - Create and deploy the emigrant and policeman processes */
   MSG_process_create("emigrant", emigrant, NULL, MSG_get_host_by_name("Jacquelin"));
   MSG_process_create("policeman", policeman, NULL, MSG_get_host_by_name("Boivin"));
@@ -3,7 +3,7 @@
 p Testing the migration feature of MSG
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/process-migration ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/process-migration ${platfdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:emigrant@Jacquelin) I'll look for a new job on another machine ('Boivin') where the grass is greener.
 > [  0.000000] (1:emigrant@Boivin) Yeah, found something to do
 > [  0.000000] (2:policeman@Boivin) Wait at the checkpoint.
@@ -9,13 +9,13 @@
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_process_suspend, "Messages specific for this msg example");
 
 /* The Lazy guy only wants to sleep, but can be awaken by the dream_master process. */
-static int lazy_guy(int argc, char *argv[])
+static int lazy_guy(int argc, charargv[])
 {
   XBT_INFO("Nobody's watching me ? Let's go to sleep.");
-  MSG_process_suspend(MSG_process_self());       /* - Start by suspending itself */
+  MSG_process_suspend(MSG_process_self()); /* - Start by suspending itself */
   XBT_INFO("Uuuh ? Did somebody call me ?");
 
-  XBT_INFO("Going to sleep...");                 /* - Then repetitively go to sleep, but got awaken */
+  XBT_INFO("Going to sleep..."); /* - Then repetitively go to sleep, but got awaken */
   MSG_process_sleep(10.0);
   XBT_INFO("Mmm... waking up.");
 
@@ -33,22 +33,22 @@ static int lazy_guy(int argc, char *argv[])
 }
 
 /* The Dream master: */
-static int dream_master(int argc, char *argv[])
+static int dream_master(int argc, charargv[])
 {
   XBT_INFO("Let's create a lazy guy."); /* - Create a lazy_guy process */
   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 */
+  MSG_process_sleep(10.0); /* - Wait for 10 seconds */
   XBT_INFO("Let's wake the lazy guy up! >:) BOOOOOUUUHHH!!!!");
-  MSG_process_resume(lazy);             /* - Then wake up the lazy_guy */
+  MSG_process_resume(lazy); /* - Then wake up the lazy_guy */
 
-  MSG_process_sleep(5.0);               /* Repeat two times: */
+  MSG_process_sleep(5.0); /* Repeat two times: */
   XBT_INFO("Suspend the lazy guy while he's sleeping...");
-  MSG_process_suspend(lazy);            /* - Suspend the lazy_guy while he's asleep */
+  MSG_process_suspend(lazy); /* - Suspend the lazy_guy while he's asleep */
   XBT_INFO("Let him finish his siesta.");
-  MSG_process_sleep(10.0);              /* - Wait for 10 seconds */
+  MSG_process_sleep(10.0); /* - Wait for 10 seconds */
   XBT_INFO("Wake up, lazy guy!");
-  MSG_process_resume(lazy);             /* - Then wake up the lazy_guy again */
+  MSG_process_resume(lazy); /* - Then wake up the lazy_guy again */
 
   MSG_process_sleep(5.0);
   XBT_INFO("Suspend again the lazy guy while he's sleeping...");
@@ -69,12 +69,12 @@ static int dream_master(int argc, char *argv[])
   return 0;
 }
 
-int main(int argc, char *argv[])
+int main(int argc, charargv[])
 {
   MSG_init(&argc, argv);
   xbt_assert(argc > 1, "Usage: %s platform_file\n\tExample: %s msg_platform.xml\n", argv[0], argv[0]);
 
-  MSG_create_environment(argv[1]);  /* - Load the platform description */
+  MSG_create_environment(argv[1]);                     /* - Load the platform description */
   MSG_function_register("dream_master", dream_master); /* - Create and deploy the dream_master */
   xbt_dynar_t hosts = MSG_hosts_as_dynar();
   MSG_process_create("dream_master", dream_master, NULL, xbt_dynar_getfirst_as(hosts, msg_host_t));
@@ -3,7 +3,7 @@
 p Testing the suspend/resume feature of MSG
 
 ! output sort 19
-$ $SG_TEST_EXENV ${bindir:=.}/process-suspend ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/process-suspend ${platfdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:dream_master@Boivin) Let's create a lazy guy.
 > [  0.000000] (2:Lazy@Boivin) Nobody's watching me ? Let's go to sleep.
 > [  0.000000] (1:dream_master@Boivin) Let's wait a little bit...
index dd4b383..d4d18cd 100644 (file)
@@ -1,5 +1,5 @@
 #! ./tesh
 
-$ $SG_TEST_EXENV ${bindir:=.}/process-yield ${srcdir:=.}/../../../examples/platforms/small_platform_fatpipe.xml ${srcdir:=.}/process-yield_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV ${bindir:=.}/process-yield ${platfdir}/small_platform_fatpipe.xml ${srcdir:=.}/process-yield_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:yielder@Tremblay) I yielded 10 times. Goodbye now!
 > [  0.000000] (2:yielder@Ruby) I yielded 15 times. Goodbye now!
index 1484263..51c99c2 100644 (file)
@@ -1,4 +1,4 @@
-$ ./task_destroy_cancel ${srcdir:=.}/../../../examples/platforms/small_platform.xml
+$ ./task_destroy_cancel ${platfdir}/small_platform.xml
 > [Tremblay:master:(1) 0.000000] [msg_test/INFO] Sending task: "normal"
 > [Jupiter:worker:(2) 0.169155] [msg_test/INFO] Handling task "normal"
 > [Tremblay:master:(1) 0.169155] [msg_test/INFO] Canceling task "cancel directly" directly
index 32db934..2680659 100644 (file)
@@ -1,3 +1,3 @@
-$ ./task_listen_from ${srcdir:=.}/../../../examples/platforms/small_platform.xml
+$ ./task_listen_from ${platfdir}/small_platform.xml
 > [Tremblay:tester:(1) 0.000000] [msg_test/INFO] MSG_task_listen_from returns() 1 (should return my pid, which is 1)
 > [Tremblay:tester:(1) 0.000000] [msg_test/INFO] MSG_task_listen returns()      1 (should return true, i.e. 1)
index 679e181..603a4a4 100644 (file)
@@ -1,4 +1,4 @@
-$ ./task_progress ${srcdir:=.}/../../../examples/platforms/small_platform.xml
+$ ./task_progress ${platfdir}/small_platform.xml
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
 > [Tremblay:sequential:(1) 0.000000] [msg_test/INFO] get the progress of simple before the task starts
 > [Tremblay:sequential:(1) 0.000000] [msg_test/INFO] Executing task: "simple"
index 58b9ad9..23a6f8d 100644 (file)
@@ -4,7 +4,7 @@ p c=cycle s=step p=priority h=host
 p Testing trace integration using trace_B.txt and test-hbp1-c0s0-c0s1.xml, test_trace:start == trace_cycle_0_step_0, test_trace:end < trace_cycle_0_step_1
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c0s0-c0s1.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c0s0-c0s1.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -16,7 +16,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp1-c0s1-c0s2.xml, test_trace:start == trace_cycle_0_step_1, test_trace:end < trace_cycle_0_step_2
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c0s1-c0s2.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c0s1-c0s2.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -28,7 +28,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp1-c0s2-c1s0.xml, test_trace:start == trace_cycle_0_step_2, test_trace:end < trace_cycle_1_step_0
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c0s2-c1s0.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c0s2-c1s0.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -40,7 +40,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp1-c0s0-c1s0.xml, test_trace:start == trace_cycle_0_step_0, test_trace:end < trace_cycle_1_step_0
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c0s0-c1s0.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c0s0-c1s0.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -52,7 +52,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp1-c0s2-c1s1.xml, test_trace:start == trace_cycle_0_step_2, test_trace:end < trace_cycle_1_step_1
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c0s2-c1s1.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c0s2-c1s1.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -64,7 +64,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp1-c0s1-c2s2.xml, test_trace:start == trace_cycle_0_step_1, test_trace:end < trace_cycle_2_step_2
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c0s1-c2s2.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c0s1-c2s2.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -76,7 +76,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp1-c1s1-c1s2.xml, test_trace:start == trace_cycle_1_step_1, test_trace:end < trace_cycle_1_step_2
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c1s1-c1s2.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c1s1-c1s2.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -88,7 +88,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp1-c1s1-c3s2.xml, test_trace:start == trace_cycle_1_step_1, test_trace:end < trace_cycle_3_step_2
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c1s1-c3s2.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1-c1s1-c3s2.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -100,7 +100,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp1.5-hbp1.5.xml, two process with same priority
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1.5-hbp1.5.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1.5-hbp1.5.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -116,7 +116,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp2.5-hbp1.5.xml, two process with different priority
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp2.5-hbp1.5.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp2.5-hbp1.5.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -132,7 +132,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp2.5-hbp1.5.xml, two process with different priority (included)
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability_included.xml  ${srcdir:=.}/test-hbp2.5-hbp1.5.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability_included.xml  ${srcdir:=.}/test-hbp2.5-hbp1.5.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -148,7 +148,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp1.0-hbp1.0-hbp1.0.xml, three process with same priority
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1.0-hbp1.0-hbp1.0.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1.0-hbp1.0-hbp1.0.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -168,7 +168,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp1.0-hbp3.0-hbp4.0.xml, three process with different priority
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1.0-hbp3.0-hbp4.0.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability.xml  ${srcdir:=.}/test-hbp1.0-hbp3.0-hbp4.0.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
@@ -188,7 +188,7 @@ $ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platfor
 p Testing trace integration using trace_B.txt and test-hbp1.0-hbp3.0-hbp4.0.xml, three process with different priority (included)
 
 ! output sort
-$ ./trace_integration ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability_included.xml  ${srcdir:=.}/test-hbp1.0-hbp3.0-hbp4.0.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./trace_integration ${platfdir}/two_hosts_platform_with_availability_included.xml  ${srcdir:=.}/test-hbp1.0-hbp3.0-hbp4.0.xml --cfg=host/model:compound --cfg=network/model:CM02 --cfg=cpu/optim:TI --log=simix.thresh:warning "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound'
 > [  0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02'
 > [  0.000000] (0:maestro@) Configuration change: Set 'cpu/optim' to 'TI'
index 539a53a..e753c24 100644 (file)
@@ -10,12 +10,12 @@ endforeach()
 ## Some need to be run with all factories, some need not tesh to run
 foreach(x actor concurrent_rw)
   set(tesh_files    ${tesh_files}    ${CMAKE_CURRENT_SOURCE_DIR}/${x}/${x}.tesh)
-  ADD_TESH_FACTORIES(tesh-s4u-${x} "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x} --cd ${CMAKE_BINARY_DIR}/teshsuite/s4u/${x} ${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x}/${x}.tesh)
+  ADD_TESH_FACTORIES(tesh-s4u-${x} "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/teshsuite/s4u/${x} ${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x}/${x}.tesh)
 endforeach()
 
 foreach(x host_on_off_wait listen_async pid storage_client_server)
   set(tesh_files    ${tesh_files}    ${CMAKE_CURRENT_SOURCE_DIR}/${x}/${x}.tesh)
-  ADD_TESH(tesh-s4u-${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x} --cd ${CMAKE_BINARY_DIR}/teshsuite/s4u/${x} ${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x}/${x}.tesh)
+  ADD_TESH(tesh-s4u-${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/teshsuite/s4u/${x} ${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x}/${x}.tesh)
 endforeach()
 
 # The output is not relevant
index 35fec0b..7719145 100644 (file)
@@ -1,4 +1,4 @@
-$ ./actor ${srcdir:=.}/../../../examples/platforms/small_platform.xml
+$ ./actor ${platfdir}/small_platform.xml
 > [Tremblay:worker:(2) 0.500000] [s4u_test/INFO] Worker started (PID:2, PPID:0)
 > [Tremblay:worker:(2) 0.500000] [s4u_test/INFO] Plop i am not suspended
 > [Tremblay:master:(1) 1.000000] [s4u_test/INFO] Actor (pid=1, ppid=0, name=master)
index 1d46abe..f12ea29 100644 (file)
@@ -1,4 +1,4 @@
-$ ./concurrent_rw$EXEEXT ${srcdir:=.}/../../../examples/platforms/storage/storage.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ ./concurrent_rw$EXEEXT ${platfdir}/storage/storage.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (host@bob) process 1 is writing!
 > [  0.000000] (host@bob) process 2 is writing!
 > [  0.000000] (host@bob) process 3 is writing!
index 039b942..4a13add 100644 (file)
@@ -1,4 +1,4 @@
-$ ./host_on_off_wait ${srcdir:=.}/../../../examples/platforms/small_platform.xml
+$ ./host_on_off_wait ${platfdir}/small_platform.xml
 > [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Master waiting
 > [Jupiter:worker:(2) 0.000000] [s4u_test/INFO] Worker waiting
 > [Tremblay:master:(1) 1.000000] [s4u_test/INFO] Turning off the worker host
index 9e83706..d196f6e 100644 (file)
@@ -1,4 +1,4 @@
-$ ./listen_async ${srcdir:=.}/../../../examples/platforms/small_platform.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ ./listen_async ${platfdir}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (test@Tremblay) Task listen works on regular mailboxes
 > [  0.000195] (test@Tremblay) Data successfully received from regular mailbox
 > [  0.000195] (test@Tremblay) Task listen works on asynchronous mailboxes
index 5826a28..2c2c1ca 100644 (file)
@@ -1,4 +1,4 @@
-$ ./pid ${srcdir:=.}/../../../examples/platforms/small_platform.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ ./pid ${platfdir}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (sendpid@Tremblay) Sending pid of "1".
 > [  0.000000] (sendpid@Tremblay) Sending pid of "2".
 > [  0.000000] (sendpid@Tremblay) Sending pid of "3".
@@ -12,7 +12,7 @@ $ ./pid ${srcdir:=.}/../../../examples/platforms/small_platform.xml "--log=root.
 > [  0.001206] (killall@Tremblay) Killing process "3".
 > [  0.001206] (sendpid@Tremblay) Process "3" killed.
 
-$ ./pid ${srcdir:=.}/../../../examples/platforms/small_platform.xml 2 "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ ./pid ${platfdir}/small_platform.xml 2 "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (sendpid@Tremblay) Sending pid of "2".
 > [  0.000000] (sendpid@Tremblay) Sending pid of "3".
 > [  0.000000] (sendpid@Tremblay) Sending pid of "4".
index 78598bc..9eb3c03 100644 (file)
@@ -4,6 +4,7 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "simgrid/s4u.hpp"
+#include "src/plugins/file_system/FileSystem.hpp"
 #include <string>
 #include <xbt/string.hpp>
 
@@ -58,7 +59,7 @@ static void hsm_put(const std::string& remote_host, const std::string& src, cons
 static void display_storage_content(simgrid::s4u::Storage* storage)
 {
   XBT_INFO("Print the content of the storage element: %s", storage->getCname());
-  std::map<std::string, sg_size_t>* content = storage->getContent();
+  std::map<std::string, sg_size_t>* content = storage->extension<simgrid::s4u::FileSystemStorageExt>()->getContent();
   if (not content->empty()) {
     for (auto const& entry : *content)
       XBT_INFO("\t%s size: %llu bytes", entry.first.c_str(), entry.second);
@@ -107,11 +108,8 @@ static void storage_info(simgrid::s4u::Host* host)
     simgrid::s4u::Storage* storage = elm.second;
     XBT_INFO("\tStorage name: %s, mount name: %s", storage->getCname(), mount_name.c_str());
 
-    sg_size_t free_size = storage->getSizeFree();
-    sg_size_t used_size = storage->getSizeUsed();
-
-    XBT_INFO("\t\tFree size: %llu bytes", free_size);
-    XBT_INFO("\t\tUsed size: %llu bytes", used_size);
+    XBT_INFO("\t\tFree size: %llu bytes", sg_storage_get_size_free(storage));
+    XBT_INFO("\t\tUsed size: %llu bytes", sg_storage_get_size_used(storage));
 
     display_storage_properties(storage);
     dump_storage_by_name(storage->getCname());
index 0a7dffc..f978fb4 100644 (file)
@@ -1,4 +1,4 @@
-$ ./storage_client_server$EXEEXT ${srcdir:=.}/../../../examples/platforms/storage/storage.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
+$ ./storage_client_server$EXEEXT ${platfdir}/storage/storage.xml "--log=root.fmt:[%10.6r]%e(%P@%h)%e%m%n"
 > [  0.000000] (server@alice) *** Storage info on alice ***
 > [  0.000000] (server@alice)  Storage name: Disk2, mount name: c:
 > [  0.000000] (server@alice)          Free size: 534479374867 bytes
index ed2a264..0e0c072 100644 (file)
@@ -51,7 +51,7 @@ if(enable_smpi)
   foreach(x coll-allgather coll-allgatherv coll-allreduce coll-alltoall coll-alltoallv coll-barrier coll-bcast 
             coll-gather coll-reduce coll-reduce-scatter coll-scatter macro-sample pt2pt-dsend pt2pt-pingpong 
             type-hvector type-indexed type-struct type-vector bug-17132 timers)
-    ADD_TESH_FACTORIES(tesh-smpi-${x} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/${x} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/${x} ${x}.tesh)
+    ADD_TESH_FACTORIES(tesh-smpi-${x} "thread;ucontext;raw;boost" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/${x} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/${x} ${x}.tesh)
   endforeach()
 
   foreach (ALLGATHER 2dmesh 3dmesh bruck GB loosely_lr NTSLR_NB pair rdb  rhv ring SMP_NTS smp_simple spreading_simple 
index 6c30288..1a1dcad 100644 (file)
@@ -19,7 +19,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
      strided_acc_onelock strided_get_indexed strided_putget_indexed contention_put contention_putget
      adlb_mimic1 lock_contention_dt acc-loc get_acc_local get_accumulate put_base put_bottom
      linked_list_bench_lock_all linked_list_bench_lock_excl manyrma2 pscw_ordering rma-contig get-struct
-     rput_local_comp racc_local_comp)
+     rput_local_comp racc_local_comp rget-testall)
     # fence_shm fetchandadd_am fetchandadd fetchandadd_tree_am fetchandadd_tree 
     #  linked_list_bench_lock_shr linked_list linked_list_fop linked_list_lockall 
     #   mcs-mutex mixedsync mutex_bench lockcontention3 reqops
@@ -61,7 +61,7 @@ foreach(file accfence1 accfence2_am accfence2 accpscw1 allocmem epochtest getfen
           rget-unlock overlap_wins_rma lock_nested derived-acc-flush_local large-acc-flush_local lockall_dt lockall_dt_flushall
           lockall_dt_flush nb_test lockall_dt_flushlocal lockall_dt_flushlocalall lock_contention_dt lock_dt lock_dt_flush lock_dt_flushlocal 
           racc_local_comp rput_local_comp win_shared_create win_shared_put_flush_get win_shared_rma_flush_load
-          wrma_flush_get)
+          wrma_flush_get rget-testall)
   set(examples_src  ${examples_src} ${CMAKE_CURRENT_SOURCE_DIR}/${file}.c)
 endforeach()
 
diff --git a/teshsuite/smpi/mpich3-test/rma/rget-testall.c b/teshsuite/smpi/mpich3-test/rma/rget-testall.c
new file mode 100644 (file)
index 0000000..4f3eec2
--- /dev/null
@@ -0,0 +1,75 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2017 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <mpi.h>
+#include "mpitest.h"
+
+/* This test checks request-based get with MPI_Testall. Both the return value of
+ * MPI_Testall and status.MPI_ERROR should be correctly set.
+ *
+ * Thanks for Joseph Schuchart reporting this bug in MPICH and contributing
+ * the prototype of this test program. */
+
+int main(int argc, char **argv)
+{
+    int rank, size;
+    MPI_Win win = MPI_WIN_NULL;
+    int *baseptr = NULL;
+    int errs = 0, mpi_errno = MPI_SUCCESS;
+    int val1 = 0, val2 = 0, flag = 0;
+    MPI_Request reqs[2];
+    MPI_Status stats[2];
+
+    MTest_Init(&argc, &argv);
+    MPI_Comm_size(MPI_COMM_WORLD, &size);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+    MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+
+    MPI_Win_allocate(2 * sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &baseptr, &win);
+
+    /* Initialize window buffer */
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    baseptr[0] = 1;
+    baseptr[1] = 2;
+    MPI_Win_unlock(rank, win);
+
+    /* Issue request-based get with testall. */
+    MPI_Win_lock_all(0, win);
+    MPI_Rget(&val1, 1, MPI_INT, 0, 0, 1, MPI_INT, win, &reqs[0]);
+    MPI_Rget(&val2, 1, MPI_INT, 0, 1, 1, MPI_INT, win, &reqs[1]);
+
+    do {
+        mpi_errno = MPI_Testall(2, reqs, &flag, stats);
+    } while (flag == 0);
+
+    /* Check get value. */
+    if (val1 != 1 || val2 != 2) {
+        printf("%d - Got val1 = %d, val2 = %d, expected 1, 2\n", rank, val1, val2);
+        fflush(stdout);
+        errs++;
+    }
+
+    /* Check return error code. */
+    if (mpi_errno != MPI_SUCCESS) {
+        printf("%d - Got return errno %d, expected MPI_SUCCESS(%d)\n",
+               rank, mpi_errno, MPI_SUCCESS);
+        fflush(stdout);
+        errs++;
+    }
+
+    MPI_Win_unlock_all(win);
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    MPI_Win_free(&win);
+
+    MTest_Finalize(errs);
+    MPI_Finalize();
+
+    return errs != 0;
+}
index 3cf6fc8..527b45b 100644 (file)
@@ -164,6 +164,7 @@ large-small-acc 2
 #overlap_wins_fop 3
 #overlap_wins_cas 3
 lock_nested 3
+rget-testall 2
 
 ## This test is not strictly correct.  This was meant to test out the
 ## case when MPI_Test is not nonblocking.  However, we ended up
index d756d2a..2e873ef 100644 (file)
@@ -1,6 +1,6 @@
 p Test vector
 ! output sort
-$ ${bindir:=.}/../../../smpi_script/bin/smpirun -map -hostfile ../hostfile -platform ${srcdir:=.}/../../../examples/platforms/small_platform.xml -np 2 ${bindir:=.}/type-vector -q --log=smpi_kernel.thres:warning --log=xbt_cfg.thres:warning
+$ ${bindir:=.}/../../../smpi_script/bin/smpirun -map -hostfile ../hostfile -platform ${platfdir}/small_platform.xml -np 2 ${bindir:=.}/type-vector -q --log=smpi_kernel.thres:warning --log=xbt_cfg.thres:warning
 > [rank 0] -> Tremblay
 > [rank 1] -> Jupiter
 > rank= 0, a[0][0]=0.000000
index 735efee..8bede3c 100644 (file)
@@ -19,9 +19,9 @@ set(tesh_files     ${tesh_files}
 set(teshsuite_src  ${teshsuite_src} ${CMAKE_CURRENT_SOURCE_DIR}/maxmin_bench/maxmin_bench.cpp  PARENT_SCOPE)
 
 foreach(x lmm_usage surf_usage surf_usage2)
-  ADD_TESH(tesh-surf-${x} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/surf/${x} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/${x} ${x}.tesh)
+  ADD_TESH(tesh-surf-${x} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/surf/${x} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/${x} ${x}.tesh)
 endforeach()
 
 foreach(x small medium large)
-  ADD_TESH(tesh-surf-maxmin-${x} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/surf/maxmin_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/maxmin_bench maxmin_bench_${x}.tesh)
+  ADD_TESH(tesh-surf-maxmin-${x} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/surf/maxmin_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/maxmin_bench maxmin_bench_${x}.tesh)
 endforeach()
index 0a9aaf8..68ce738 100644 (file)
@@ -7,8 +7,8 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "simgrid/msg.h"
+#include "src/kernel/lmm/maxmin.hpp"
 #include "src/surf/surf_interface.hpp"
-#include "surf/maxmin.hpp"
 #include "xbt/log.h"
 #include "xbt/module.h"
 #include "xbt/sysdep.h"
@@ -92,11 +92,13 @@ static void test1(method_t method)
   double b = 10.0;
 
   if (method == LAGRANGE_VEGAS)
-    lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi);
+    simgrid::kernel::lmm::lmm_set_default_protocol_function(
+        simgrid::kernel::lmm::func_vegas_f, simgrid::kernel::lmm::func_vegas_fp, simgrid::kernel::lmm::func_vegas_fpi);
   else if (method == LAGRANGE_RENO)
-    lmm_set_default_protocol_function(func_reno_f, func_reno_fpi, func_reno_fpi);
+    simgrid::kernel::lmm::lmm_set_default_protocol_function(
+        simgrid::kernel::lmm::func_reno_f, simgrid::kernel::lmm::func_reno_fpi, simgrid::kernel::lmm::func_reno_fpi);
 
-  lmm_system_t Sys    = new s_lmm_system_t(true);
+  lmm_system_t Sys    = new simgrid::kernel::lmm::s_lmm_system_t(true);
   lmm_constraint_t L1 = Sys->constraint_new(nullptr, a);
   lmm_constraint_t L2 = Sys->constraint_new(nullptr, b);
   lmm_constraint_t L3 = Sys->constraint_new(nullptr, a);
@@ -178,11 +180,13 @@ static void test1(method_t method)
 static void test2(method_t method)
 {
   if (method == LAGRANGE_VEGAS)
-    lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi);
+    lmm_set_default_protocol_function(simgrid::kernel::lmm::func_vegas_f, simgrid::kernel::lmm::func_vegas_fp,
+                                      simgrid::kernel::lmm::func_vegas_fpi);
   if (method == LAGRANGE_RENO)
-    lmm_set_default_protocol_function(func_reno_f, func_reno_fp, func_reno_fpi);
+    lmm_set_default_protocol_function(simgrid::kernel::lmm::func_reno_f, simgrid::kernel::lmm::func_reno_fp,
+                                      simgrid::kernel::lmm::func_reno_fpi);
 
-  lmm_system_t Sys      = new s_lmm_system_t(true);
+  lmm_system_t Sys      = new simgrid::kernel::lmm::s_lmm_system_t(true);
   lmm_constraint_t CPU1 = Sys->constraint_new(nullptr, 200.0);
   lmm_constraint_t CPU2 = Sys->constraint_new(nullptr, 100.0);
 
@@ -249,11 +253,13 @@ static void test3(method_t method)
   A[14][15] =                                        1.0;
 
   if (method == LAGRANGE_VEGAS)
-    lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi);
+    lmm_set_default_protocol_function(simgrid::kernel::lmm::func_vegas_f, simgrid::kernel::lmm::func_vegas_fp,
+                                      simgrid::kernel::lmm::func_vegas_fpi);
   if (method == LAGRANGE_RENO)
-    lmm_set_default_protocol_function(func_reno_f, func_reno_fp, func_reno_fpi);
+    lmm_set_default_protocol_function(simgrid::kernel::lmm::func_reno_f, simgrid::kernel::lmm::func_reno_fp,
+                                      simgrid::kernel::lmm::func_reno_fpi);
 
-  lmm_system_t Sys = new s_lmm_system_t(true);
+  lmm_system_t Sys = new simgrid::kernel::lmm::s_lmm_system_t(true);
 
   /* Creates the constraints */
   lmm_constraint_t* tmp_cnst = new lmm_constraint_t[15];
index be01e1d..f9d3eb3 100644 (file)
@@ -6,7 +6,7 @@
 /* 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 "surf/maxmin.hpp"
+#include "src/kernel/lmm/maxmin.hpp"
 #include "simgrid/msg.h"
 #include "xbt/module.h"
 #include "xbt/sysdep.h" /* time manipulation for benchmarking */
@@ -45,7 +45,7 @@ static void test(int nb_cnst, int nb_var, int nb_elem, unsigned int pw_base_limi
   lmm_variable_t var[nb_var];
   int used[nb_cnst];
 
-  lmm_system_t Sys = new s_lmm_system_t(true);
+  lmm_system_t Sys = new simgrid::kernel::lmm::s_lmm_system_t(true);
 
   for (int i = 0; i < nb_cnst; i++) {
     cnst[i] = Sys->constraint_new(NULL, float_random(10.0));
index 7e38514..dc7003e 100644 (file)
@@ -106,176 +106,176 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '21' usage: 8.493506 remaining: 6.673327 concurrency: 4<=4<=9
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '3' usage: 10.696304 remaining: 5.434565 concurrency: 5<=5<=40
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '34' usage: 7.922577 remaining: 1.878122 concurrency: 3<=3<=-1
-> [0.000000]: [surf_maxmin/DEBUG] var=10, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004363, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=12, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004363, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=14, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004363, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=17, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004363, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=18, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004363, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=20, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004363, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=21, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004363, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=33, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004363, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=59, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004363, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=61, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004363, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=86, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004363, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=100, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004363, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=10, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004363, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=12, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004363, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=14, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004363, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=17, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004363, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=18, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004363, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=20, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004363, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=21, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004363, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=33, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004363, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=59, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004363, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=61, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004363, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=86, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004363, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=100, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004363, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (10) value to 0.004363
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(10)->weight: 1.000000, Var(10)->value: 0.004363 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(10).weight: 1.000000, Var(10).value: 0.004363 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (12) value to 0.004363
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(12)->weight: 1.000000, Var(12)->value: 0.004363 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(12).weight: 1.000000, Var(12).value: 0.004363 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (14) value to 0.004363
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(14)->weight: 1.000000, Var(14)->value: 0.004363 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(14).weight: 1.000000, Var(14).value: 0.004363 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (17) value to 0.004363
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(17)->weight: 1.000000, Var(17)->value: 0.004363 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(17).weight: 1.000000, Var(17).value: 0.004363 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (18) value to 0.004363
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(18)->weight: 1.000000, Var(18)->value: 0.004363 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(18).weight: 1.000000, Var(18).value: 0.004363 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (20) value to 0.004363
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(20)->weight: 1.000000, Var(20)->value: 0.004363 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(20).weight: 1.000000, Var(20).value: 0.004363 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (21) value to 0.004363
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(21)->weight: 1.000000, Var(21)->value: 0.004363 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(21).weight: 1.000000, Var(21).value: 0.004363 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (33) value to 0.004363
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(33)->weight: 1.000000, Var(33)->value: 0.004363 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(33).weight: 1.000000, Var(33).value: 0.004363 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (59) value to 0.004363
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(59)->weight: 1.000000, Var(59)->value: 0.004363 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(59).weight: 1.000000, Var(59).value: 0.004363 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (61) value to 0.004363
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(61)->weight: 1.000000, Var(61)->value: 0.004363 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(61).weight: 1.000000, Var(61).value: 0.004363 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (86) value to 0.004363
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(86)->weight: 1.000000, Var(86)->value: 0.004363 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(86).weight: 1.000000, Var(86).value: 0.004363 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (100) value to 0.004363
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(100)->weight: 1.000000, Var(100)->value: 0.004363 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004363, Var(100).weight: 1.000000, Var(100).value: 0.004363 
 > [0.000000]: [surf_maxmin/DEBUG] index: 86     cnst_light_num: 100     || usage: 0.000000 remaining: 0.000000 bound: 0.089910  
-> [0.000000]: [surf_maxmin/DEBUG] var=2, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008030, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=3, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008030, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=19, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008030, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=24, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008030, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=29, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008030, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=31, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008030, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=35, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008030, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=65, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008030, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=66, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008030, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=2, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008030, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=3, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008030, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=19, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008030, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=24, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008030, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=29, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008030, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=31, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008030, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=35, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008030, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=65, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008030, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=66, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008030, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (2) value to 0.008030
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(2)->weight: 1.000000, Var(2)->value: 0.008030 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(2).weight: 1.000000, Var(2).value: 0.008030 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (3) value to 0.008030
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(3)->weight: 1.000000, Var(3)->value: 0.008030 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(3).weight: 1.000000, Var(3).value: 0.008030 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (19) value to 0.008030
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(19)->weight: 1.000000, Var(19)->value: 0.008030 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(19).weight: 1.000000, Var(19).value: 0.008030 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (24) value to 0.008030
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(24)->weight: 1.000000, Var(24)->value: 0.008030 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(24).weight: 1.000000, Var(24).value: 0.008030 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (29) value to 0.008030
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(29)->weight: 1.000000, Var(29)->value: 0.008030 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(29).weight: 1.000000, Var(29).value: 0.008030 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (31) value to 0.008030
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(31)->weight: 1.000000, Var(31)->value: 0.008030 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(31).weight: 1.000000, Var(31).value: 0.008030 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (35) value to 0.008030
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(35)->weight: 1.000000, Var(35)->value: 0.008030 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(35).weight: 1.000000, Var(35).value: 0.008030 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (65) value to 0.008030
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(65)->weight: 1.000000, Var(65)->value: 0.008030 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(65).weight: 1.000000, Var(65).value: 0.008030 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (66) value to 0.008030
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(66)->weight: 1.000000, Var(66)->value: 0.008030 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008030, Var(66).weight: 1.000000, Var(66).value: 0.008030 
 > [0.000000]: [surf_maxmin/DEBUG] index: 33     cnst_light_num: 99      || usage: 0.000000 remaining: 0.000000 bound: 0.139860  
-> [0.000000]: [surf_maxmin/DEBUG] var=5, var->bound=-1.000000, var->weight=1.000000, min_usage=0.021367, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=13, var->bound=-1.000000, var->weight=1.000000, min_usage=0.021367, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=36, var->bound=-1.000000, var->weight=1.000000, min_usage=0.021367, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=39, var->bound=-1.000000, var->weight=1.000000, min_usage=0.021367, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=42, var->bound=-1.000000, var->weight=1.000000, min_usage=0.021367, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=57, var->bound=-1.000000, var->weight=1.000000, min_usage=0.021367, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=5, var.bound=-1.000000, var.weight=1.000000, min_usage=0.021367, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=13, var.bound=-1.000000, var.weight=1.000000, min_usage=0.021367, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=36, var.bound=-1.000000, var.weight=1.000000, min_usage=0.021367, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=39, var.bound=-1.000000, var.weight=1.000000, min_usage=0.021367, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=42, var.bound=-1.000000, var.weight=1.000000, min_usage=0.021367, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=57, var.bound=-1.000000, var.weight=1.000000, min_usage=0.021367, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (5) value to 0.021367
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.021367, Var(5)->weight: 1.000000, Var(5)->value: 0.021367 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.021367, Var(5).weight: 1.000000, Var(5).value: 0.021367 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (13) value to 0.021367
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.021367, Var(13)->weight: 1.000000, Var(13)->value: 0.021367 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.021367, Var(13).weight: 1.000000, Var(13).value: 0.021367 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (36) value to 0.021367
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.021367, Var(36)->weight: 1.000000, Var(36)->value: 0.021367 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.021367, Var(36).weight: 1.000000, Var(36).value: 0.021367 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (39) value to 0.021367
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.021367, Var(39)->weight: 1.000000, Var(39)->value: 0.021367 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.021367, Var(39).weight: 1.000000, Var(39).value: 0.021367 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (42) value to 0.021367
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.021367, Var(42)->weight: 1.000000, Var(42)->value: 0.021367 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.021367, Var(42).weight: 1.000000, Var(42).value: 0.021367 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (57) value to 0.021367
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.021367, Var(57)->weight: 1.000000, Var(57)->value: 0.021367 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.021367, Var(57).weight: 1.000000, Var(57).value: 0.021367 
 > [0.000000]: [surf_maxmin/DEBUG] index: 30     cnst_light_num: 98      || usage: 0.000000 remaining: 0.000000 bound: 0.239760  
-> [0.000000]: [surf_maxmin/DEBUG] var=7, var->bound=-1.000000, var->weight=1.000000, min_usage=0.111522, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=9, var->bound=-1.000000, var->weight=1.000000, min_usage=0.111522, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=25, var->bound=-1.000000, var->weight=1.000000, min_usage=0.111522, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=7, var.bound=-1.000000, var.weight=1.000000, min_usage=0.111522, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=9, var.bound=-1.000000, var.weight=1.000000, min_usage=0.111522, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=25, var.bound=-1.000000, var.weight=1.000000, min_usage=0.111522, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (7) value to 0.111522
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.111522, Var(7)->weight: 1.000000, Var(7)->value: 0.111522 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.111522, Var(7).weight: 1.000000, Var(7).value: 0.111522 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (9) value to 0.111522
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.111522, Var(9)->weight: 1.000000, Var(9)->value: 0.111522 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.111522, Var(9).weight: 1.000000, Var(9).value: 0.111522 
 > [0.000000]: [surf_maxmin/DEBUG] index: 43     cnst_light_num: 97      || usage: 0.000000 remaining: 6.351599 bound: 6.573427  
 > [0.000000]: [surf_maxmin/DEBUG] index: 35     cnst_light_num: 96      || usage: 0.000000 remaining: 6.501325 bound: 6.783217  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (25) value to 0.111522
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.111522, Var(25)->weight: 1.000000, Var(25)->value: 0.111522 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.111522, Var(25).weight: 1.000000, Var(25).value: 0.111522 
 > [0.000000]: [surf_maxmin/DEBUG] index: 64     cnst_light_num: 95      || usage: 0.000000 remaining: 0.000000 bound: 0.419580  
 > [0.000000]: [surf_maxmin/DEBUG] index: 37     cnst_light_num: 94      || usage: 0.000000 remaining: 5.229520 bound: 5.464535  
-> [0.000000]: [surf_maxmin/DEBUG] var=11, var->bound=-1.000000, var->weight=1.000000, min_usage=0.114197, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=60, var->bound=-1.000000, var->weight=1.000000, min_usage=0.114197, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=94, var->bound=-1.000000, var->weight=1.000000, min_usage=0.114197, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=11, var.bound=-1.000000, var.weight=1.000000, min_usage=0.114197, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=60, var.bound=-1.000000, var.weight=1.000000, min_usage=0.114197, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=94, var.bound=-1.000000, var.weight=1.000000, min_usage=0.114197, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (11) value to 0.114197
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.114197, Var(11)->weight: 1.000000, Var(11)->value: 0.114197 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.114197, Var(11).weight: 1.000000, Var(11).value: 0.114197 
 > [0.000000]: [surf_maxmin/DEBUG] index: 78     cnst_light_num: 93      || usage: 0.000000 remaining: 3.639923 bound: 3.946054  
 > [0.000000]: [surf_maxmin/DEBUG] index: 89     cnst_light_num: 92      || usage: 0.000000 remaining: 1.712163 bound: 1.928072  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (60) value to 0.114197
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.114197, Var(60)->weight: 1.000000, Var(60)->value: 0.114197 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.114197, Var(60).weight: 1.000000, Var(60).value: 0.114197 
 > [0.000000]: [surf_maxmin/DEBUG] index: 77     cnst_light_num: 91      || usage: 0.000000 remaining: 1.857045 bound: 2.437562  
 > [0.000000]: [surf_maxmin/DEBUG] index: 30     cnst_light_num: 90      || usage: 0.000000 remaining: 6.367133 bound: 6.673327  
 > [0.000000]: [surf_maxmin/DEBUG] index: 39     cnst_light_num: 89      || usage: 0.000000 remaining: 6.894919 bound: 7.282717  
 > [0.000000]: [surf_maxmin/DEBUG] index: 45     cnst_light_num: 88      || usage: 0.000000 remaining: 4.984682 bound: 5.784216  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (94) value to 0.114197
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.114197, Var(94)->weight: 1.000000, Var(94)->value: 0.114197 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.114197, Var(94).weight: 1.000000, Var(94).value: 0.114197 
 > [0.000000]: [surf_maxmin/DEBUG] index: 30     cnst_light_num: 87      || usage: 0.000000 remaining: 0.000000 bound: 0.909091  
 > [0.000000]: [surf_maxmin/DEBUG] index: 35     cnst_light_num: 86      || usage: 0.000000 remaining: 2.100813 bound: 2.467532  
 > [0.000000]: [surf_maxmin/DEBUG] index: 39     cnst_light_num: 85      || usage: 0.000000 remaining: 8.371246 bound: 8.641359  
 > [0.000000]: [surf_maxmin/DEBUG] index: 30     cnst_light_num: 84      || usage: 0.000000 remaining: 1.719694 bound: 1.878122  
 > [0.000000]: [surf_maxmin/DEBUG] index: 78     cnst_light_num: 83      || usage: 0.000000 remaining: 2.160269 bound: 2.597403  
 > [0.000000]: [surf_maxmin/DEBUG] index: 67     cnst_light_num: 82      || usage: 0.000000 remaining: 2.175342 bound: 2.557443  
-> [0.000000]: [surf_maxmin/DEBUG] var=6, var->bound=-1.000000, var->weight=1.000000, min_usage=0.220110, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=22, var->bound=-1.000000, var->weight=1.000000, min_usage=0.220110, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=6, var.bound=-1.000000, var.weight=1.000000, min_usage=0.220110, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=22, var.bound=-1.000000, var.weight=1.000000, min_usage=0.220110, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (6) value to 0.220110
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.220110, Var(6)->weight: 1.000000, Var(6)->value: 0.220110 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.220110, Var(6).weight: 1.000000, Var(6).value: 0.220110 
 > [0.000000]: [surf_maxmin/DEBUG] index: 69     cnst_light_num: 81      || usage: 0.000000 remaining: 5.566744 bound: 6.223776  
 > [0.000000]: [surf_maxmin/DEBUG] index: 71     cnst_light_num: 80      || usage: 0.000000 remaining: 8.565684 bound: 9.140859  
 > [0.000000]: [surf_maxmin/DEBUG] index: 73     cnst_light_num: 79      || usage: 0.000000 remaining: 0.742072 bound: 1.418581  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (22) value to 0.220110
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.220110, Var(22)->weight: 1.000000, Var(22)->value: 0.220110 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.220110, Var(22).weight: 1.000000, Var(22).value: 0.220110 
 > [0.000000]: [surf_maxmin/DEBUG] index: 64     cnst_light_num: 78      || usage: 0.000000 remaining: 0.265229 bound: 0.819181  
 > [0.000000]: [surf_maxmin/DEBUG] index: 29     cnst_light_num: 77      || usage: 0.000000 remaining: 0.000000 bound: 1.078921  
 > [0.000000]: [surf_maxmin/DEBUG] index: 64     cnst_light_num: 76      || usage: 0.000000 remaining: 7.994916 bound: 8.301698  
 > [0.000000]: [surf_maxmin/DEBUG] index: 36     cnst_light_num: 75      || usage: 0.000000 remaining: 0.153476 bound: 1.148851  
-> [0.000000]: [surf_maxmin/DEBUG] var=28, var->bound=-1.000000, var->weight=1.000000, min_usage=0.263657, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=28, var.bound=-1.000000, var.weight=1.000000, min_usage=0.263657, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (28) value to 0.263657
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.263657, Var(28)->weight: 1.000000, Var(28)->value: 0.263657 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.263657, Var(28).weight: 1.000000, Var(28).value: 0.263657 
 > [0.000000]: [surf_maxmin/DEBUG] index: 29     cnst_light_num: 74      || usage: 0.000000 remaining: 8.806164 bound: 9.620380  
 > [0.000000]: [surf_maxmin/DEBUG] index: 38     cnst_light_num: 73      || usage: 0.000000 remaining: 8.089858 bound: 9.280719  
 > [0.000000]: [surf_maxmin/DEBUG] index: 33     cnst_light_num: 72      || usage: 0.000000 remaining: 4.844821 bound: 5.434565  
@@ -283,11 +283,11 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 38     cnst_light_num: 70      || usage: 0.000000 remaining: 4.360482 bound: 5.334665  
 > [0.000000]: [surf_maxmin/DEBUG] index: 25     cnst_light_num: 69      || usage: 0.000000 remaining: 0.000000 bound: 0.949051  
 > [0.000000]: [surf_maxmin/DEBUG] index: 37     cnst_light_num: 68      || usage: 0.000000 remaining: 5.851198 bound: 6.473526  
-> [0.000000]: [surf_maxmin/DEBUG] var=1, var->bound=-1.000000, var->weight=1.000000, min_usage=0.281538, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=15, var->bound=-1.000000, var->weight=1.000000, min_usage=0.281538, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=1, var.bound=-1.000000, var.weight=1.000000, min_usage=0.281538, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=15, var.bound=-1.000000, var.weight=1.000000, min_usage=0.281538, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (1) value to 0.281538
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.281538, Var(1)->weight: 1.000000, Var(1)->value: 0.281538 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.281538, Var(1).weight: 1.000000, Var(1).value: 0.281538 
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 67      || usage: 0.000000 remaining: 2.572545 bound: 3.166833  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 66      || usage: 0.000000 remaining: 2.546729 bound: 3.766234  
 > [0.000000]: [surf_maxmin/DEBUG] index: 4      cnst_light_num: 65      || usage: 0.000000 remaining: 8.853024 bound: 9.710290  
@@ -298,7 +298,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 21     cnst_light_num: 60      || usage: 0.000000 remaining: 1.765549 bound: 2.777223  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (15) value to 0.281538
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.281538, Var(15)->weight: 1.000000, Var(15)->value: 0.281538 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.281538, Var(15).weight: 1.000000, Var(15).value: 0.281538 
 > [0.000000]: [surf_maxmin/DEBUG] index: 24     cnst_light_num: 59      || usage: 0.000000 remaining: 6.743340 bound: 9.040959  
 > [0.000000]: [surf_maxmin/DEBUG] index: 28     cnst_light_num: 58      || usage: 0.000000 remaining: 3.193824 bound: 3.966034  
 > [0.000000]: [surf_maxmin/DEBUG] index: 18     cnst_light_num: 57      || usage: 0.000000 remaining: 0.152448 bound: 1.528472  
@@ -306,11 +306,11 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 41     cnst_light_num: 55      || usage: 0.000000 remaining: 1.804698 bound: 3.346653  
 > [0.000000]: [surf_maxmin/DEBUG] index: 14     cnst_light_num: 54      || usage: 0.000000 remaining: 7.352391 bound: 9.780220  
 > [0.000000]: [surf_maxmin/DEBUG] index: 6      cnst_light_num: 53      || usage: 0.000000 remaining: 4.865037 bound: 6.283716  
-> [0.000000]: [surf_maxmin/DEBUG] var=8, var->bound=-1.000000, var->weight=1.000000, min_usage=0.293237, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=16, var->bound=-1.000000, var->weight=1.000000, min_usage=0.293237, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=8, var.bound=-1.000000, var.weight=1.000000, min_usage=0.293237, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=16, var.bound=-1.000000, var.weight=1.000000, min_usage=0.293237, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (8) value to 0.293237
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.293237, Var(8)->weight: 1.000000, Var(8)->value: 0.293237 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.293237, Var(8).weight: 1.000000, Var(8).value: 0.293237 
 > [0.000000]: [surf_maxmin/DEBUG] index: 37     cnst_light_num: 52      || usage: 0.000000 remaining: 8.183363 bound: 9.610390  
 > [0.000000]: [surf_maxmin/DEBUG] index: 29     cnst_light_num: 51      || usage: 0.000000 remaining: 5.407458 bound: 6.343656  
 > [0.000000]: [surf_maxmin/DEBUG] index: 7      cnst_light_num: 50      || usage: 0.000000 remaining: 8.934859 bound: 9.760240  
@@ -330,7 +330,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 36      || usage: 0.000000 remaining: 5.604287 bound: 7.692308  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (16) value to 0.293237
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.293237, Var(16)->weight: 1.000000, Var(16)->value: 0.293237 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.293237, Var(16).weight: 1.000000, Var(16).value: 0.293237 
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 35      || usage: 0.000000 remaining: 0.000000 bound: 1.948052  
 > [0.000000]: [surf_maxmin/DEBUG] index: 26     cnst_light_num: 34      || usage: 0.000000 remaining: 5.197662 bound: 5.894106  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 33      || usage: 0.000000 remaining: 1.441086 bound: 3.006993  
@@ -345,10 +345,10 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 7      cnst_light_num: 24      || usage: 0.000000 remaining: 2.217343 bound: 4.375624  
 > [0.000000]: [surf_maxmin/DEBUG] index: 7      cnst_light_num: 23      || usage: 0.000000 remaining: 5.049686 bound: 5.934066  
 > [0.000000]: [surf_maxmin/DEBUG] index: 16     cnst_light_num: 22      || usage: 0.000000 remaining: 5.574190 bound: 7.082917  
-> [0.000000]: [surf_maxmin/DEBUG] var=4, var->bound=-1.000000, var->weight=1.000000, min_usage=0.319893, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=4, var.bound=-1.000000, var.weight=1.000000, min_usage=0.319893, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (4) value to 0.319893
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.319893, Var(4)->weight: 1.000000, Var(4)->value: 0.319893 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.319893, Var(4).weight: 1.000000, Var(4).value: 0.319893 
 > [0.000000]: [surf_maxmin/DEBUG] index: 20     cnst_light_num: 21      || usage: 0.000000 remaining: 4.569620 bound: 6.783217  
 > [0.000000]: [surf_maxmin/DEBUG] index: 6      cnst_light_num: 20      || usage: 0.000000 remaining: 3.597397 bound: 4.915085  
 > [0.000000]: [surf_maxmin/DEBUG] index: 10     cnst_light_num: 19      || usage: 0.000000 remaining: 4.238922 bound: 6.713287  
@@ -675,166 +675,166 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '131' usage: 10.369630 remaining: 1.608392 concurrency: 6<=7<=40
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '156' usage: 10.795205 remaining: 5.774226 concurrency: 6<=7<=9
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '103' usage: 11.283716 remaining: 1.088911 concurrency: 7<=8<=-1
-> [0.000000]: [surf_maxmin/DEBUG] var=101, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007926, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=110, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007926, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=125, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007926, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=130, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007926, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=131, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007926, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=132, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007926, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=136, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007926, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=138, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007926, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=139, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007926, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=153, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007926, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=101, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007926, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=110, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007926, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=125, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007926, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=130, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007926, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=131, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007926, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=132, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007926, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=136, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007926, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=138, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007926, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=139, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007926, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=153, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007926, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (101) value to 0.007926
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(101)->weight: 1.000000, Var(101)->value: 0.007926 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(101).weight: 1.000000, Var(101).value: 0.007926 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (110) value to 0.007926
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(110)->weight: 1.000000, Var(110)->value: 0.007926 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(110).weight: 1.000000, Var(110).value: 0.007926 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (125) value to 0.007926
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(125)->weight: 1.000000, Var(125)->value: 0.007926 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(125).weight: 1.000000, Var(125).value: 0.007926 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (130) value to 0.007926
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(130)->weight: 1.000000, Var(130)->value: 0.007926 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(130).weight: 1.000000, Var(130).value: 0.007926 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (131) value to 0.007926
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(131)->weight: 1.000000, Var(131)->value: 0.007926 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(131).weight: 1.000000, Var(131).value: 0.007926 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (132) value to 0.007926
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(132)->weight: 1.000000, Var(132)->value: 0.007926 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(132).weight: 1.000000, Var(132).value: 0.007926 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (136) value to 0.007926
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(136)->weight: 1.000000, Var(136)->value: 0.007926 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(136).weight: 1.000000, Var(136).value: 0.007926 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (138) value to 0.007926
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(138)->weight: 1.000000, Var(138)->value: 0.007926 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(138).weight: 1.000000, Var(138).value: 0.007926 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (139) value to 0.007926
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(139)->weight: 1.000000, Var(139)->value: 0.007926 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(139).weight: 1.000000, Var(139).value: 0.007926 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (153) value to 0.007926
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(153)->weight: 1.000000, Var(153)->value: 0.007926 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007926, Var(153).weight: 1.000000, Var(153).value: 0.007926 
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 100     || usage: 0.000000 remaining: 0.000000 bound: 0.119880  
-> [0.000000]: [surf_maxmin/DEBUG] var=102, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008159, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=103, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008159, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=104, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008159, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=105, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008159, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=106, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008159, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=112, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008159, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=127, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008159, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=129, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008159, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=102, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008159, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=103, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008159, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=104, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008159, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=105, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008159, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=106, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008159, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=112, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008159, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=127, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008159, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=129, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008159, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (102) value to 0.008159
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(102)->weight: 1.000000, Var(102)->value: 0.008159 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(102).weight: 1.000000, Var(102).value: 0.008159 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (103) value to 0.008159
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(103)->weight: 1.000000, Var(103)->value: 0.008159 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(103).weight: 1.000000, Var(103).value: 0.008159 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (104) value to 0.008159
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(104)->weight: 1.000000, Var(104)->value: 0.008159 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(104).weight: 1.000000, Var(104).value: 0.008159 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (105) value to 0.008159
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(105)->weight: 1.000000, Var(105)->value: 0.008159 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(105).weight: 1.000000, Var(105).value: 0.008159 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (106) value to 0.008159
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(106)->weight: 1.000000, Var(106)->value: 0.008159 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(106).weight: 1.000000, Var(106).value: 0.008159 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (112) value to 0.008159
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(112)->weight: 1.000000, Var(112)->value: 0.008159 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(112).weight: 1.000000, Var(112).value: 0.008159 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (127) value to 0.008159
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(127)->weight: 1.000000, Var(127)->value: 0.008159 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(127).weight: 1.000000, Var(127).value: 0.008159 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (129) value to 0.008159
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(129)->weight: 1.000000, Var(129)->value: 0.008159 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008159, Var(129).weight: 1.000000, Var(129).value: 0.008159 
 > [0.000000]: [surf_maxmin/DEBUG] index: 65     cnst_light_num: 99      || usage: 0.000000 remaining: 2.401264 bound: 2.457542  
 > [0.000000]: [surf_maxmin/DEBUG] index: 13     cnst_light_num: 98      || usage: 0.000000 remaining: 0.000000 bound: 0.159840  
-> [0.000000]: [surf_maxmin/DEBUG] var=108, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008523, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=114, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008523, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=116, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008523, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=121, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008523, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=141, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008523, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=144, var->bound=-1.000000, var->weight=1.000000, min_usage=0.008523, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=108, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008523, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=114, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008523, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=116, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008523, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=121, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008523, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=141, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008523, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=144, var.bound=-1.000000, var.weight=1.000000, min_usage=0.008523, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (108) value to 0.008523
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008523, Var(108)->weight: 1.000000, Var(108)->value: 0.008523 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008523, Var(108).weight: 1.000000, Var(108).value: 0.008523 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (114) value to 0.008523
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008523, Var(114)->weight: 1.000000, Var(114)->value: 0.008523 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008523, Var(114).weight: 1.000000, Var(114).value: 0.008523 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (116) value to 0.008523
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008523, Var(116)->weight: 1.000000, Var(116)->value: 0.008523 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008523, Var(116).weight: 1.000000, Var(116).value: 0.008523 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (121) value to 0.008523
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008523, Var(121)->weight: 1.000000, Var(121)->value: 0.008523 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008523, Var(121).weight: 1.000000, Var(121).value: 0.008523 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (141) value to 0.008523
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008523, Var(141)->weight: 1.000000, Var(141)->value: 0.008523 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008523, Var(141).weight: 1.000000, Var(141).value: 0.008523 
 > [0.000000]: [surf_maxmin/DEBUG] index: 71     cnst_light_num: 97      || usage: 0.000000 remaining: 8.670797 bound: 8.741259  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (144) value to 0.008523
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008523, Var(144)->weight: 1.000000, Var(144)->value: 0.008523 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.008523, Var(144).weight: 1.000000, Var(144).value: 0.008523 
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 96      || usage: 0.000000 remaining: 0.000000 bound: 0.149850  
 > [0.000000]: [surf_maxmin/DEBUG] index: 53     cnst_light_num: 95      || usage: 0.000000 remaining: 6.333684 bound: 6.373626  
-> [0.000000]: [surf_maxmin/DEBUG] var=117, var->bound=-1.000000, var->weight=1.000000, min_usage=0.016848, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=119, var->bound=-1.000000, var->weight=1.000000, min_usage=0.016848, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=181, var->bound=-1.000000, var->weight=1.000000, min_usage=0.016848, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=117, var.bound=-1.000000, var.weight=1.000000, min_usage=0.016848, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=119, var.bound=-1.000000, var.weight=1.000000, min_usage=0.016848, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=181, var.bound=-1.000000, var.weight=1.000000, min_usage=0.016848, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (117) value to 0.016848
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.016848, Var(117)->weight: 1.000000, Var(117)->value: 0.016848 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.016848, Var(117).weight: 1.000000, Var(117).value: 0.016848 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (119) value to 0.016848
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.016848, Var(119)->weight: 1.000000, Var(119)->value: 0.016848 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.016848, Var(119).weight: 1.000000, Var(119).value: 0.016848 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (181) value to 0.016848
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.016848, Var(181)->weight: 1.000000, Var(181)->value: 0.016848 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.016848, Var(181).weight: 1.000000, Var(181).value: 0.016848 
 > [0.000000]: [surf_maxmin/DEBUG] index: 69     cnst_light_num: 94      || usage: 0.000000 remaining: 5.020334 bound: 5.094905  
 > [0.000000]: [surf_maxmin/DEBUG] index: 22     cnst_light_num: 93      || usage: 0.000000 remaining: 0.000000 bound: 0.149850  
-> [0.000000]: [surf_maxmin/DEBUG] var=115, var->bound=-1.000000, var->weight=1.000000, min_usage=0.017542, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=120, var->bound=-1.000000, var->weight=1.000000, min_usage=0.017542, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=122, var->bound=-1.000000, var->weight=1.000000, min_usage=0.017542, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=115, var.bound=-1.000000, var.weight=1.000000, min_usage=0.017542, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=120, var.bound=-1.000000, var.weight=1.000000, min_usage=0.017542, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=122, var.bound=-1.000000, var.weight=1.000000, min_usage=0.017542, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (115) value to 0.017542
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.017542, Var(115)->weight: 1.000000, Var(115)->value: 0.017542 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.017542, Var(115).weight: 1.000000, Var(115).value: 0.017542 
 > [0.000000]: [surf_maxmin/DEBUG] index: 44     cnst_light_num: 92      || usage: 0.000000 remaining: 1.917360 bound: 2.027972  
 > [0.000000]: [surf_maxmin/DEBUG] index: 54     cnst_light_num: 91      || usage: 0.000000 remaining: 4.207907 bound: 4.305694  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (120) value to 0.017542
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.017542, Var(120)->weight: 1.000000, Var(120)->value: 0.017542 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.017542, Var(120).weight: 1.000000, Var(120).value: 0.017542 
 > [0.000000]: [surf_maxmin/DEBUG] index: 74     cnst_light_num: 90      || usage: 0.000000 remaining: 2.741877 bound: 2.887113  
 > [0.000000]: [surf_maxmin/DEBUG] index: 28     cnst_light_num: 89      || usage: 0.000000 remaining: 7.135906 bound: 7.252747  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (122) value to 0.017542
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.017542, Var(122)->weight: 1.000000, Var(122)->value: 0.017542 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.017542, Var(122).weight: 1.000000, Var(122).value: 0.017542 
 > [0.000000]: [surf_maxmin/DEBUG] index: 59     cnst_light_num: 88      || usage: 0.000000 remaining: 4.167871 bound: 4.315684  
 > [0.000000]: [surf_maxmin/DEBUG] index: 68     cnst_light_num: 87      || usage: 0.000000 remaining: 0.000000 bound: 0.249750  
-> [0.000000]: [surf_maxmin/DEBUG] var=109, var->bound=-1.000000, var->weight=1.000000, min_usage=0.023470, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=111, var->bound=-1.000000, var->weight=1.000000, min_usage=0.023470, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=118, var->bound=-1.000000, var->weight=1.000000, min_usage=0.023470, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=109, var.bound=-1.000000, var.weight=1.000000, min_usage=0.023470, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=111, var.bound=-1.000000, var.weight=1.000000, min_usage=0.023470, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=118, var.bound=-1.000000, var.weight=1.000000, min_usage=0.023470, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (109) value to 0.023470
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023470, Var(109)->weight: 1.000000, Var(109)->value: 0.023470 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023470, Var(109).weight: 1.000000, Var(109).value: 0.023470 
 > [0.000000]: [surf_maxmin/DEBUG] index: 38     cnst_light_num: 86      || usage: 0.000000 remaining: 3.751087 bound: 3.896104  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (111) value to 0.023470
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023470, Var(111)->weight: 1.000000, Var(111)->value: 0.023470 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023470, Var(111).weight: 1.000000, Var(111).value: 0.023470 
 > [0.000000]: [surf_maxmin/DEBUG] index: 54     cnst_light_num: 85      || usage: 0.000000 remaining: 1.804308 bound: 1.878122  
 > [0.000000]: [surf_maxmin/DEBUG] index: 69     cnst_light_num: 84      || usage: 0.000000 remaining: 8.730985 bound: 8.861139  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (118) value to 0.023470
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023470, Var(118)->weight: 1.000000, Var(118)->value: 0.023470 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023470, Var(118).weight: 1.000000, Var(118).value: 0.023470 
 > [0.000000]: [surf_maxmin/DEBUG] index: 28     cnst_light_num: 83      || usage: 0.000000 remaining: 2.564810 bound: 2.737263  
 > [0.000000]: [surf_maxmin/DEBUG] index: 26     cnst_light_num: 82      || usage: 0.000000 remaining: 7.605992 bound: 7.722278  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 81      || usage: 0.000000 remaining: 0.000000 bound: 0.229770  
 > [0.000000]: [surf_maxmin/DEBUG] index: 66     cnst_light_num: 80      || usage: 0.000000 remaining: 6.046675 bound: 6.253746  
 > [0.000000]: [surf_maxmin/DEBUG] index: 62     cnst_light_num: 79      || usage: 0.000000 remaining: 7.487702 bound: 7.702298  
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 78      || usage: 0.000000 remaining: 1.079910 bound: 1.168831  
-> [0.000000]: [surf_maxmin/DEBUG] var=113, var->bound=-1.000000, var->weight=1.000000, min_usage=0.052532, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=156, var->bound=-1.000000, var->weight=1.000000, min_usage=0.052532, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=113, var.bound=-1.000000, var.weight=1.000000, min_usage=0.052532, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=156, var.bound=-1.000000, var.weight=1.000000, min_usage=0.052532, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (113) value to 0.052532
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.052532, Var(113)->weight: 1.000000, Var(113)->value: 0.052532 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.052532, Var(113).weight: 1.000000, Var(113).value: 0.052532 
 > [0.000000]: [surf_maxmin/DEBUG] index: 42     cnst_light_num: 77      || usage: 0.000000 remaining: 6.792157 bound: 7.062937  
 > [0.000000]: [surf_maxmin/DEBUG] index: 31     cnst_light_num: 76      || usage: 0.000000 remaining: 9.368723 bound: 9.540460  
 > [0.000000]: [surf_maxmin/DEBUG] index: 50     cnst_light_num: 75      || usage: 0.000000 remaining: 8.560864 bound: 8.751249  
@@ -843,7 +843,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 45     cnst_light_num: 72      || usage: 0.000000 remaining: 4.138470 bound: 4.365634  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (156) value to 0.052532
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.052532, Var(156)->weight: 1.000000, Var(156)->value: 0.052532 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.052532, Var(156).weight: 1.000000, Var(156).value: 0.052532 
 > [0.000000]: [surf_maxmin/DEBUG] index: 20     cnst_light_num: 71      || usage: 0.000000 remaining: 5.229336 bound: 5.404595  
 > [0.000000]: [surf_maxmin/DEBUG] index: 52     cnst_light_num: 70      || usage: 0.000000 remaining: 9.576867 bound: 9.730270  
 > [0.000000]: [surf_maxmin/DEBUG] index: 40     cnst_light_num: 69      || usage: 0.000000 remaining: 0.000000 bound: 0.299700  
@@ -852,10 +852,10 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 65     cnst_light_num: 66      || usage: 0.000000 remaining: 5.550824 bound: 5.774226  
 > [0.000000]: [surf_maxmin/DEBUG] index: 38     cnst_light_num: 65      || usage: 0.000000 remaining: 6.938266 bound: 7.102897  
 > [0.000000]: [surf_maxmin/DEBUG] index: 23     cnst_light_num: 64      || usage: 0.000000 remaining: 3.985576 bound: 4.125874  
-> [0.000000]: [surf_maxmin/DEBUG] var=147, var->bound=-1.000000, var->weight=1.000000, min_usage=0.060227, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=147, var.bound=-1.000000, var.weight=1.000000, min_usage=0.060227, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (147) value to 0.060227
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.060227, Var(147)->weight: 1.000000, Var(147)->value: 0.060227 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.060227, Var(147).weight: 1.000000, Var(147).value: 0.060227 
 > [0.000000]: [surf_maxmin/DEBUG] index: 60     cnst_light_num: 63      || usage: 0.000000 remaining: 0.790150 bound: 1.138861  
 > [0.000000]: [surf_maxmin/DEBUG] index: 57     cnst_light_num: 62      || usage: 0.000000 remaining: 1.626935 bound: 1.938062  
 > [0.000000]: [surf_maxmin/DEBUG] index: 59     cnst_light_num: 61      || usage: 0.000000 remaining: 1.881502 bound: 2.127872  
@@ -865,11 +865,11 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 7      cnst_light_num: 57      || usage: 0.000000 remaining: 7.011837 bound: 7.362637  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 56      || usage: 0.000000 remaining: 0.000000 bound: 0.239760  
 > [0.000000]: [surf_maxmin/DEBUG] index: 36     cnst_light_num: 55      || usage: 0.000000 remaining: 1.363107 bound: 1.548452  
-> [0.000000]: [surf_maxmin/DEBUG] var=107, var->bound=-1.000000, var->weight=1.000000, min_usage=0.151955, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=124, var->bound=-1.000000, var->weight=1.000000, min_usage=0.151955, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=107, var.bound=-1.000000, var.weight=1.000000, min_usage=0.151955, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=124, var.bound=-1.000000, var.weight=1.000000, min_usage=0.151955, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (107) value to 0.151955
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.151955, Var(107)->weight: 1.000000, Var(107)->value: 0.151955 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.151955, Var(107).weight: 1.000000, Var(107).value: 0.151955 
 > [0.000000]: [surf_maxmin/DEBUG] index: 47     cnst_light_num: 54      || usage: 0.000000 remaining: 5.898751 bound: 6.563437  
 > [0.000000]: [surf_maxmin/DEBUG] index: 34     cnst_light_num: 53      || usage: 0.000000 remaining: 8.764203 bound: 9.020979  
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 52      || usage: 0.000000 remaining: 0.367055 bound: 0.569431  
@@ -881,7 +881,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 26     cnst_light_num: 46      || usage: 0.000000 remaining: 1.453623 bound: 1.828172  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (124) value to 0.151955
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.151955, Var(124)->weight: 1.000000, Var(124)->value: 0.151955 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.151955, Var(124).weight: 1.000000, Var(124).value: 0.151955 
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 45      || usage: 0.000000 remaining: 7.302255 bound: 7.932068  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 44      || usage: 0.000000 remaining: 7.271628 bound: 8.151848  
 > [0.000000]: [surf_maxmin/DEBUG] index: 17     cnst_light_num: 43      || usage: 0.000000 remaining: 8.011786 bound: 8.281718  
@@ -903,10 +903,10 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 27      || usage: 0.000000 remaining: 9.218764 bound: 9.880120  
 > [0.000000]: [surf_maxmin/DEBUG] index: 13     cnst_light_num: 26      || usage: 0.000000 remaining: 1.190898 bound: 1.608392  
 > [0.000000]: [surf_maxmin/DEBUG] index: 14     cnst_light_num: 25      || usage: 0.000000 remaining: 3.822706 bound: 4.185814  
-> [0.000000]: [surf_maxmin/DEBUG] var=143, var->bound=-1.000000, var->weight=1.000000, min_usage=0.162422, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=143, var.bound=-1.000000, var.weight=1.000000, min_usage=0.162422, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (143) value to 0.162422
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.162422, Var(143)->weight: 1.000000, Var(143)->value: 0.162422 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.162422, Var(143).weight: 1.000000, Var(143).value: 0.162422 
 > [0.000000]: [surf_maxmin/DEBUG] index: 14     cnst_light_num: 24      || usage: 0.000000 remaining: 9.155216 bound: 9.790210  
 > [0.000000]: [surf_maxmin/DEBUG] index: 13     cnst_light_num: 23      || usage: 0.000000 remaining: 8.797972 bound: 9.480519  
 > [0.000000]: [surf_maxmin/DEBUG] index: 8      cnst_light_num: 22      || usage: 0.000000 remaining: 6.211834 bound: 6.843157  
@@ -1236,188 +1236,188 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '234' usage: 12.654845 remaining: 4.035964 concurrency: 6<=6<=24
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '272' usage: 19.035465 remaining: 1.598402 concurrency: 8<=9<=24
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '224' usage: 16.651349 remaining: 9.110889 concurrency: 10<=10<=10
-> [0.000000]: [surf_maxmin/DEBUG] var=204, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004588, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=205, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004588, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=208, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004588, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=209, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004588, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=217, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004588, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=220, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004588, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=221, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004588, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=222, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004588, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=223, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004588, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=240, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004588, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=259, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004588, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=272, var->bound=-1.000000, var->weight=1.000000, min_usage=0.004588, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=204, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004588, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=205, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004588, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=208, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004588, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=209, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004588, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=217, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004588, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=220, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004588, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=221, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004588, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=222, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004588, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=223, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004588, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=240, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004588, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=259, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004588, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=272, var.bound=-1.000000, var.weight=1.000000, min_usage=0.004588, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (204) value to 0.004588
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(204)->weight: 1.000000, Var(204)->value: 0.004588 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(204).weight: 1.000000, Var(204).value: 0.004588 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (205) value to 0.004588
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(205)->weight: 1.000000, Var(205)->value: 0.004588 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(205).weight: 1.000000, Var(205).value: 0.004588 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (208) value to 0.004588
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(208)->weight: 1.000000, Var(208)->value: 0.004588 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(208).weight: 1.000000, Var(208).value: 0.004588 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (209) value to 0.004588
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(209)->weight: 1.000000, Var(209)->value: 0.004588 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(209).weight: 1.000000, Var(209).value: 0.004588 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (217) value to 0.004588
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(217)->weight: 1.000000, Var(217)->value: 0.004588 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(217).weight: 1.000000, Var(217).value: 0.004588 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (220) value to 0.004588
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(220)->weight: 1.000000, Var(220)->value: 0.004588 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(220).weight: 1.000000, Var(220).value: 0.004588 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (221) value to 0.004588
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(221)->weight: 1.000000, Var(221)->value: 0.004588 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(221).weight: 1.000000, Var(221).value: 0.004588 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (222) value to 0.004588
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(222)->weight: 1.000000, Var(222)->value: 0.004588 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(222).weight: 1.000000, Var(222).value: 0.004588 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (223) value to 0.004588
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(223)->weight: 1.000000, Var(223)->value: 0.004588 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(223).weight: 1.000000, Var(223).value: 0.004588 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (240) value to 0.004588
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(240)->weight: 1.000000, Var(240)->value: 0.004588 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(240).weight: 1.000000, Var(240).value: 0.004588 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (259) value to 0.004588
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(259)->weight: 1.000000, Var(259)->value: 0.004588 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(259).weight: 1.000000, Var(259).value: 0.004588 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (272) value to 0.004588
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(272)->weight: 1.000000, Var(272)->value: 0.004588 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.004588, Var(272).weight: 1.000000, Var(272).value: 0.004588 
 > [0.000000]: [surf_maxmin/DEBUG] index: 57     cnst_light_num: 100     || usage: 0.000000 remaining: 0.000000 bound: 0.069930  
-> [0.000000]: [surf_maxmin/DEBUG] var=203, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011179, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=215, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011179, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=216, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011179, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=226, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011179, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=230, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011179, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=244, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011179, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=253, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011179, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=254, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011179, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=203, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011179, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=215, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011179, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=216, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011179, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=226, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011179, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=230, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011179, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=244, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011179, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=253, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011179, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=254, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011179, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (203) value to 0.011179
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(203)->weight: 1.000000, Var(203)->value: 0.011179 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(203).weight: 1.000000, Var(203).value: 0.011179 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (215) value to 0.011179
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(215)->weight: 1.000000, Var(215)->value: 0.011179 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(215).weight: 1.000000, Var(215).value: 0.011179 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (216) value to 0.011179
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(216)->weight: 1.000000, Var(216)->value: 0.011179 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(216).weight: 1.000000, Var(216).value: 0.011179 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (226) value to 0.011179
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(226)->weight: 1.000000, Var(226)->value: 0.011179 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(226).weight: 1.000000, Var(226).value: 0.011179 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (230) value to 0.011179
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(230)->weight: 1.000000, Var(230)->value: 0.011179 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(230).weight: 1.000000, Var(230).value: 0.011179 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (244) value to 0.011179
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(244)->weight: 1.000000, Var(244)->value: 0.011179 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(244).weight: 1.000000, Var(244).value: 0.011179 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (253) value to 0.011179
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(253)->weight: 1.000000, Var(253)->value: 0.011179 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(253).weight: 1.000000, Var(253).value: 0.011179 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (254) value to 0.011179
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(254)->weight: 1.000000, Var(254)->value: 0.011179 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011179, Var(254).weight: 1.000000, Var(254).value: 0.011179 
 > [0.000000]: [surf_maxmin/DEBUG] index: 41     cnst_light_num: 99      || usage: 0.000000 remaining: 0.000000 bound: 0.129870  
-> [0.000000]: [surf_maxmin/DEBUG] var=206, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011967, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=214, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011967, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=224, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011967, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=228, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011967, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=235, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011967, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=255, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011967, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=261, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011967, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=206, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011967, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=214, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011967, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=224, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011967, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=228, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011967, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=235, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011967, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=255, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011967, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=261, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011967, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (206) value to 0.011967
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(206)->weight: 1.000000, Var(206)->value: 0.011967 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(206).weight: 1.000000, Var(206).value: 0.011967 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (214) value to 0.011967
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(214)->weight: 1.000000, Var(214)->value: 0.011967 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(214).weight: 1.000000, Var(214).value: 0.011967 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (224) value to 0.011967
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(224)->weight: 1.000000, Var(224)->value: 0.011967 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(224).weight: 1.000000, Var(224).value: 0.011967 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (228) value to 0.011967
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(228)->weight: 1.000000, Var(228)->value: 0.011967 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(228).weight: 1.000000, Var(228).value: 0.011967 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (235) value to 0.011967
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(235)->weight: 1.000000, Var(235)->value: 0.011967 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(235).weight: 1.000000, Var(235).value: 0.011967 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (255) value to 0.011967
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(255)->weight: 1.000000, Var(255)->value: 0.011967 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(255).weight: 1.000000, Var(255).value: 0.011967 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (261) value to 0.011967
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(261)->weight: 1.000000, Var(261)->value: 0.011967 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011967, Var(261).weight: 1.000000, Var(261).value: 0.011967 
 > [0.000000]: [surf_maxmin/DEBUG] index: 44     cnst_light_num: 98      || usage: 0.000000 remaining: 0.000000 bound: 0.209790  
-> [0.000000]: [surf_maxmin/DEBUG] var=210, var->bound=-1.000000, var->weight=1.000000, min_usage=0.018751, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=218, var->bound=-1.000000, var->weight=1.000000, min_usage=0.018751, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=219, var->bound=-1.000000, var->weight=1.000000, min_usage=0.018751, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=245, var->bound=-1.000000, var->weight=1.000000, min_usage=0.018751, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=210, var.bound=-1.000000, var.weight=1.000000, min_usage=0.018751, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=218, var.bound=-1.000000, var.weight=1.000000, min_usage=0.018751, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=219, var.bound=-1.000000, var.weight=1.000000, min_usage=0.018751, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=245, var.bound=-1.000000, var.weight=1.000000, min_usage=0.018751, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (210) value to 0.018751
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018751, Var(210)->weight: 1.000000, Var(210)->value: 0.018751 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018751, Var(210).weight: 1.000000, Var(210).value: 0.018751 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (218) value to 0.018751
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018751, Var(218)->weight: 1.000000, Var(218)->value: 0.018751 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018751, Var(218).weight: 1.000000, Var(218).value: 0.018751 
 > [0.000000]: [surf_maxmin/DEBUG] index: 63     cnst_light_num: 97      || usage: 0.000000 remaining: 0.578879 bound: 0.679321  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (219) value to 0.018751
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018751, Var(219)->weight: 1.000000, Var(219)->value: 0.018751 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018751, Var(219).weight: 1.000000, Var(219).value: 0.018751 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (245) value to 0.018751
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018751, Var(245)->weight: 1.000000, Var(245)->value: 0.018751 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018751, Var(245).weight: 1.000000, Var(245).value: 0.018751 
 > [0.000000]: [surf_maxmin/DEBUG] index: 93     cnst_light_num: 96      || usage: 0.000000 remaining: 3.076350 bound: 3.146853  
 > [0.000000]: [surf_maxmin/DEBUG] index: 45     cnst_light_num: 95      || usage: 0.000000 remaining: 3.769672 bound: 3.896104  
 > [0.000000]: [surf_maxmin/DEBUG] index: 84     cnst_light_num: 94      || usage: 0.000000 remaining: 0.000000 bound: 0.219780  
-> [0.000000]: [surf_maxmin/DEBUG] var=212, var->bound=-1.000000, var->weight=1.000000, min_usage=0.024496, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=213, var->bound=-1.000000, var->weight=1.000000, min_usage=0.024496, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=247, var->bound=-1.000000, var->weight=1.000000, min_usage=0.024496, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=251, var->bound=-1.000000, var->weight=1.000000, min_usage=0.024496, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=270, var->bound=-1.000000, var->weight=1.000000, min_usage=0.024496, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=212, var.bound=-1.000000, var.weight=1.000000, min_usage=0.024496, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=213, var.bound=-1.000000, var.weight=1.000000, min_usage=0.024496, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=247, var.bound=-1.000000, var.weight=1.000000, min_usage=0.024496, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=251, var.bound=-1.000000, var.weight=1.000000, min_usage=0.024496, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=270, var.bound=-1.000000, var.weight=1.000000, min_usage=0.024496, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (212) value to 0.024496
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.024496, Var(212)->weight: 1.000000, Var(212)->value: 0.024496 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.024496, Var(212).weight: 1.000000, Var(212).value: 0.024496 
 > [0.000000]: [surf_maxmin/DEBUG] index: 61     cnst_light_num: 93      || usage: 0.000000 remaining: 2.039851 bound: 2.127872  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (213) value to 0.024496
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.024496, Var(213)->weight: 1.000000, Var(213)->value: 0.024496 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.024496, Var(213).weight: 1.000000, Var(213).value: 0.024496 
 > [0.000000]: [surf_maxmin/DEBUG] index: 44     cnst_light_num: 92      || usage: 0.000000 remaining: 3.878060 bound: 4.035964  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (247) value to 0.024496
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.024496, Var(247)->weight: 1.000000, Var(247)->value: 0.024496 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.024496, Var(247).weight: 1.000000, Var(247).value: 0.024496 
 > [0.000000]: [surf_maxmin/DEBUG] index: 60     cnst_light_num: 91      || usage: 0.000000 remaining: 7.260437 bound: 7.472527  
 > [0.000000]: [surf_maxmin/DEBUG] index: 78     cnst_light_num: 90      || usage: 0.000000 remaining: 6.425400 bound: 6.613387  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (251) value to 0.024496
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.024496, Var(251)->weight: 1.000000, Var(251)->value: 0.024496 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.024496, Var(251).weight: 1.000000, Var(251).value: 0.024496 
 > [0.000000]: [surf_maxmin/DEBUG] index: 70     cnst_light_num: 89      || usage: 0.000000 remaining: 5.064446 bound: 5.214785  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (270) value to 0.024496
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.024496, Var(270)->weight: 1.000000, Var(270)->value: 0.024496 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.024496, Var(270).weight: 1.000000, Var(270).value: 0.024496 
 > [0.000000]: [surf_maxmin/DEBUG] index: 45     cnst_light_num: 88      || usage: 0.000000 remaining: 4.866697 bound: 5.074925  
 > [0.000000]: [surf_maxmin/DEBUG] index: 54     cnst_light_num: 87      || usage: 0.000000 remaining: 2.783177 bound: 2.847153  
 > [0.000000]: [surf_maxmin/DEBUG] index: 73     cnst_light_num: 86      || usage: 0.000000 remaining: 0.000000 bound: 0.269730  
-> [0.000000]: [surf_maxmin/DEBUG] var=231, var->bound=-1.000000, var->weight=1.000000, min_usage=0.028740, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=258, var->bound=-1.000000, var->weight=1.000000, min_usage=0.028740, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=231, var.bound=-1.000000, var.weight=1.000000, min_usage=0.028740, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=258, var.bound=-1.000000, var.weight=1.000000, min_usage=0.028740, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (231) value to 0.028740
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.028740, Var(231)->weight: 1.000000, Var(231)->value: 0.028740 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.028740, Var(231).weight: 1.000000, Var(231).value: 0.028740 
 > [0.000000]: [surf_maxmin/DEBUG] index: 63     cnst_light_num: 85      || usage: 0.000000 remaining: 7.996007 bound: 8.151848  
 > [0.000000]: [surf_maxmin/DEBUG] index: 56     cnst_light_num: 84      || usage: 0.000000 remaining: 1.988515 bound: 2.207792  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (258) value to 0.028740
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.028740, Var(258)->weight: 1.000000, Var(258)->value: 0.028740 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.028740, Var(258).weight: 1.000000, Var(258).value: 0.028740 
 > [0.000000]: [surf_maxmin/DEBUG] index: 58     cnst_light_num: 83      || usage: 0.000000 remaining: 0.000000 bound: 0.219780  
 > [0.000000]: [surf_maxmin/DEBUG] index: 52     cnst_light_num: 82      || usage: 0.000000 remaining: 3.636900 bound: 3.856144  
 > [0.000000]: [surf_maxmin/DEBUG] index: 48     cnst_light_num: 81      || usage: 0.000000 remaining: 5.787038 bound: 6.073926  
 > [0.000000]: [surf_maxmin/DEBUG] index: 76     cnst_light_num: 80      || usage: 0.000000 remaining: 6.904787 bound: 7.102897  
 > [0.000000]: [surf_maxmin/DEBUG] index: 76     cnst_light_num: 79      || usage: 0.000000 remaining: 2.965961 bound: 3.096903  
 > [0.000000]: [surf_maxmin/DEBUG] index: 63     cnst_light_num: 78      || usage: 0.000000 remaining: 4.074735 bound: 4.255744  
-> [0.000000]: [surf_maxmin/DEBUG] var=207, var->bound=-1.000000, var->weight=1.000000, min_usage=0.081677, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=211, var->bound=-1.000000, var->weight=1.000000, min_usage=0.081677, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=225, var->bound=-1.000000, var->weight=1.000000, min_usage=0.081677, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=241, var->bound=-1.000000, var->weight=1.000000, min_usage=0.081677, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=207, var.bound=-1.000000, var.weight=1.000000, min_usage=0.081677, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=211, var.bound=-1.000000, var.weight=1.000000, min_usage=0.081677, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=225, var.bound=-1.000000, var.weight=1.000000, min_usage=0.081677, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=241, var.bound=-1.000000, var.weight=1.000000, min_usage=0.081677, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (207) value to 0.081677
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.081677, Var(207)->weight: 1.000000, Var(207)->value: 0.081677 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.081677, Var(207).weight: 1.000000, Var(207).value: 0.081677 
 > [0.000000]: [surf_maxmin/DEBUG] index: 58     cnst_light_num: 77      || usage: 0.000000 remaining: 8.327882 bound: 8.671329  
 > [0.000000]: [surf_maxmin/DEBUG] index: 40     cnst_light_num: 76      || usage: 0.000000 remaining: 6.555929 bound: 6.863137  
 > [0.000000]: [surf_maxmin/DEBUG] index: 50     cnst_light_num: 75      || usage: 0.000000 remaining: 1.475985 bound: 1.838162  
@@ -1425,7 +1425,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 70     cnst_light_num: 73      || usage: 0.000000 remaining: 9.192322 bound: 9.540460  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (211) value to 0.081677
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.081677, Var(211)->weight: 1.000000, Var(211)->value: 0.081677 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.081677, Var(211).weight: 1.000000, Var(211).value: 0.081677 
 > [0.000000]: [surf_maxmin/DEBUG] index: 50     cnst_light_num: 72      || usage: 0.000000 remaining: 3.995254 bound: 4.445554  
 > [0.000000]: [surf_maxmin/DEBUG] index: 60     cnst_light_num: 71      || usage: 0.000000 remaining: 8.857261 bound: 9.130869  
 > [0.000000]: [surf_maxmin/DEBUG] index: 42     cnst_light_num: 70      || usage: 0.000000 remaining: 6.483225 bound: 6.703297  
@@ -1433,7 +1433,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 54     cnst_light_num: 68      || usage: 0.000000 remaining: 3.798887 bound: 4.235764  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (225) value to 0.081677
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.081677, Var(225)->weight: 1.000000, Var(225)->value: 0.081677 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.081677, Var(225).weight: 1.000000, Var(225).value: 0.081677 
 > [0.000000]: [surf_maxmin/DEBUG] index: 65     cnst_light_num: 67      || usage: 0.000000 remaining: 7.072223 bound: 7.462537  
 > [0.000000]: [surf_maxmin/DEBUG] index: 50     cnst_light_num: 66      || usage: 0.000000 remaining: 2.691950 bound: 2.967033  
 > [0.000000]: [surf_maxmin/DEBUG] index: 64     cnst_light_num: 65      || usage: 0.000000 remaining: 0.118066 bound: 0.439560  
@@ -1449,7 +1449,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 44     cnst_light_num: 55      || usage: 0.000000 remaining: 2.679793 bound: 2.957043  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (241) value to 0.081677
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.081677, Var(241)->weight: 1.000000, Var(241)->value: 0.081677 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.081677, Var(241).weight: 1.000000, Var(241).value: 0.081677 
 > [0.000000]: [surf_maxmin/DEBUG] index: 41     cnst_light_num: 54      || usage: 0.000000 remaining: 1.184105 bound: 1.598402  
 > [0.000000]: [surf_maxmin/DEBUG] index: 39     cnst_light_num: 53      || usage: 0.000000 remaining: 3.653829 bound: 3.896104  
 > [0.000000]: [surf_maxmin/DEBUG] index: 39     cnst_light_num: 52      || usage: 0.000000 remaining: 0.077489 bound: 0.369630  
@@ -1466,10 +1466,10 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 39     cnst_light_num: 41      || usage: 0.000000 remaining: 6.589209 bound: 6.963037  
 > [0.000000]: [surf_maxmin/DEBUG] index: 38     cnst_light_num: 40      || usage: 0.000000 remaining: 8.777468 bound: 9.170829  
 > [0.000000]: [surf_maxmin/DEBUG] index: 38     cnst_light_num: 39      || usage: 0.000000 remaining: 6.325405 bound: 6.563437  
-> [0.000000]: [surf_maxmin/DEBUG] var=202, var->bound=-1.000000, var->weight=1.000000, min_usage=0.128912, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=202, var.bound=-1.000000, var.weight=1.000000, min_usage=0.128912, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (202) value to 0.128912
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.128912, Var(202)->weight: 1.000000, Var(202)->value: 0.128912 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.128912, Var(202).weight: 1.000000, Var(202).value: 0.128912 
 > [0.000000]: [surf_maxmin/DEBUG] index: 20     cnst_light_num: 38      || usage: 0.000000 remaining: 2.032430 bound: 2.307692  
 > [0.000000]: [surf_maxmin/DEBUG] index: 21     cnst_light_num: 37      || usage: 0.000000 remaining: 6.334159 bound: 6.913087  
 > [0.000000]: [surf_maxmin/DEBUG] index: 22     cnst_light_num: 36      || usage: 0.000000 remaining: 0.404144 bound: 0.889111  
@@ -1488,10 +1488,10 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 22     cnst_light_num: 23      || usage: 0.000000 remaining: 5.378706 bound: 5.894106  
 > [0.000000]: [surf_maxmin/DEBUG] index: 21     cnst_light_num: 22      || usage: 0.000000 remaining: 7.128378 bound: 7.842158  
 > [0.000000]: [surf_maxmin/DEBUG] index: 20     cnst_light_num: 21      || usage: 0.000000 remaining: 3.080921 bound: 3.706294  
-> [0.000000]: [surf_maxmin/DEBUG] var=201, var->bound=-1.000000, var->weight=1.000000, min_usage=1.559233, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=201, var.bound=-1.000000, var.weight=1.000000, min_usage=1.559233, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (201) value to 1.559233
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.559233, Var(201)->weight: 1.000000, Var(201)->value: 1.559233 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.559233, Var(201).weight: 1.000000, Var(201).value: 1.559233 
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 20      || usage: 0.000000 remaining: 2.120434 bound: 3.656344  
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 19      || usage: 0.000000 remaining: 3.188475 bound: 5.324675  
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 18      || usage: 0.000000 remaining: 0.342262 bound: 3.136863  
@@ -1817,190 +1817,190 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '344' usage: 12.720779 remaining: 3.846154 concurrency: 6<=7<=16
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '390' usage: 8.037962 remaining: 2.907093 concurrency: 5<=6<=40
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '313' usage: 11.415584 remaining: 0.679321 concurrency: 5<=6<=40
-> [0.000000]: [surf_maxmin/DEBUG] var=302, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007198, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=307, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007198, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=308, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007198, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=309, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007198, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=311, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007198, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=312, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007198, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=327, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007198, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=328, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007198, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=335, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007198, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=338, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007198, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=352, var->bound=-1.000000, var->weight=1.000000, min_usage=0.007198, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=302, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007198, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=307, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007198, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=308, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007198, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=309, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007198, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=311, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007198, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=312, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007198, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=327, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007198, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=328, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007198, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=335, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007198, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=338, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007198, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=352, var.bound=-1.000000, var.weight=1.000000, min_usage=0.007198, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (302) value to 0.007198
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(302)->weight: 1.000000, Var(302)->value: 0.007198 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(302).weight: 1.000000, Var(302).value: 0.007198 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (307) value to 0.007198
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(307)->weight: 1.000000, Var(307)->value: 0.007198 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(307).weight: 1.000000, Var(307).value: 0.007198 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (308) value to 0.007198
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(308)->weight: 1.000000, Var(308)->value: 0.007198 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(308).weight: 1.000000, Var(308).value: 0.007198 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (309) value to 0.007198
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(309)->weight: 1.000000, Var(309)->value: 0.007198 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(309).weight: 1.000000, Var(309).value: 0.007198 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (311) value to 0.007198
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(311)->weight: 1.000000, Var(311)->value: 0.007198 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(311).weight: 1.000000, Var(311).value: 0.007198 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (312) value to 0.007198
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(312)->weight: 1.000000, Var(312)->value: 0.007198 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(312).weight: 1.000000, Var(312).value: 0.007198 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (327) value to 0.007198
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(327)->weight: 1.000000, Var(327)->value: 0.007198 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(327).weight: 1.000000, Var(327).value: 0.007198 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (328) value to 0.007198
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(328)->weight: 1.000000, Var(328)->value: 0.007198 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(328).weight: 1.000000, Var(328).value: 0.007198 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (335) value to 0.007198
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(335)->weight: 1.000000, Var(335)->value: 0.007198 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(335).weight: 1.000000, Var(335).value: 0.007198 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (338) value to 0.007198
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(338)->weight: 1.000000, Var(338)->value: 0.007198 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(338).weight: 1.000000, Var(338).value: 0.007198 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (352) value to 0.007198
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(352)->weight: 1.000000, Var(352)->value: 0.007198 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.007198, Var(352).weight: 1.000000, Var(352).value: 0.007198 
 > [0.000000]: [surf_maxmin/DEBUG] index: 39     cnst_light_num: 100     || usage: 0.000000 remaining: 0.000000 bound: 0.139860  
-> [0.000000]: [surf_maxmin/DEBUG] var=301, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=304, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=315, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=318, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=319, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=322, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=332, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=333, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=334, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=339, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=343, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=344, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=345, var->bound=-1.000000, var->weight=1.000000, min_usage=0.011252, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=301, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=304, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=315, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=318, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=319, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=322, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=332, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=333, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=334, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=339, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=343, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=344, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=345, var.bound=-1.000000, var.weight=1.000000, min_usage=0.011252, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (301) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(301)->weight: 1.000000, Var(301)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(301).weight: 1.000000, Var(301).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (304) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(304)->weight: 1.000000, Var(304)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(304).weight: 1.000000, Var(304).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (315) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(315)->weight: 1.000000, Var(315)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(315).weight: 1.000000, Var(315).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (318) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(318)->weight: 1.000000, Var(318)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(318).weight: 1.000000, Var(318).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (319) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(319)->weight: 1.000000, Var(319)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(319).weight: 1.000000, Var(319).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (322) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(322)->weight: 1.000000, Var(322)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(322).weight: 1.000000, Var(322).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (332) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(332)->weight: 1.000000, Var(332)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(332).weight: 1.000000, Var(332).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (333) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(333)->weight: 1.000000, Var(333)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(333).weight: 1.000000, Var(333).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (334) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(334)->weight: 1.000000, Var(334)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(334).weight: 1.000000, Var(334).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (339) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(339)->weight: 1.000000, Var(339)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(339).weight: 1.000000, Var(339).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (343) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(343)->weight: 1.000000, Var(343)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(343).weight: 1.000000, Var(343).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (344) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(344)->weight: 1.000000, Var(344)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(344).weight: 1.000000, Var(344).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (345) value to 0.011252
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(345)->weight: 1.000000, Var(345)->value: 0.011252 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.011252, Var(345).weight: 1.000000, Var(345).value: 0.011252 
 > [0.000000]: [surf_maxmin/DEBUG] index: 14     cnst_light_num: 99      || usage: 0.000000 remaining: 0.000000 bound: 0.299700  
-> [0.000000]: [surf_maxmin/DEBUG] var=306, var->bound=-1.000000, var->weight=1.000000, min_usage=0.018582, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=310, var->bound=-1.000000, var->weight=1.000000, min_usage=0.018582, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=313, var->bound=-1.000000, var->weight=1.000000, min_usage=0.018582, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=314, var->bound=-1.000000, var->weight=1.000000, min_usage=0.018582, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=342, var->bound=-1.000000, var->weight=1.000000, min_usage=0.018582, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=350, var->bound=-1.000000, var->weight=1.000000, min_usage=0.018582, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=368, var->bound=-1.000000, var->weight=1.000000, min_usage=0.018582, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=306, var.bound=-1.000000, var.weight=1.000000, min_usage=0.018582, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=310, var.bound=-1.000000, var.weight=1.000000, min_usage=0.018582, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=313, var.bound=-1.000000, var.weight=1.000000, min_usage=0.018582, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=314, var.bound=-1.000000, var.weight=1.000000, min_usage=0.018582, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=342, var.bound=-1.000000, var.weight=1.000000, min_usage=0.018582, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=350, var.bound=-1.000000, var.weight=1.000000, min_usage=0.018582, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=368, var.bound=-1.000000, var.weight=1.000000, min_usage=0.018582, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (306) value to 0.018582
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(306)->weight: 1.000000, Var(306)->value: 0.018582 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(306).weight: 1.000000, Var(306).value: 0.018582 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (310) value to 0.018582
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(310)->weight: 1.000000, Var(310)->value: 0.018582 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(310).weight: 1.000000, Var(310).value: 0.018582 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (313) value to 0.018582
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(313)->weight: 1.000000, Var(313)->value: 0.018582 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(313).weight: 1.000000, Var(313).value: 0.018582 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (314) value to 0.018582
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(314)->weight: 1.000000, Var(314)->value: 0.018582 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(314).weight: 1.000000, Var(314).value: 0.018582 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (342) value to 0.018582
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(342)->weight: 1.000000, Var(342)->value: 0.018582 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(342).weight: 1.000000, Var(342).value: 0.018582 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (350) value to 0.018582
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(350)->weight: 1.000000, Var(350)->value: 0.018582 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(350).weight: 1.000000, Var(350).value: 0.018582 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (368) value to 0.018582
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(368)->weight: 1.000000, Var(368)->value: 0.018582 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.018582, Var(368).weight: 1.000000, Var(368).value: 0.018582 
 > [0.000000]: [surf_maxmin/DEBUG] index: 14     cnst_light_num: 98      || usage: 0.000000 remaining: 2.790101 bound: 2.907093  
 > [0.000000]: [surf_maxmin/DEBUG] index: 35     cnst_light_num: 97      || usage: 0.000000 remaining: 0.000000 bound: 0.249750  
 > [0.000000]: [surf_maxmin/DEBUG] index: 80     cnst_light_num: 96      || usage: 0.000000 remaining: 5.032823 bound: 5.104895  
-> [0.000000]: [surf_maxmin/DEBUG] var=326, var->bound=-1.000000, var->weight=1.000000, min_usage=0.028518, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=365, var->bound=-1.000000, var->weight=1.000000, min_usage=0.028518, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=326, var.bound=-1.000000, var.weight=1.000000, min_usage=0.028518, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=365, var.bound=-1.000000, var.weight=1.000000, min_usage=0.028518, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (326) value to 0.028518
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.028518, Var(326)->weight: 1.000000, Var(326)->value: 0.028518 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.028518, Var(326).weight: 1.000000, Var(326).value: 0.028518 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (365) value to 0.028518
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.028518, Var(365)->weight: 1.000000, Var(365)->value: 0.028518 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.028518, Var(365).weight: 1.000000, Var(365).value: 0.028518 
 > [0.000000]: [surf_maxmin/DEBUG] index: 92     cnst_light_num: 95      || usage: 0.000000 remaining: 0.000000 bound: 0.239760  
-> [0.000000]: [surf_maxmin/DEBUG] var=321, var->bound=-1.000000, var->weight=1.000000, min_usage=0.047771, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=346, var->bound=-1.000000, var->weight=1.000000, min_usage=0.047771, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=370, var->bound=-1.000000, var->weight=1.000000, min_usage=0.047771, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=321, var.bound=-1.000000, var.weight=1.000000, min_usage=0.047771, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=346, var.bound=-1.000000, var.weight=1.000000, min_usage=0.047771, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=370, var.bound=-1.000000, var.weight=1.000000, min_usage=0.047771, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (321) value to 0.047771
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.047771, Var(321)->weight: 1.000000, Var(321)->value: 0.047771 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.047771, Var(321).weight: 1.000000, Var(321).value: 0.047771 
 > [0.000000]: [surf_maxmin/DEBUG] index: 23     cnst_light_num: 94      || usage: 0.000000 remaining: 4.018641 bound: 4.205794  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (346) value to 0.047771
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.047771, Var(346)->weight: 1.000000, Var(346)->value: 0.047771 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.047771, Var(346).weight: 1.000000, Var(346).value: 0.047771 
 > [0.000000]: [surf_maxmin/DEBUG] index: 58     cnst_light_num: 93      || usage: 0.000000 remaining: 6.974816 bound: 7.122877  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (370) value to 0.047771
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.047771, Var(370)->weight: 1.000000, Var(370)->value: 0.047771 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.047771, Var(370).weight: 1.000000, Var(370).value: 0.047771 
 > [0.000000]: [surf_maxmin/DEBUG] index: 85     cnst_light_num: 92      || usage: 0.000000 remaining: 4.120057 bound: 4.375624  
 > [0.000000]: [surf_maxmin/DEBUG] index: 63     cnst_light_num: 91      || usage: 0.000000 remaining: 9.066800 bound: 9.350649  
 > [0.000000]: [surf_maxmin/DEBUG] index: 89     cnst_light_num: 90      || usage: 0.000000 remaining: 0.000000 bound: 0.359640  
-> [0.000000]: [surf_maxmin/DEBUG] var=317, var->bound=-1.000000, var->weight=1.000000, min_usage=0.094009, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=324, var->bound=-1.000000, var->weight=1.000000, min_usage=0.094009, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=317, var.bound=-1.000000, var.weight=1.000000, min_usage=0.094009, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=324, var.bound=-1.000000, var.weight=1.000000, min_usage=0.094009, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (317) value to 0.094009
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.094009, Var(317)->weight: 1.000000, Var(317)->value: 0.094009 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.094009, Var(317).weight: 1.000000, Var(317).value: 0.094009 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (324) value to 0.094009
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.094009, Var(324)->weight: 1.000000, Var(324)->value: 0.094009 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.094009, Var(324).weight: 1.000000, Var(324).value: 0.094009 
 > [0.000000]: [surf_maxmin/DEBUG] index: 7      cnst_light_num: 89      || usage: 0.000000 remaining: 4.485784 bound: 4.885115  
 > [0.000000]: [surf_maxmin/DEBUG] index: 4      cnst_light_num: 88      || usage: 0.000000 remaining: 0.000000 bound: 0.399600  
 > [0.000000]: [surf_maxmin/DEBUG] index: 63     cnst_light_num: 87      || usage: 0.000000 remaining: 7.782300 bound: 8.471528  
-> [0.000000]: [surf_maxmin/DEBUG] var=303, var->bound=-1.000000, var->weight=1.000000, min_usage=0.142202, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=305, var->bound=-1.000000, var->weight=1.000000, min_usage=0.142202, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=329, var->bound=-1.000000, var->weight=1.000000, min_usage=0.142202, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=355, var->bound=-1.000000, var->weight=1.000000, min_usage=0.142202, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=303, var.bound=-1.000000, var.weight=1.000000, min_usage=0.142202, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=305, var.bound=-1.000000, var.weight=1.000000, min_usage=0.142202, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=329, var.bound=-1.000000, var.weight=1.000000, min_usage=0.142202, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=355, var.bound=-1.000000, var.weight=1.000000, min_usage=0.142202, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (303) value to 0.142202
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.142202, Var(303)->weight: 1.000000, Var(303)->value: 0.142202 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.142202, Var(303).weight: 1.000000, Var(303).value: 0.142202 
 > [0.000000]: [surf_maxmin/DEBUG] index: 45     cnst_light_num: 86      || usage: 0.000000 remaining: 8.926300 bound: 9.280719  
 > [0.000000]: [surf_maxmin/DEBUG] index: 43     cnst_light_num: 85      || usage: 0.000000 remaining: 2.225982 bound: 2.907093  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (305) value to 0.142202
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.142202, Var(305)->weight: 1.000000, Var(305)->value: 0.142202 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.142202, Var(305).weight: 1.000000, Var(305).value: 0.142202 
 > [0.000000]: [surf_maxmin/DEBUG] index: 34     cnst_light_num: 84      || usage: 0.000000 remaining: 7.001496 bound: 7.732268  
 > [0.000000]: [surf_maxmin/DEBUG] index: 62     cnst_light_num: 83      || usage: 0.000000 remaining: 4.311663 bound: 4.855145  
 > [0.000000]: [surf_maxmin/DEBUG] index: 74     cnst_light_num: 82      || usage: 0.000000 remaining: 1.415789 bound: 1.658342  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (329) value to 0.142202
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.142202, Var(329)->weight: 1.000000, Var(329)->value: 0.142202 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.142202, Var(329).weight: 1.000000, Var(329).value: 0.142202 
 > [0.000000]: [surf_maxmin/DEBUG] index: 58     cnst_light_num: 81      || usage: 0.000000 remaining: 5.694817 bound: 5.954046  
 > [0.000000]: [surf_maxmin/DEBUG] index: 30     cnst_light_num: 80      || usage: 0.000000 remaining: 8.782447 bound: 9.170829  
 > [0.000000]: [surf_maxmin/DEBUG] index: 18     cnst_light_num: 79      || usage: 0.000000 remaining: 4.018510 bound: 4.255744  
@@ -2008,7 +2008,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 18     cnst_light_num: 77      || usage: 0.000000 remaining: 3.346839 bound: 3.656344  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (355) value to 0.142202
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.142202, Var(355)->weight: 1.000000, Var(355)->value: 0.142202 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.142202, Var(355).weight: 1.000000, Var(355).value: 0.142202 
 > [0.000000]: [surf_maxmin/DEBUG] index: 52     cnst_light_num: 76      || usage: 0.000000 remaining: 4.150664 bound: 4.915085  
 > [0.000000]: [surf_maxmin/DEBUG] index: 33     cnst_light_num: 75      || usage: 0.000000 remaining: 4.834649 bound: 5.974026  
 > [0.000000]: [surf_maxmin/DEBUG] index: 31     cnst_light_num: 74      || usage: 0.000000 remaining: 1.696954 bound: 2.277722  
@@ -2020,10 +2020,10 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 19     cnst_light_num: 68      || usage: 0.000000 remaining: 4.722579 bound: 5.504496  
 > [0.000000]: [surf_maxmin/DEBUG] index: 8      cnst_light_num: 67      || usage: 0.000000 remaining: 0.055535 bound: 0.659341  
 > [0.000000]: [surf_maxmin/DEBUG] index: 64     cnst_light_num: 66      || usage: 0.000000 remaining: 3.635989 bound: 4.465534  
-> [0.000000]: [surf_maxmin/DEBUG] var=320, var->bound=-1.000000, var->weight=1.000000, min_usage=0.201077, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=320, var.bound=-1.000000, var.weight=1.000000, min_usage=0.201077, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (320) value to 0.201077
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.201077, Var(320)->weight: 1.000000, Var(320)->value: 0.201077 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.201077, Var(320).weight: 1.000000, Var(320).value: 0.201077 
 > [0.000000]: [surf_maxmin/DEBUG] index: 18     cnst_light_num: 65      || usage: 0.000000 remaining: 0.438337 bound: 0.799201  
 > [0.000000]: [surf_maxmin/DEBUG] index: 30     cnst_light_num: 64      || usage: 0.000000 remaining: 5.921236 bound: 6.273726  
 > [0.000000]: [surf_maxmin/DEBUG] index: 21     cnst_light_num: 63      || usage: 0.000000 remaining: 4.308459 bound: 4.995005  
@@ -2037,11 +2037,11 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 14     cnst_light_num: 55      || usage: 0.000000 remaining: 1.926234 bound: 2.987013  
 > [0.000000]: [surf_maxmin/DEBUG] index: 9      cnst_light_num: 54      || usage: 0.000000 remaining: 6.057243 bound: 6.453546  
 > [0.000000]: [surf_maxmin/DEBUG] index: 45     cnst_light_num: 53      || usage: 0.000000 remaining: 5.985763 bound: 6.363636  
-> [0.000000]: [surf_maxmin/DEBUG] var=316, var->bound=-1.000000, var->weight=1.000000, min_usage=0.288945, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=336, var->bound=-1.000000, var->weight=1.000000, min_usage=0.288945, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=316, var.bound=-1.000000, var.weight=1.000000, min_usage=0.288945, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=336, var.bound=-1.000000, var.weight=1.000000, min_usage=0.288945, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (316) value to 0.288945
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.288945, Var(316)->weight: 1.000000, Var(316)->value: 0.288945 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.288945, Var(316).weight: 1.000000, Var(316).value: 0.288945 
 > [0.000000]: [surf_maxmin/DEBUG] index: 28     cnst_light_num: 52      || usage: 0.000000 remaining: 1.281667 bound: 2.327672  
 > [0.000000]: [surf_maxmin/DEBUG] index: 18     cnst_light_num: 51      || usage: 0.000000 remaining: 6.258337 bound: 7.092907  
 > [0.000000]: [surf_maxmin/DEBUG] index: 10     cnst_light_num: 50      || usage: 0.000000 remaining: 8.679785 bound: 9.950050  
@@ -2058,7 +2058,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 39      || usage: 0.000000 remaining: 3.396353 bound: 4.475524  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (336) value to 0.288945
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.288945, Var(336)->weight: 1.000000, Var(336)->value: 0.288945 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.288945, Var(336).weight: 1.000000, Var(336).value: 0.288945 
 > [0.000000]: [surf_maxmin/DEBUG] index: 22     cnst_light_num: 38      || usage: 0.000000 remaining: 8.886978 bound: 9.790210  
 > [0.000000]: [surf_maxmin/DEBUG] index: 12     cnst_light_num: 37      || usage: 0.000000 remaining: 2.289452 bound: 3.766234  
 > [0.000000]: [surf_maxmin/DEBUG] index: 7      cnst_light_num: 36      || usage: 0.000000 remaining: 6.936049 bound: 7.642358  
@@ -2076,10 +2076,10 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 16     cnst_light_num: 24      || usage: 0.000000 remaining: 7.844363 bound: 9.010989  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 23      || usage: 0.000000 remaining: 5.328389 bound: 6.893107  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 22      || usage: 0.000000 remaining: 6.171176 bound: 7.512488  
-> [0.000000]: [surf_maxmin/DEBUG] var=323, var->bound=-1.000000, var->weight=1.000000, min_usage=0.301983, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=323, var.bound=-1.000000, var.weight=1.000000, min_usage=0.301983, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (323) value to 0.301983
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.301983, Var(323)->weight: 1.000000, Var(323)->value: 0.301983 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.301983, Var(323).weight: 1.000000, Var(323).value: 0.301983 
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 21      || usage: 0.000000 remaining: 3.866850 bound: 4.515485  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 20      || usage: 0.000000 remaining: 8.277577 bound: 9.640360  
 > [0.000000]: [surf_maxmin/DEBUG] index: 12     cnst_light_num: 19      || usage: 0.000000 remaining: 6.671593 bound: 8.811189  
@@ -2406,185 +2406,185 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '434' usage: 13.643856 remaining: 9.670330 concurrency: 7<=8<=9
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '474' usage: 12.365634 remaining: 3.756244 concurrency: 6<=7<=9
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '414' usage: 8.673327 remaining: 3.066933 concurrency: 4<=6<=10
-> [0.000000]: [surf_maxmin/DEBUG] var=405, var->bound=-1.000000, var->weight=1.000000, min_usage=0.013951, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=410, var->bound=-1.000000, var->weight=1.000000, min_usage=0.013951, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=412, var->bound=-1.000000, var->weight=1.000000, min_usage=0.013951, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=413, var->bound=-1.000000, var->weight=1.000000, min_usage=0.013951, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=419, var->bound=-1.000000, var->weight=1.000000, min_usage=0.013951, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=421, var->bound=-1.000000, var->weight=1.000000, min_usage=0.013951, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=423, var->bound=-1.000000, var->weight=1.000000, min_usage=0.013951, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=431, var->bound=-1.000000, var->weight=1.000000, min_usage=0.013951, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=433, var->bound=-1.000000, var->weight=1.000000, min_usage=0.013951, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=462, var->bound=-1.000000, var->weight=1.000000, min_usage=0.013951, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=482, var->bound=-1.000000, var->weight=1.000000, min_usage=0.013951, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=405, var.bound=-1.000000, var.weight=1.000000, min_usage=0.013951, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=410, var.bound=-1.000000, var.weight=1.000000, min_usage=0.013951, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=412, var.bound=-1.000000, var.weight=1.000000, min_usage=0.013951, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=413, var.bound=-1.000000, var.weight=1.000000, min_usage=0.013951, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=419, var.bound=-1.000000, var.weight=1.000000, min_usage=0.013951, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=421, var.bound=-1.000000, var.weight=1.000000, min_usage=0.013951, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=423, var.bound=-1.000000, var.weight=1.000000, min_usage=0.013951, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=431, var.bound=-1.000000, var.weight=1.000000, min_usage=0.013951, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=433, var.bound=-1.000000, var.weight=1.000000, min_usage=0.013951, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=462, var.bound=-1.000000, var.weight=1.000000, min_usage=0.013951, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=482, var.bound=-1.000000, var.weight=1.000000, min_usage=0.013951, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (405) value to 0.013951
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(405)->weight: 1.000000, Var(405)->value: 0.013951 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(405).weight: 1.000000, Var(405).value: 0.013951 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (410) value to 0.013951
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(410)->weight: 1.000000, Var(410)->value: 0.013951 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(410).weight: 1.000000, Var(410).value: 0.013951 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (412) value to 0.013951
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(412)->weight: 1.000000, Var(412)->value: 0.013951 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(412).weight: 1.000000, Var(412).value: 0.013951 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (413) value to 0.013951
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(413)->weight: 1.000000, Var(413)->value: 0.013951 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(413).weight: 1.000000, Var(413).value: 0.013951 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (419) value to 0.013951
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(419)->weight: 1.000000, Var(419)->value: 0.013951 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(419).weight: 1.000000, Var(419).value: 0.013951 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (421) value to 0.013951
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(421)->weight: 1.000000, Var(421)->value: 0.013951 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(421).weight: 1.000000, Var(421).value: 0.013951 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (423) value to 0.013951
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(423)->weight: 1.000000, Var(423)->value: 0.013951 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(423).weight: 1.000000, Var(423).value: 0.013951 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (431) value to 0.013951
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(431)->weight: 1.000000, Var(431)->value: 0.013951 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(431).weight: 1.000000, Var(431).value: 0.013951 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (433) value to 0.013951
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(433)->weight: 1.000000, Var(433)->value: 0.013951 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(433).weight: 1.000000, Var(433).value: 0.013951 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (462) value to 0.013951
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(462)->weight: 1.000000, Var(462)->value: 0.013951 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(462).weight: 1.000000, Var(462).value: 0.013951 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (482) value to 0.013951
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(482)->weight: 1.000000, Var(482)->value: 0.013951 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.013951, Var(482).weight: 1.000000, Var(482).value: 0.013951 
 > [0.000000]: [surf_maxmin/DEBUG] index: 67     cnst_light_num: 100     || usage: 0.000000 remaining: 0.000000 bound: 0.299700  
-> [0.000000]: [surf_maxmin/DEBUG] var=402, var->bound=-1.000000, var->weight=1.000000, min_usage=0.023700, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=406, var->bound=-1.000000, var->weight=1.000000, min_usage=0.023700, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=408, var->bound=-1.000000, var->weight=1.000000, min_usage=0.023700, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=415, var->bound=-1.000000, var->weight=1.000000, min_usage=0.023700, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=418, var->bound=-1.000000, var->weight=1.000000, min_usage=0.023700, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=420, var->bound=-1.000000, var->weight=1.000000, min_usage=0.023700, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=424, var->bound=-1.000000, var->weight=1.000000, min_usage=0.023700, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=402, var.bound=-1.000000, var.weight=1.000000, min_usage=0.023700, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=406, var.bound=-1.000000, var.weight=1.000000, min_usage=0.023700, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=408, var.bound=-1.000000, var.weight=1.000000, min_usage=0.023700, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=415, var.bound=-1.000000, var.weight=1.000000, min_usage=0.023700, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=418, var.bound=-1.000000, var.weight=1.000000, min_usage=0.023700, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=420, var.bound=-1.000000, var.weight=1.000000, min_usage=0.023700, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=424, var.bound=-1.000000, var.weight=1.000000, min_usage=0.023700, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (402) value to 0.023700
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(402)->weight: 1.000000, Var(402)->value: 0.023700 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(402).weight: 1.000000, Var(402).value: 0.023700 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (406) value to 0.023700
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(406)->weight: 1.000000, Var(406)->value: 0.023700 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(406).weight: 1.000000, Var(406).value: 0.023700 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (408) value to 0.023700
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(408)->weight: 1.000000, Var(408)->value: 0.023700 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(408).weight: 1.000000, Var(408).value: 0.023700 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (415) value to 0.023700
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(415)->weight: 1.000000, Var(415)->value: 0.023700 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(415).weight: 1.000000, Var(415).value: 0.023700 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (418) value to 0.023700
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(418)->weight: 1.000000, Var(418)->value: 0.023700 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(418).weight: 1.000000, Var(418).value: 0.023700 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (420) value to 0.023700
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(420)->weight: 1.000000, Var(420)->value: 0.023700 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(420).weight: 1.000000, Var(420).value: 0.023700 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (424) value to 0.023700
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(424)->weight: 1.000000, Var(424)->value: 0.023700 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.023700, Var(424).weight: 1.000000, Var(424).value: 0.023700 
 > [0.000000]: [surf_maxmin/DEBUG] index: 29     cnst_light_num: 99      || usage: 0.000000 remaining: 0.000000 bound: 0.359640  
-> [0.000000]: [surf_maxmin/DEBUG] var=414, var->bound=-1.000000, var->weight=1.000000, min_usage=0.036913, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=425, var->bound=-1.000000, var->weight=1.000000, min_usage=0.036913, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=427, var->bound=-1.000000, var->weight=1.000000, min_usage=0.036913, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=429, var->bound=-1.000000, var->weight=1.000000, min_usage=0.036913, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=435, var->bound=-1.000000, var->weight=1.000000, min_usage=0.036913, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=452, var->bound=-1.000000, var->weight=1.000000, min_usage=0.036913, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=414, var.bound=-1.000000, var.weight=1.000000, min_usage=0.036913, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=425, var.bound=-1.000000, var.weight=1.000000, min_usage=0.036913, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=427, var.bound=-1.000000, var.weight=1.000000, min_usage=0.036913, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=429, var.bound=-1.000000, var.weight=1.000000, min_usage=0.036913, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=435, var.bound=-1.000000, var.weight=1.000000, min_usage=0.036913, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=452, var.bound=-1.000000, var.weight=1.000000, min_usage=0.036913, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (414) value to 0.036913
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036913, Var(414)->weight: 1.000000, Var(414)->value: 0.036913 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036913, Var(414).weight: 1.000000, Var(414).value: 0.036913 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (425) value to 0.036913
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036913, Var(425)->weight: 1.000000, Var(425)->value: 0.036913 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036913, Var(425).weight: 1.000000, Var(425).value: 0.036913 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (427) value to 0.036913
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036913, Var(427)->weight: 1.000000, Var(427)->value: 0.036913 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036913, Var(427).weight: 1.000000, Var(427).value: 0.036913 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (429) value to 0.036913
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036913, Var(429)->weight: 1.000000, Var(429)->value: 0.036913 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036913, Var(429).weight: 1.000000, Var(429).value: 0.036913 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (435) value to 0.036913
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036913, Var(435)->weight: 1.000000, Var(435)->value: 0.036913 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036913, Var(435).weight: 1.000000, Var(435).value: 0.036913 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (452) value to 0.036913
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036913, Var(452)->weight: 1.000000, Var(452)->value: 0.036913 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036913, Var(452).weight: 1.000000, Var(452).value: 0.036913 
 > [0.000000]: [surf_maxmin/DEBUG] index: 84     cnst_light_num: 98      || usage: 0.000000 remaining: 0.000000 bound: 0.459540  
-> [0.000000]: [surf_maxmin/DEBUG] var=403, var->bound=-1.000000, var->weight=1.000000, min_usage=0.046599, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=404, var->bound=-1.000000, var->weight=1.000000, min_usage=0.046599, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=407, var->bound=-1.000000, var->weight=1.000000, min_usage=0.046599, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=416, var->bound=-1.000000, var->weight=1.000000, min_usage=0.046599, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=426, var->bound=-1.000000, var->weight=1.000000, min_usage=0.046599, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=403, var.bound=-1.000000, var.weight=1.000000, min_usage=0.046599, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=404, var.bound=-1.000000, var.weight=1.000000, min_usage=0.046599, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=407, var.bound=-1.000000, var.weight=1.000000, min_usage=0.046599, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=416, var.bound=-1.000000, var.weight=1.000000, min_usage=0.046599, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=426, var.bound=-1.000000, var.weight=1.000000, min_usage=0.046599, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (403) value to 0.046599
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.046599, Var(403)->weight: 1.000000, Var(403)->value: 0.046599 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.046599, Var(403).weight: 1.000000, Var(403).value: 0.046599 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (404) value to 0.046599
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.046599, Var(404)->weight: 1.000000, Var(404)->value: 0.046599 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.046599, Var(404).weight: 1.000000, Var(404).value: 0.046599 
 > [0.000000]: [surf_maxmin/DEBUG] index: 36     cnst_light_num: 97      || usage: 0.000000 remaining: 9.763793 bound: 9.860140  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (407) value to 0.046599
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.046599, Var(407)->weight: 1.000000, Var(407)->value: 0.046599 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.046599, Var(407).weight: 1.000000, Var(407).value: 0.046599 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (416) value to 0.046599
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.046599, Var(416)->weight: 1.000000, Var(416)->value: 0.046599 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.046599, Var(416).weight: 1.000000, Var(416).value: 0.046599 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (426) value to 0.046599
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.046599, Var(426)->weight: 1.000000, Var(426)->value: 0.046599 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.046599, Var(426).weight: 1.000000, Var(426).value: 0.046599 
 > [0.000000]: [surf_maxmin/DEBUG] index: 49     cnst_light_num: 96      || usage: 0.000000 remaining: 1.560732 bound: 2.027972  
 > [0.000000]: [surf_maxmin/DEBUG] index: 57     cnst_light_num: 95      || usage: 0.000000 remaining: 0.000000 bound: 0.399600  
-> [0.000000]: [surf_maxmin/DEBUG] var=409, var->bound=-1.000000, var->weight=1.000000, min_usage=0.068172, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=417, var->bound=-1.000000, var->weight=1.000000, min_usage=0.068172, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=444, var->bound=-1.000000, var->weight=1.000000, min_usage=0.068172, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=455, var->bound=-1.000000, var->weight=1.000000, min_usage=0.068172, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=409, var.bound=-1.000000, var.weight=1.000000, min_usage=0.068172, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=417, var.bound=-1.000000, var.weight=1.000000, min_usage=0.068172, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=444, var.bound=-1.000000, var.weight=1.000000, min_usage=0.068172, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=455, var.bound=-1.000000, var.weight=1.000000, min_usage=0.068172, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (409) value to 0.068172
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.068172, Var(409)->weight: 1.000000, Var(409)->value: 0.068172 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.068172, Var(409).weight: 1.000000, Var(409).value: 0.068172 
 > [0.000000]: [surf_maxmin/DEBUG] index: 90     cnst_light_num: 94      || usage: 0.000000 remaining: 9.436551 bound: 9.690310  
 > [0.000000]: [surf_maxmin/DEBUG] index: 31     cnst_light_num: 93      || usage: 0.000000 remaining: 6.950082 bound: 7.382617  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (417) value to 0.068172
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.068172, Var(417)->weight: 1.000000, Var(417)->value: 0.068172 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.068172, Var(417).weight: 1.000000, Var(417).value: 0.068172 
 > [0.000000]: [surf_maxmin/DEBUG] index: 32     cnst_light_num: 92      || usage: 0.000000 remaining: 0.895015 bound: 1.248751  
 > [0.000000]: [surf_maxmin/DEBUG] index: 41     cnst_light_num: 91      || usage: 0.000000 remaining: 6.666825 bound: 7.132867  
 > [0.000000]: [surf_maxmin/DEBUG] index: 82     cnst_light_num: 90      || usage: 0.000000 remaining: 3.514705 bound: 3.956044  
 > [0.000000]: [surf_maxmin/DEBUG] index: 67     cnst_light_num: 89      || usage: 0.000000 remaining: 2.726842 bound: 3.066933  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (444) value to 0.068172
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.068172, Var(444)->weight: 1.000000, Var(444)->value: 0.068172 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.068172, Var(444).weight: 1.000000, Var(444).value: 0.068172 
 > [0.000000]: [surf_maxmin/DEBUG] index: 71     cnst_light_num: 88      || usage: 0.000000 remaining: 8.404470 bound: 8.981019  
 > [0.000000]: [surf_maxmin/DEBUG] index: 25     cnst_light_num: 87      || usage: 0.000000 remaining: 8.866678 bound: 9.160839  
 > [0.000000]: [surf_maxmin/DEBUG] index: 46     cnst_light_num: 86      || usage: 0.000000 remaining: 7.947211 bound: 8.301698  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (455) value to 0.068172
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.068172, Var(455)->weight: 1.000000, Var(455)->value: 0.068172 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.068172, Var(455).weight: 1.000000, Var(455).value: 0.068172 
 > [0.000000]: [surf_maxmin/DEBUG] index: 47     cnst_light_num: 85      || usage: 0.000000 remaining: 0.000000 bound: 0.599401  
 > [0.000000]: [surf_maxmin/DEBUG] index: 83     cnst_light_num: 84      || usage: 0.000000 remaining: 5.185774 bound: 5.594406  
 > [0.000000]: [surf_maxmin/DEBUG] index: 55     cnst_light_num: 83      || usage: 0.000000 remaining: 1.636352 bound: 1.838162  
-> [0.000000]: [surf_maxmin/DEBUG] var=401, var->bound=-1.000000, var->weight=1.000000, min_usage=0.075245, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=464, var->bound=-1.000000, var->weight=1.000000, min_usage=0.075245, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=401, var.bound=-1.000000, var.weight=1.000000, min_usage=0.075245, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=464, var.bound=-1.000000, var.weight=1.000000, min_usage=0.075245, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (401) value to 0.075245
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.075245, Var(401)->weight: 1.000000, Var(401)->value: 0.075245 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.075245, Var(401).weight: 1.000000, Var(401).value: 0.075245 
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 82      || usage: 0.000000 remaining: 1.943854 bound: 2.417582  
 > [0.000000]: [surf_maxmin/DEBUG] index: 10     cnst_light_num: 81      || usage: 0.000000 remaining: 6.465660 bound: 6.663337  
 > [0.000000]: [surf_maxmin/DEBUG] index: 15     cnst_light_num: 80      || usage: 0.000000 remaining: 6.454602 bound: 6.843157  
 > [0.000000]: [surf_maxmin/DEBUG] index: 21     cnst_light_num: 79      || usage: 0.000000 remaining: 0.613333 bound: 0.969031  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (464) value to 0.075245
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.075245, Var(464)->weight: 1.000000, Var(464)->value: 0.075245 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.075245, Var(464).weight: 1.000000, Var(464).value: 0.075245 
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 78      || usage: 0.000000 remaining: 5.604611 bound: 6.223776  
 > [0.000000]: [surf_maxmin/DEBUG] index: 6      cnst_light_num: 77      || usage: 0.000000 remaining: 0.000000 bound: 0.439560  
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 76      || usage: 0.000000 remaining: 8.337354 bound: 8.961039  
-> [0.000000]: [surf_maxmin/DEBUG] var=422, var->bound=-1.000000, var->weight=1.000000, min_usage=0.209953, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=422, var.bound=-1.000000, var.weight=1.000000, min_usage=0.209953, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (422) value to 0.209953
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.209953, Var(422)->weight: 1.000000, Var(422)->value: 0.209953 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.209953, Var(422).weight: 1.000000, Var(422).value: 0.209953 
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 75      || usage: 0.000000 remaining: 0.000000 bound: 0.739261  
 > [0.000000]: [surf_maxmin/DEBUG] index: 43     cnst_light_num: 74      || usage: 0.000000 remaining: 3.910501 bound: 4.485514  
 > [0.000000]: [surf_maxmin/DEBUG] index: 13     cnst_light_num: 73      || usage: 0.000000 remaining: 0.637351 bound: 1.218781  
 > [0.000000]: [surf_maxmin/DEBUG] index: 67     cnst_light_num: 72      || usage: 0.000000 remaining: 8.292394 bound: 8.981019  
-> [0.000000]: [surf_maxmin/DEBUG] var=443, var->bound=-1.000000, var->weight=1.000000, min_usage=0.248078, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=460, var->bound=-1.000000, var->weight=1.000000, min_usage=0.248078, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=470, var->bound=-1.000000, var->weight=1.000000, min_usage=0.248078, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=443, var.bound=-1.000000, var.weight=1.000000, min_usage=0.248078, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=460, var.bound=-1.000000, var.weight=1.000000, min_usage=0.248078, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=470, var.bound=-1.000000, var.weight=1.000000, min_usage=0.248078, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (443) value to 0.248078
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.248078, Var(443)->weight: 1.000000, Var(443)->value: 0.248078 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.248078, Var(443).weight: 1.000000, Var(443).value: 0.248078 
 > [0.000000]: [surf_maxmin/DEBUG] index: 46     cnst_light_num: 71      || usage: 0.000000 remaining: 4.903913 bound: 6.603397  
 > [0.000000]: [surf_maxmin/DEBUG] index: 56     cnst_light_num: 70      || usage: 0.000000 remaining: 5.661916 bound: 6.923077  
 > [0.000000]: [surf_maxmin/DEBUG] index: 10     cnst_light_num: 69      || usage: 0.000000 remaining: 6.671691 bound: 7.712288  
@@ -2594,7 +2594,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 59     cnst_light_num: 65      || usage: 0.000000 remaining: 6.079014 bound: 7.212787  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (460) value to 0.248078
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.248078, Var(460)->weight: 1.000000, Var(460)->value: 0.248078 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.248078, Var(460).weight: 1.000000, Var(460).value: 0.248078 
 > [0.000000]: [surf_maxmin/DEBUG] index: 19     cnst_light_num: 64      || usage: 0.000000 remaining: 1.852859 bound: 2.937063  
 > [0.000000]: [surf_maxmin/DEBUG] index: 6      cnst_light_num: 63      || usage: 0.000000 remaining: 1.517831 bound: 2.447552  
 > [0.000000]: [surf_maxmin/DEBUG] index: 51     cnst_light_num: 62      || usage: 0.000000 remaining: 2.711337 bound: 4.165834  
@@ -2607,7 +2607,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 21     cnst_light_num: 55      || usage: 0.000000 remaining: 3.908501 bound: 5.144855  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (470) value to 0.248078
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.248078, Var(470)->weight: 1.000000, Var(470)->value: 0.248078 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.248078, Var(470).weight: 1.000000, Var(470).value: 0.248078 
 > [0.000000]: [surf_maxmin/DEBUG] index: 10     cnst_light_num: 54      || usage: 0.000000 remaining: 9.086266 bound: 9.800200  
 > [0.000000]: [surf_maxmin/DEBUG] index: 25     cnst_light_num: 53      || usage: 0.000000 remaining: 4.317833 bound: 5.174825  
 > [0.000000]: [surf_maxmin/DEBUG] index: 47     cnst_light_num: 52      || usage: 0.000000 remaining: 0.574793 bound: 2.097902  
@@ -2619,10 +2619,10 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 31     cnst_light_num: 46      || usage: 0.000000 remaining: 6.113568 bound: 6.903097  
 > [0.000000]: [surf_maxmin/DEBUG] index: 40     cnst_light_num: 45      || usage: 0.000000 remaining: 0.000000 bound: 1.958042  
 > [0.000000]: [surf_maxmin/DEBUG] index: 29     cnst_light_num: 44      || usage: 0.000000 remaining: 2.366551 bound: 3.756244  
-> [0.000000]: [surf_maxmin/DEBUG] var=499, var->bound=-1.000000, var->weight=1.000000, min_usage=0.371099, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=499, var.bound=-1.000000, var.weight=1.000000, min_usage=0.371099, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (499) value to 0.371099
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.371099, Var(499)->weight: 1.000000, Var(499)->value: 0.371099 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.371099, Var(499).weight: 1.000000, Var(499).value: 0.371099 
 > [0.000000]: [surf_maxmin/DEBUG] index: 38     cnst_light_num: 43      || usage: 0.000000 remaining: 4.195116 bound: 5.504496  
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 42      || usage: 0.000000 remaining: 3.396551 bound: 4.695305  
 > [0.000000]: [surf_maxmin/DEBUG] index: 18     cnst_light_num: 41      || usage: 0.000000 remaining: 4.348232 bound: 5.834166  
@@ -2644,10 +2644,10 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench medium 5 test
 > [0.000000]: [surf_maxmin/DEBUG] index: 18     cnst_light_num: 25      || usage: 0.000000 remaining: 0.897299 bound: 1.988012  
 > [0.000000]: [surf_maxmin/DEBUG] index: 9      cnst_light_num: 24      || usage: 0.000000 remaining: 0.066581 bound: 1.008991  
 > [0.000000]: [surf_maxmin/DEBUG] index: 9      cnst_light_num: 23      || usage: 0.000000 remaining: 3.392560 bound: 4.405594  
-> [0.000000]: [surf_maxmin/DEBUG] var=411, var->bound=-1.000000, var->weight=1.000000, min_usage=1.157925, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=411, var.bound=-1.000000, var.weight=1.000000, min_usage=1.157925, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (411) value to 1.157925
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.157925, Var(411)->weight: 1.000000, Var(411)->value: 1.157925 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.157925, Var(411).weight: 1.000000, Var(411).value: 1.157925 
 > [0.000000]: [surf_maxmin/DEBUG] index: 9      cnst_light_num: 22      || usage: 0.000000 remaining: 4.884981 bound: 7.072927  
 > [0.000000]: [surf_maxmin/DEBUG] index: 19     cnst_light_num: 21      || usage: 0.000000 remaining: 2.075096 bound: 4.745255  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 20      || usage: 0.000000 remaining: 3.819295 bound: 5.634366  
index 2ecb950..9a08f2c 100644 (file)
@@ -16,36 +16,36 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench small  10 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '4' usage: 1.014486 remaining: 7.082917 concurrency: 1<=1<=3
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '8' usage: 2.985015 remaining: 3.026973 concurrency: 1<=1<=-1
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '3' usage: 2.495005 remaining: 5.434565 concurrency: 1<=1<=4
-> [0.000000]: [surf_maxmin/DEBUG] var=9, var->bound=-1.000000, var->weight=1.000000, min_usage=1.014056, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=9, var.bound=-1.000000, var.weight=1.000000, min_usage=1.014056, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (9) value to 1.014056
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.014056, Var(9)->weight: 1.000000, Var(9)->value: 1.014056 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.014056, Var(9).weight: 1.000000, Var(9).value: 1.014056 
 > [0.000000]: [surf_maxmin/DEBUG] index: 8      cnst_light_num: 10      || usage: 0.000000 remaining: 0.000000 bound: 3.026973  
-> [0.000000]: [surf_maxmin/DEBUG] var=2, var->bound=-1.000000, var->weight=1.000000, min_usage=1.024059, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=10, var->bound=-1.000000, var->weight=1.000000, min_usage=1.024059, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=2, var.bound=-1.000000, var.weight=1.000000, min_usage=1.024059, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=10, var.bound=-1.000000, var.weight=1.000000, min_usage=1.024059, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (2) value to 1.024059
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.024059, Var(2)->weight: 1.000000, Var(2)->value: 1.024059 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.024059, Var(2).weight: 1.000000, Var(2).value: 1.024059 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (10) value to 1.024059
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.024059, Var(10)->weight: 1.000000, Var(10)->value: 1.024059 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.024059, Var(10).weight: 1.000000, Var(10).value: 1.024059 
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 9       || usage: 0.000000 remaining: 0.000000 bound: 2.487512  
 > [0.000000]: [surf_maxmin/DEBUG] index: 7      cnst_light_num: 8       || usage: 0.000000 remaining: 6.044024 bound: 7.082917  
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 7       || usage: 0.000000 remaining: 2.879533 bound: 5.434565  
-> [0.000000]: [surf_maxmin/DEBUG] var=1, var->bound=-1.000000, var->weight=1.000000, min_usage=1.338213, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=4, var->bound=-1.000000, var->weight=1.000000, min_usage=1.338213, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=1, var.bound=-1.000000, var.weight=1.000000, min_usage=1.338213, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=4, var.bound=-1.000000, var.weight=1.000000, min_usage=1.338213, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (1) value to 1.338213
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.338213, Var(1)->weight: 1.000000, Var(1)->value: 1.338213 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.338213, Var(1).weight: 1.000000, Var(1).value: 1.338213 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (4) value to 1.338213
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.338213, Var(4)->weight: 1.000000, Var(4)->value: 1.338213 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.338213, Var(4).weight: 1.000000, Var(4).value: 1.338213 
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 6       || usage: 0.000000 remaining: 0.000000 bound: 5.594406  
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 5       || usage: 0.000000 remaining: 1.623266 bound: 6.573427  
-> [0.000000]: [surf_maxmin/DEBUG] var=3, var->bound=-1.000000, var->weight=1.000000, min_usage=1.625653, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=3, var.bound=-1.000000, var.weight=1.000000, min_usage=1.625653, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (3) value to 1.625653
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.625653, Var(3)->weight: 1.000000, Var(3)->value: 1.625653 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.625653, Var(3).weight: 1.000000, Var(3).value: 1.625653 
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 4       || usage: 0.000000 remaining: 1.548031 bound: 9.860140  
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 3       || usage: 0.000000 remaining: 0.581095 bound: 7.282717  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 2       || usage: 0.000000 remaining: 0.000000 bound: 7.082917  
@@ -85,44 +85,44 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench small  10 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '11' usage: 4.858142 remaining: 4.975025 concurrency: 3<=3<=3
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '13' usage: 5.908591 remaining: 1.088911 concurrency: 3<=3<=-1
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '14' usage: 1.957043 remaining: 7.702298 concurrency: 1<=1<=4
-> [0.000000]: [surf_maxmin/DEBUG] var=14, var->bound=-1.000000, var->weight=1.000000, min_usage=0.184293, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=15, var->bound=-1.000000, var->weight=1.000000, min_usage=0.184293, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=17, var->bound=-1.000000, var->weight=1.000000, min_usage=0.184293, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=14, var.bound=-1.000000, var.weight=1.000000, min_usage=0.184293, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=15, var.bound=-1.000000, var.weight=1.000000, min_usage=0.184293, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=17, var.bound=-1.000000, var.weight=1.000000, min_usage=0.184293, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (14) value to 0.184293
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.184293, Var(14)->weight: 1.000000, Var(14)->value: 0.184293 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.184293, Var(14).weight: 1.000000, Var(14).value: 0.184293 
 > [0.000000]: [surf_maxmin/DEBUG] index: 9      cnst_light_num: 10      || usage: 0.000000 remaining: 7.341629 bound: 7.702298  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (15) value to 0.184293
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.184293, Var(15)->weight: 1.000000, Var(15)->value: 0.184293 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.184293, Var(15).weight: 1.000000, Var(15).value: 0.184293 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (17) value to 0.184293
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.184293, Var(17)->weight: 1.000000, Var(17)->value: 0.184293 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.184293, Var(17).weight: 1.000000, Var(17).value: 0.184293 
 > [0.000000]: [surf_maxmin/DEBUG] index: 8      cnst_light_num: 9       || usage: 0.000000 remaining: 0.000000 bound: 1.088911  
-> [0.000000]: [surf_maxmin/DEBUG] var=11, var->bound=-1.000000, var->weight=1.000000, min_usage=0.316463, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=12, var->bound=-1.000000, var->weight=1.000000, min_usage=0.316463, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=13, var->bound=-1.000000, var->weight=1.000000, min_usage=0.316463, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=19, var->bound=-1.000000, var->weight=1.000000, min_usage=0.316463, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=11, var.bound=-1.000000, var.weight=1.000000, min_usage=0.316463, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=12, var.bound=-1.000000, var.weight=1.000000, min_usage=0.316463, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=13, var.bound=-1.000000, var.weight=1.000000, min_usage=0.316463, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=19, var.bound=-1.000000, var.weight=1.000000, min_usage=0.316463, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (11) value to 0.316463
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.316463, Var(11)->weight: 1.000000, Var(11)->value: 0.316463 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.316463, Var(11).weight: 1.000000, Var(11).value: 0.316463 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (12) value to 0.316463
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.316463, Var(12)->weight: 1.000000, Var(12)->value: 0.316463 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.316463, Var(12).weight: 1.000000, Var(12).value: 0.316463 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (13) value to 0.316463
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.316463, Var(13)->weight: 1.000000, Var(13)->value: 0.316463 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.316463, Var(13).weight: 1.000000, Var(13).value: 0.316463 
 > [0.000000]: [surf_maxmin/DEBUG] index: 4      cnst_light_num: 8       || usage: 0.000000 remaining: 5.345264 bound: 6.663337  
 > [0.000000]: [surf_maxmin/DEBUG] index: 6      cnst_light_num: 7       || usage: 0.000000 remaining: 2.183786 bound: 3.366633  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (19) value to 0.316463
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.316463, Var(19)->weight: 1.000000, Var(19)->value: 0.316463 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.316463, Var(19).weight: 1.000000, Var(19).value: 0.316463 
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 6       || usage: 0.000000 remaining: 4.337989 bound: 6.053946  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 5       || usage: 0.000000 remaining: 0.000000 bound: 1.978022  
-> [0.000000]: [surf_maxmin/DEBUG] var=18, var->bound=-1.000000, var->weight=1.000000, min_usage=1.961597, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=18, var.bound=-1.000000, var.weight=1.000000, min_usage=1.961597, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (18) value to 1.961597
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.961597, Var(18)->weight: 1.000000, Var(18)->value: 1.961597 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.961597, Var(18).weight: 1.000000, Var(18).value: 1.961597 
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 4       || usage: 0.000000 remaining: 0.987622 bound: 4.975025  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 3       || usage: 0.000000 remaining: 0.000000 bound: 2.127872  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 2       || usage: 0.000000 remaining: 0.826438 bound: 4.575425  
@@ -162,36 +162,36 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench small  10 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '30' usage: 3.939560 remaining: 2.967033 concurrency: 2<=2<=-1
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '27' usage: 3.490010 remaining: 8.721279 concurrency: 1<=1<=3
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '21' usage: 3.869131 remaining: 7.462537 concurrency: 2<=2<=3
-> [0.000000]: [surf_maxmin/DEBUG] var=21, var->bound=-1.000000, var->weight=1.000000, min_usage=0.258940, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=23, var->bound=-1.000000, var->weight=1.000000, min_usage=0.258940, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=28, var->bound=-1.000000, var->weight=1.000000, min_usage=0.258940, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=21, var.bound=-1.000000, var.weight=1.000000, min_usage=0.258940, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=23, var.bound=-1.000000, var.weight=1.000000, min_usage=0.258940, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=28, var.bound=-1.000000, var.weight=1.000000, min_usage=0.258940, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (21) value to 0.258940
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.258940, Var(21)->weight: 1.000000, Var(21)->value: 0.258940 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.258940, Var(21).weight: 1.000000, Var(21).value: 0.258940 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (23) value to 0.258940
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.258940, Var(23)->weight: 1.000000, Var(23)->value: 0.258940 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.258940, Var(23).weight: 1.000000, Var(23).value: 0.258940 
 > [0.000000]: [surf_maxmin/DEBUG] index: 6      cnst_light_num: 10      || usage: 0.000000 remaining: 0.713448 bound: 1.428571  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (28) value to 0.258940
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.258940, Var(28)->weight: 1.000000, Var(28)->value: 0.258940 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.258940, Var(28).weight: 1.000000, Var(28).value: 0.258940 
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 9       || usage: 0.000000 remaining: 1.451551 bound: 2.127872  
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 8       || usage: 0.000000 remaining: 0.000000 bound: 1.258741  
-> [0.000000]: [surf_maxmin/DEBUG] var=22, var->bound=-1.000000, var->weight=1.000000, min_usage=0.493696, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=24, var->bound=-1.000000, var->weight=1.000000, min_usage=0.493696, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=25, var->bound=-1.000000, var->weight=1.000000, min_usage=0.493696, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=22, var.bound=-1.000000, var.weight=1.000000, min_usage=0.493696, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=24, var.bound=-1.000000, var.weight=1.000000, min_usage=0.493696, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=25, var.bound=-1.000000, var.weight=1.000000, min_usage=0.493696, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (22) value to 0.493696
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.493696, Var(22)->weight: 1.000000, Var(22)->value: 0.493696 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.493696, Var(22).weight: 1.000000, Var(22).value: 0.493696 
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 7       || usage: 0.000000 remaining: 5.661363 bound: 6.863137  
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 6       || usage: 0.000000 remaining: 1.851017 bound: 3.856144  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (24) value to 0.493696
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.493696, Var(24)->weight: 1.000000, Var(24)->value: 0.493696 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.493696, Var(24).weight: 1.000000, Var(24).value: 0.493696 
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 5       || usage: 0.000000 remaining: 7.221658 bound: 8.721279  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (25) value to 0.493696
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.493696, Var(25)->weight: 1.000000, Var(25)->value: 0.493696 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.493696, Var(25).weight: 1.000000, Var(25).value: 0.493696 
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 4       || usage: 0.000000 remaining: 0.000000 bound: 3.396603  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 3       || usage: 0.000000 remaining: 1.022089 bound: 2.967033  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 2       || usage: 0.000000 remaining: 6.051192 bound: 7.462537  
@@ -231,44 +231,44 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench small  10 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '38' usage: 3.966533 remaining: 4.475524 concurrency: 2<=2<=3
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '36' usage: 4.104396 remaining: 1.678322 concurrency: 3<=3<=4
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '37' usage: 0.000000 remaining: 0.139860 concurrency: 0<=1<=4
-> [0.000000]: [surf_maxmin/DEBUG] var=36, var->bound=-1.000000, var->weight=1.000000, min_usage=0.408908, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=38, var->bound=-1.000000, var->weight=1.000000, min_usage=0.408908, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=39, var->bound=-1.000000, var->weight=1.000000, min_usage=0.408908, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=36, var.bound=-1.000000, var.weight=1.000000, min_usage=0.408908, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=38, var.bound=-1.000000, var.weight=1.000000, min_usage=0.408908, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=39, var.bound=-1.000000, var.weight=1.000000, min_usage=0.408908, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (36) value to 0.408908
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.408908, Var(36)->weight: 1.000000, Var(36)->value: 0.408908 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.408908, Var(36).weight: 1.000000, Var(36).value: 0.408908 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (38) value to 0.408908
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.408908, Var(38)->weight: 1.000000, Var(38)->value: 0.408908 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.408908, Var(38).weight: 1.000000, Var(38).value: 0.408908 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (39) value to 0.408908
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.408908, Var(39)->weight: 1.000000, Var(39)->value: 0.408908 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.408908, Var(39).weight: 1.000000, Var(39).value: 0.408908 
 > [0.000000]: [surf_maxmin/DEBUG] index: 8      cnst_light_num: 9       || usage: 0.000000 remaining: 0.000000 bound: 1.678322  
-> [0.000000]: [surf_maxmin/DEBUG] var=32, var->bound=-1.000000, var->weight=1.000000, min_usage=0.565462, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=33, var->bound=-1.000000, var->weight=1.000000, min_usage=0.565462, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=32, var.bound=-1.000000, var.weight=1.000000, min_usage=0.565462, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=33, var.bound=-1.000000, var.weight=1.000000, min_usage=0.565462, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (32) value to 0.565462
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.565462, Var(32)->weight: 1.000000, Var(32)->value: 0.565462 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.565462, Var(32).weight: 1.000000, Var(32).value: 0.565462 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (33) value to 0.565462
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.565462, Var(33)->weight: 1.000000, Var(33)->value: 0.565462 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.565462, Var(33).weight: 1.000000, Var(33).value: 0.565462 
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 8       || usage: 0.000000 remaining: 0.541481 bound: 4.375624  
 > [0.000000]: [surf_maxmin/DEBUG] index: 4      cnst_light_num: 7       || usage: 0.000000 remaining: 0.000000 bound: 1.758242  
-> [0.000000]: [surf_maxmin/DEBUG] var=31, var->bound=-1.000000, var->weight=1.000000, min_usage=0.757364, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=40, var->bound=-1.000000, var->weight=1.000000, min_usage=0.757364, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=31, var.bound=-1.000000, var.weight=1.000000, min_usage=0.757364, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=40, var.bound=-1.000000, var.weight=1.000000, min_usage=0.757364, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (31) value to 0.757364
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.757364, Var(31)->weight: 1.000000, Var(31)->value: 0.757364 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.757364, Var(31).weight: 1.000000, Var(31).value: 0.757364 
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 6       || usage: 0.000000 remaining: 9.030772 bound: 9.950050  
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 5       || usage: 0.000000 remaining: 3.662606 bound: 5.414585  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (40) value to 0.757364
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.757364, Var(40)->weight: 1.000000, Var(40)->value: 0.757364 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.757364, Var(40).weight: 1.000000, Var(40).value: 0.757364 
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 4       || usage: 0.000000 remaining: 0.000000 bound: 3.656344  
-> [0.000000]: [surf_maxmin/DEBUG] var=35, var->bound=-1.000000, var->weight=1.000000, min_usage=1.232357, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=35, var.bound=-1.000000, var.weight=1.000000, min_usage=1.232357, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (35) value to 1.232357
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.232357, Var(35)->weight: 1.000000, Var(35)->value: 1.232357 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.232357, Var(35).weight: 1.000000, Var(35).value: 1.232357 
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 3       || usage: 0.000000 remaining: 0.095809 bound: 4.255744  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 2       || usage: 0.000000 remaining: 0.000000 bound: 8.941059  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 1       || usage: 0.000000 remaining: 0.886438 bound: 4.475524  
@@ -307,40 +307,40 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench small  10 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '50' usage: 5.187812 remaining: 4.485514 concurrency: 2<=2<=4
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '46' usage: 3.005994 remaining: 6.933067 concurrency: 1<=2<=4
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '43' usage: 1.075924 remaining: 4.485514 concurrency: 1<=1<=4
-> [0.000000]: [surf_maxmin/DEBUG] var=42, var->bound=-1.000000, var->weight=1.000000, min_usage=0.182815, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=46, var->bound=-1.000000, var->weight=1.000000, min_usage=0.182815, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=50, var->bound=-1.000000, var->weight=1.000000, min_usage=0.182815, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=42, var.bound=-1.000000, var.weight=1.000000, min_usage=0.182815, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=46, var.bound=-1.000000, var.weight=1.000000, min_usage=0.182815, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=50, var.bound=-1.000000, var.weight=1.000000, min_usage=0.182815, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (42) value to 0.182815
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.182815, Var(42)->weight: 1.000000, Var(42)->value: 0.182815 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.182815, Var(42).weight: 1.000000, Var(42).value: 0.182815 
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 10      || usage: 0.000000 remaining: 5.372434 bound: 5.524476  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (46) value to 0.182815
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.182815, Var(46)->weight: 1.000000, Var(46)->value: 0.182815 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.182815, Var(46).weight: 1.000000, Var(46).value: 0.182815 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (50) value to 0.182815
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.182815, Var(50)->weight: 1.000000, Var(50)->value: 0.182815 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.182815, Var(50).weight: 1.000000, Var(50).value: 0.182815 
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 9       || usage: 0.000000 remaining: 0.000000 bound: 0.599401  
-> [0.000000]: [surf_maxmin/DEBUG] var=41, var->bound=-1.000000, var->weight=1.000000, min_usage=0.380694, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=44, var->bound=-1.000000, var->weight=1.000000, min_usage=0.380694, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=47, var->bound=-1.000000, var->weight=1.000000, min_usage=0.380694, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=41, var.bound=-1.000000, var.weight=1.000000, min_usage=0.380694, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=44, var.bound=-1.000000, var.weight=1.000000, min_usage=0.380694, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=47, var.bound=-1.000000, var.weight=1.000000, min_usage=0.380694, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (41) value to 0.380694
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.380694, Var(41)->weight: 1.000000, Var(41)->value: 0.380694 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.380694, Var(41).weight: 1.000000, Var(41).value: 0.380694 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (44) value to 0.380694
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.380694, Var(44)->weight: 1.000000, Var(44)->value: 0.380694 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.380694, Var(44).weight: 1.000000, Var(44).value: 0.380694 
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 8       || usage: 0.000000 remaining: 0.977541 bound: 2.507493  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (47) value to 0.380694
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.380694, Var(47)->weight: 1.000000, Var(47)->value: 0.380694 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.380694, Var(47).weight: 1.000000, Var(47).value: 0.380694 
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 7       || usage: 0.000000 remaining: 4.075916 bound: 4.485514  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 6       || usage: 0.000000 remaining: 1.304610 bound: 2.117882  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 5       || usage: 0.000000 remaining: 0.000000 bound: 3.556444  
-> [0.000000]: [surf_maxmin/DEBUG] var=43, var->bound=-1.000000, var->weight=1.000000, min_usage=1.071335, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=43, var.bound=-1.000000, var.weight=1.000000, min_usage=1.071335, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (43) value to 1.071335
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.071335, Var(43)->weight: 1.000000, Var(43)->value: 1.071335 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.071335, Var(43).weight: 1.000000, Var(43).value: 1.071335 
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 4       || usage: 0.000000 remaining: 1.585454 bound: 2.447552  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 3       || usage: 0.000000 remaining: 0.000000 bound: 2.097902  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 2       || usage: 0.000000 remaining: 2.853240 bound: 4.485514  
@@ -380,44 +380,44 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench small  10 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '52' usage: 5.824675 remaining: 6.383616 concurrency: 3<=3<=3
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '56' usage: 2.324176 remaining: 0.769231 concurrency: 2<=2<=3
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '51' usage: 1.348651 remaining: 4.935065 concurrency: 1<=1<=4
-> [0.000000]: [surf_maxmin/DEBUG] var=52, var->bound=-1.000000, var->weight=1.000000, min_usage=0.194386, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=53, var->bound=-1.000000, var->weight=1.000000, min_usage=0.194386, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=56, var->bound=-1.000000, var->weight=1.000000, min_usage=0.194386, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=57, var->bound=-1.000000, var->weight=1.000000, min_usage=0.194386, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=59, var->bound=-1.000000, var->weight=1.000000, min_usage=0.194386, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=52, var.bound=-1.000000, var.weight=1.000000, min_usage=0.194386, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=53, var.bound=-1.000000, var.weight=1.000000, min_usage=0.194386, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=56, var.bound=-1.000000, var.weight=1.000000, min_usage=0.194386, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=57, var.bound=-1.000000, var.weight=1.000000, min_usage=0.194386, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=59, var.bound=-1.000000, var.weight=1.000000, min_usage=0.194386, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (52) value to 0.194386
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.194386, Var(52)->weight: 1.000000, Var(52)->value: 0.194386 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.194386, Var(52).weight: 1.000000, Var(52).value: 0.194386 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (53) value to 0.194386
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.194386, Var(53)->weight: 1.000000, Var(53)->value: 0.194386 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.194386, Var(53).weight: 1.000000, Var(53).value: 0.194386 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (56) value to 0.194386
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.194386, Var(56)->weight: 1.000000, Var(56)->value: 0.194386 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.194386, Var(56).weight: 1.000000, Var(56).value: 0.194386 
 > [0.000000]: [surf_maxmin/DEBUG] index: 9      cnst_light_num: 10      || usage: 0.000000 remaining: 4.672906 bound: 4.935065  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (57) value to 0.194386
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.194386, Var(57)->weight: 1.000000, Var(57)->value: 0.194386 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.194386, Var(57).weight: 1.000000, Var(57).value: 0.194386 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (59) value to 0.194386
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.194386, Var(59)->weight: 1.000000, Var(59)->value: 0.194386 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.194386, Var(59).weight: 1.000000, Var(59).value: 0.194386 
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 9       || usage: 0.000000 remaining: 0.000000 bound: 1.248751  
-> [0.000000]: [surf_maxmin/DEBUG] var=54, var->bound=-1.000000, var->weight=1.000000, min_usage=0.330969, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=54, var.bound=-1.000000, var.weight=1.000000, min_usage=0.330969, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (54) value to 0.330969
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.330969, Var(54)->weight: 1.000000, Var(54)->value: 0.330969 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.330969, Var(54).weight: 1.000000, Var(54).value: 0.330969 
 > [0.000000]: [surf_maxmin/DEBUG] index: 7      cnst_light_num: 8       || usage: 0.000000 remaining: 5.027881 bound: 6.383616  
 > [0.000000]: [surf_maxmin/DEBUG] index: 6      cnst_light_num: 7       || usage: 0.000000 remaining: 6.410722 bound: 7.262737  
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 6       || usage: 0.000000 remaining: 0.000000 bound: 0.769231  
-> [0.000000]: [surf_maxmin/DEBUG] var=51, var->bound=-1.000000, var->weight=1.000000, min_usage=1.219766, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=58, var->bound=-1.000000, var->weight=1.000000, min_usage=1.219766, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=51, var.bound=-1.000000, var.weight=1.000000, min_usage=1.219766, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=58, var.bound=-1.000000, var.weight=1.000000, min_usage=1.219766, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (51) value to 1.219766
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.219766, Var(51)->weight: 1.000000, Var(51)->value: 1.219766 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.219766, Var(51).weight: 1.000000, Var(51).value: 1.219766 
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 5       || usage: 0.000000 remaining: 1.051250 bound: 4.255744  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (58) value to 1.219766
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.219766, Var(58)->weight: 1.000000, Var(58)->value: 1.219766 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.219766, Var(58).weight: 1.000000, Var(58).value: 1.219766 
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 4       || usage: 0.000000 remaining: 2.727287 bound: 6.793207  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 3       || usage: 0.000000 remaining: 0.000000 bound: 3.456543  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 2       || usage: 0.000000 remaining: 1.596251 bound: 3.636364  
@@ -457,35 +457,35 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench small  10 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '63' usage: 3.103397 remaining: 5.574426 concurrency: 2<=2<=3
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '70' usage: 1.173327 remaining: 3.576424 concurrency: 1<=2<=4
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '67' usage: 0.000000 remaining: 5.854146 concurrency: 0<=0<=4
-> [0.000000]: [surf_maxmin/DEBUG] var=61, var->bound=-1.000000, var->weight=1.000000, min_usage=0.596470, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=64, var->bound=-1.000000, var->weight=1.000000, min_usage=0.596470, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=61, var.bound=-1.000000, var.weight=1.000000, min_usage=0.596470, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=64, var.bound=-1.000000, var.weight=1.000000, min_usage=0.596470, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (61) value to 0.596470
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.596470, Var(61)->weight: 1.000000, Var(61)->value: 0.596470 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.596470, Var(61).weight: 1.000000, Var(61).value: 0.596470 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (64) value to 0.596470
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.596470, Var(64)->weight: 1.000000, Var(64)->value: 0.596470 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.596470, Var(64).weight: 1.000000, Var(64).value: 0.596470 
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 9       || usage: 0.000000 remaining: 0.000000 bound: 2.937063  
-> [0.000000]: [surf_maxmin/DEBUG] var=62, var->bound=-1.000000, var->weight=1.000000, min_usage=0.840184, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=66, var->bound=-1.000000, var->weight=1.000000, min_usage=0.840184, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=67, var->bound=-1.000000, var->weight=1.000000, min_usage=0.840184, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=62, var.bound=-1.000000, var.weight=1.000000, min_usage=0.840184, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=66, var.bound=-1.000000, var.weight=1.000000, min_usage=0.840184, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=67, var.bound=-1.000000, var.weight=1.000000, min_usage=0.840184, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (62) value to 0.840184
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.840184, Var(62)->weight: 1.000000, Var(62)->value: 0.840184 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.840184, Var(62).weight: 1.000000, Var(62).value: 0.840184 
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 8       || usage: 0.000000 remaining: 5.699228 bound: 7.852148  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (66) value to 0.840184
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.840184, Var(66)->weight: 1.000000, Var(66)->value: 0.840184 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.840184, Var(66).weight: 1.000000, Var(66).value: 0.840184 
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 7       || usage: 0.000000 remaining: 2.590613 bound: 3.576424  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (67) value to 0.840184
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.840184, Var(67)->weight: 1.000000, Var(67)->value: 0.840184 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.840184, Var(67).weight: 1.000000, Var(67).value: 0.840184 
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 6       || usage: 0.000000 remaining: 3.285095 bound: 5.574426  
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 5       || usage: 0.000000 remaining: 0.000000 bound: 5.684316  
-> [0.000000]: [surf_maxmin/DEBUG] var=63, var->bound=-1.000000, var->weight=1.000000, min_usage=1.205488, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=63, var.bound=-1.000000, var.weight=1.000000, min_usage=1.205488, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (63) value to 1.205488
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.205488, Var(63)->weight: 1.000000, Var(63)->value: 1.205488 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.205488, Var(63).weight: 1.000000, Var(63).value: 1.205488 
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 4       || usage: 0.000000 remaining: 3.912988 bound: 6.843157  
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 3       || usage: 0.000000 remaining: 0.000000 bound: 5.944056  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 2       || usage: 0.000000 remaining: 5.529444 bound: 7.422577  
@@ -525,44 +525,44 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench small  10 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '80' usage: 3.623377 remaining: 7.912088 concurrency: 3<=3<=4
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '75' usage: 4.765235 remaining: 0.539461 concurrency: 3<=3<=4
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '74' usage: 1.476024 remaining: 1.428571 concurrency: 1<=1<=4
-> [0.000000]: [surf_maxmin/DEBUG] var=74, var->bound=-1.000000, var->weight=1.000000, min_usage=0.113208, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=75, var->bound=-1.000000, var->weight=1.000000, min_usage=0.113208, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=76, var->bound=-1.000000, var->weight=1.000000, min_usage=0.113208, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=77, var->bound=-1.000000, var->weight=1.000000, min_usage=0.113208, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=74, var.bound=-1.000000, var.weight=1.000000, min_usage=0.113208, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=75, var.bound=-1.000000, var.weight=1.000000, min_usage=0.113208, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=76, var.bound=-1.000000, var.weight=1.000000, min_usage=0.113208, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=77, var.bound=-1.000000, var.weight=1.000000, min_usage=0.113208, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (74) value to 0.113208
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.113208, Var(74)->weight: 1.000000, Var(74)->value: 0.113208 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.113208, Var(74).weight: 1.000000, Var(74).value: 0.113208 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (75) value to 0.113208
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.113208, Var(75)->weight: 1.000000, Var(75)->value: 0.113208 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.113208, Var(75).weight: 1.000000, Var(75).value: 0.113208 
 > [0.000000]: [surf_maxmin/DEBUG] index: 6      cnst_light_num: 10      || usage: 0.000000 remaining: 0.783405 bound: 1.168831  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (76) value to 0.113208
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.113208, Var(76)->weight: 1.000000, Var(76)->value: 0.113208 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.113208, Var(76).weight: 1.000000, Var(76).value: 0.113208 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (77) value to 0.113208
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.113208, Var(77)->weight: 1.000000, Var(77)->value: 0.113208 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.113208, Var(77).weight: 1.000000, Var(77).value: 0.113208 
 > [0.000000]: [surf_maxmin/DEBUG] index: 6      cnst_light_num: 9       || usage: 0.000000 remaining: 1.261474 bound: 1.428571  
 > [0.000000]: [surf_maxmin/DEBUG] index: 6      cnst_light_num: 8       || usage: 0.000000 remaining: 0.000000 bound: 0.539461  
-> [0.000000]: [surf_maxmin/DEBUG] var=71, var->bound=-1.000000, var->weight=1.000000, min_usage=0.854701, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=73, var->bound=-1.000000, var->weight=1.000000, min_usage=0.854701, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=71, var.bound=-1.000000, var.weight=1.000000, min_usage=0.854701, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=73, var.bound=-1.000000, var.weight=1.000000, min_usage=0.854701, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (71) value to 0.854701
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.854701, Var(71)->weight: 1.000000, Var(71)->value: 0.854701 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.854701, Var(71).weight: 1.000000, Var(71).value: 0.854701 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (73) value to 0.854701
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.854701, Var(73)->weight: 1.000000, Var(73)->value: 0.854701 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.854701, Var(73).weight: 1.000000, Var(73).value: 0.854701 
 > [0.000000]: [surf_maxmin/DEBUG] index: 3      cnst_light_num: 7       || usage: 0.000000 remaining: 0.000000 bound: 3.446553  
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 6       || usage: 0.000000 remaining: 2.798086 bound: 4.355644  
-> [0.000000]: [surf_maxmin/DEBUG] var=72, var->bound=-1.000000, var->weight=1.000000, min_usage=1.655984, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=80, var->bound=-1.000000, var->weight=1.000000, min_usage=1.655984, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=72, var.bound=-1.000000, var.weight=1.000000, min_usage=1.655984, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=80, var.bound=-1.000000, var.weight=1.000000, min_usage=1.655984, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (72) value to 1.655984
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.655984, Var(72)->weight: 1.000000, Var(72)->value: 1.655984 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.655984, Var(72).weight: 1.000000, Var(72).value: 1.655984 
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 5       || usage: 0.000000 remaining: 3.146068 bound: 7.882118  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (80) value to 1.655984
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.655984, Var(80)->weight: 1.000000, Var(80)->value: 1.655984 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.655984, Var(80).weight: 1.000000, Var(80).value: 1.655984 
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 4       || usage: 0.000000 remaining: 3.590351 bound: 7.262737  
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 3       || usage: 0.000000 remaining: 5.451282 bound: 7.912088  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 2       || usage: 0.000000 remaining: 0.000000 bound: 7.782218  
@@ -602,40 +602,40 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench small  10 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '82' usage: 3.173826 remaining: 7.812188 concurrency: 2<=2<=4
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '87' usage: 2.877123 remaining: 5.074925 concurrency: 1<=2<=4
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '83' usage: 1.522478 remaining: 0.199800 concurrency: 1<=1<=3
-> [0.000000]: [surf_maxmin/DEBUG] var=83, var->bound=-1.000000, var->weight=1.000000, min_usage=0.036726, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=85, var->bound=-1.000000, var->weight=1.000000, min_usage=0.036726, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=89, var->bound=-1.000000, var->weight=1.000000, min_usage=0.036726, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=83, var.bound=-1.000000, var.weight=1.000000, min_usage=0.036726, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=85, var.bound=-1.000000, var.weight=1.000000, min_usage=0.036726, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=89, var.bound=-1.000000, var.weight=1.000000, min_usage=0.036726, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (83) value to 0.036726
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036726, Var(83)->weight: 1.000000, Var(83)->value: 0.036726 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036726, Var(83).weight: 1.000000, Var(83).value: 0.036726 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (85) value to 0.036726
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036726, Var(85)->weight: 1.000000, Var(85)->value: 0.036726 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036726, Var(85).weight: 1.000000, Var(85).value: 0.036726 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (89) value to 0.036726
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036726, Var(89)->weight: 1.000000, Var(89)->value: 0.036726 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.036726, Var(89).weight: 1.000000, Var(89).value: 0.036726 
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 10      || usage: 0.000000 remaining: 0.000000 bound: 0.189810  
 > [0.000000]: [surf_maxmin/DEBUG] index: 5      cnst_light_num: 9       || usage: 0.000000 remaining: 0.143886 bound: 0.199800  
-> [0.000000]: [surf_maxmin/DEBUG] var=81, var->bound=-1.000000, var->weight=1.000000, min_usage=0.133180, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=82, var->bound=-1.000000, var->weight=1.000000, min_usage=0.133180, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=84, var->bound=-1.000000, var->weight=1.000000, min_usage=0.133180, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=81, var.bound=-1.000000, var.weight=1.000000, min_usage=0.133180, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=82, var.bound=-1.000000, var.weight=1.000000, min_usage=0.133180, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=84, var.bound=-1.000000, var.weight=1.000000, min_usage=0.133180, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (81) value to 0.133180
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.133180, Var(81)->weight: 1.000000, Var(81)->value: 0.133180 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.133180, Var(81).weight: 1.000000, Var(81).value: 0.133180 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (82) value to 0.133180
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.133180, Var(82)->weight: 1.000000, Var(82)->value: 0.133180 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.133180, Var(82).weight: 1.000000, Var(82).value: 0.133180 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (84) value to 0.133180
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.133180, Var(84)->weight: 1.000000, Var(84)->value: 0.133180 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.133180, Var(84).weight: 1.000000, Var(84).value: 0.133180 
 > [0.000000]: [surf_maxmin/DEBUG] index: 7      cnst_light_num: 8       || usage: 0.000000 remaining: 7.532445 bound: 7.812188  
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 7       || usage: 0.000000 remaining: 7.706925 bound: 8.081918  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 6       || usage: 0.000000 remaining: 0.000000 bound: 0.609391  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 5       || usage: 0.000000 remaining: 4.876179 bound: 5.074925  
-> [0.000000]: [surf_maxmin/DEBUG] var=88, var->bound=-1.000000, var->weight=1.000000, min_usage=0.552648, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=88, var.bound=-1.000000, var.weight=1.000000, min_usage=0.552648, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (88) value to 0.552648
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.552648, Var(88)->weight: 1.000000, Var(88)->value: 0.552648 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.552648, Var(88).weight: 1.000000, Var(88).value: 0.552648 
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 4       || usage: 0.000000 remaining: 2.232278 bound: 3.776224  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 3       || usage: 0.000000 remaining: 5.081262 bound: 5.934066  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 2       || usage: 0.000000 remaining: 3.095879 bound: 4.025974  
@@ -675,36 +675,36 @@ $ $SG_TEST_EXENV ${bindir:=.}/maxmin_bench small  10 test
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '91' usage: 1.179321 remaining: 8.421578 concurrency: 1<=1<=4
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '96' usage: 2.234266 remaining: 3.876124 concurrency: 1<=1<=3
 > [0.000000]: [surf_maxmin/DEBUG] Constraint '93' usage: 4.747253 remaining: 8.971029 concurrency: 3<=3<=3
-> [0.000000]: [surf_maxmin/DEBUG] var=91, var->bound=-1.000000, var->weight=1.000000, min_usage=0.147116, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=94, var->bound=-1.000000, var->weight=1.000000, min_usage=0.147116, var->bound*var->weight=-1.000000
-> [0.000000]: [surf_maxmin/DEBUG] var=97, var->bound=-1.000000, var->weight=1.000000, min_usage=0.147116, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=91, var.bound=-1.000000, var.weight=1.000000, min_usage=0.147116, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=94, var.bound=-1.000000, var.weight=1.000000, min_usage=0.147116, var.bound*var.weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=97, var.bound=-1.000000, var.weight=1.000000, min_usage=0.147116, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (91) value to 0.147116
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.147116, Var(91)->weight: 1.000000, Var(91)->value: 0.147116 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.147116, Var(91).weight: 1.000000, Var(91).value: 0.147116 
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (94) value to 0.147116
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.147116, Var(94)->weight: 1.000000, Var(94)->value: 0.147116 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.147116, Var(94).weight: 1.000000, Var(94).value: 0.147116 
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 10      || usage: 0.000000 remaining: 3.978948 bound: 4.585415  
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (97) value to 0.147116
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.147116, Var(97)->weight: 1.000000, Var(97)->value: 0.147116 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.147116, Var(97).weight: 1.000000, Var(97).value: 0.147116 
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 9       || usage: 0.000000 remaining: 0.000000 bound: 0.949051  
-> [0.000000]: [surf_maxmin/DEBUG] var=93, var->bound=-1.000000, var->weight=1.000000, min_usage=0.194272, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=93, var.bound=-1.000000, var.weight=1.000000, min_usage=0.194272, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (93) value to 0.194272
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.194272, Var(93)->weight: 1.000000, Var(93)->value: 0.194272 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.194272, Var(93).weight: 1.000000, Var(93).value: 0.194272 
 > [0.000000]: [surf_maxmin/DEBUG] index: 6      cnst_light_num: 8       || usage: 0.000000 remaining: 0.000000 bound: 0.649351  
 > [0.000000]: [surf_maxmin/DEBUG] index: 6      cnst_light_num: 7       || usage: 0.000000 remaining: 8.192469 bound: 8.421578  
-> [0.000000]: [surf_maxmin/DEBUG] var=92, var->bound=-1.000000, var->weight=1.000000, min_usage=0.546822, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=92, var.bound=-1.000000, var.weight=1.000000, min_usage=0.546822, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (92) value to 0.546822
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.546822, Var(92)->weight: 1.000000, Var(92)->value: 0.546822 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 0.546822, Var(92).weight: 1.000000, Var(92).value: 0.546822 
 > [0.000000]: [surf_maxmin/DEBUG] index: 4      cnst_light_num: 6       || usage: 0.000000 remaining: 0.000000 bound: 1.198801  
 > [0.000000]: [surf_maxmin/DEBUG] index: 4      cnst_light_num: 5       || usage: 0.000000 remaining: 7.799890 bound: 8.541459  
-> [0.000000]: [surf_maxmin/DEBUG] var=95, var->bound=-1.000000, var->weight=1.000000, min_usage=1.734854, var->bound*var->weight=-1.000000
+> [0.000000]: [surf_maxmin/DEBUG] var=95, var.bound=-1.000000, var.weight=1.000000, min_usage=1.734854, var.bound*var.weight=-1.000000
 > [0.000000]: [surf_maxmin/DEBUG] Setting var (95) value to 1.734854
 > 
-> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.734854, Var(95)->weight: 1.000000, Var(95)->value: 1.734854 
+> [0.000000]: [surf_maxmin/DEBUG] Min usage: 1.734854, Var(95).weight: 1.000000, Var(95).value: 1.734854 
 > [0.000000]: [surf_maxmin/DEBUG] index: 2      cnst_light_num: 4       || usage: 0.000000 remaining: 3.148664 bound: 5.714286  
 > [0.000000]: [surf_maxmin/DEBUG] index: 0      cnst_light_num: 3       || usage: 0.000000 remaining: 0.000000 bound: 3.876124  
 > [0.000000]: [surf_maxmin/DEBUG] index: 1      cnst_light_num: 2       || usage: 0.000000 remaining: 6.621449 bound: 8.971029  
index 4e60bff..c1b1e07 100644 (file)
@@ -1,6 +1,6 @@
 #! ./tesh
 
-$ $SG_TEST_EXENV ${bindir:=.}/surf_usage ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml
+$ $SG_TEST_EXENV ${bindir:=.}/surf_usage ${platfdir}/two_hosts_platform_with_availability.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'cpu/model' to 'Cas01'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'CM02'
 > [0.000000] [surf_test/INFO] actionA state: SURF_ACTION_RUNNING
index 12a74fb..3431333 100644 (file)
@@ -1,6 +1,6 @@
 #! ./tesh
 
-$ $SG_TEST_EXENV ${bindir:=.}/surf_usage2  ${srcdir:=.}/../../../examples/platforms/two_hosts_platform_with_availability.xml
+$ $SG_TEST_EXENV ${bindir:=.}/surf_usage2  ${platfdir}/two_hosts_platform_with_availability.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'CM02'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'cpu/model' to 'Cas01'
 > [0.200000] [surf_test/INFO] Next Event : 0.2
index 47570c3..9480a62 100644 (file)
@@ -6,8 +6,6 @@ set(EXTRA_DIST
   src/include/mc/datatypes.h
   src/include/mc/mc.h
   src/include/simgrid/sg_config.h
-  src/include/surf/datatypes.hpp
-  src/include/surf/maxmin.hpp
   src/include/surf/surf.hpp
   src/include/xbt/parmap.hpp
   src/mc/mc_mmu.hpp
@@ -303,6 +301,7 @@ set(NS3_SRC  src/surf/network_ns3.cpp
 set(SURF_SRC
   src/kernel/lmm/fair_bottleneck.cpp
   src/kernel/lmm/lagrange.cpp
+  src/kernel/lmm/maxmin.hpp
   src/kernel/lmm/maxmin.cpp
   
   src/kernel/routing/ClusterZone.cpp
@@ -362,6 +361,9 @@ set(SURF_SRC
   )
 
 set(PLUGINS_SRC
+  src/plugins/file_system/FileSystem.hpp
+  src/plugins/file_system/s4u_FileSystem.cpp
+  src/plugins/vm/VirtualMachineImpl.hpp
   src/plugins/vm/s4u_VirtualMachine.cpp
   src/plugins/vm/VirtualMachineImpl.hpp
   src/plugins/vm/VirtualMachineImpl.cpp
@@ -425,8 +427,7 @@ set(S4U_SRC
   src/s4u/s4u_conditionVariable.cpp
   src/s4u/s4u_comm.cpp
   src/s4u/s4u_engine.cpp  
-  src/s4u/s4u_file.cpp  
-  src/s4u/s4u_host.cpp  
+   src/s4u/s4u_host.cpp  
   src/s4u/s4u_link.cpp
   src/s4u/s4u_mailbox.cpp
   src/s4u/s4u_mutex.cpp
@@ -684,7 +685,6 @@ set(headers_to_install
   include/simgrid/s4u/Comm.hpp
   include/simgrid/s4u/ConditionVariable.hpp
   include/simgrid/s4u/Engine.hpp  
-  include/simgrid/s4u/File.hpp  
   include/simgrid/s4u/Host.hpp  
   include/simgrid/s4u/Link.hpp  
   include/simgrid/s4u/Mailbox.hpp
index 94aaffd..f093b3b 100644 (file)
@@ -81,7 +81,15 @@ endif()
 
 # Do not leak the current directory into the binaries
 if(CMAKE_COMPILER_IS_GNUCC)
-  set(optCFLAGS "${optCFLAGS} -fdebug-prefix-map=${CMAKE_SOURCE_DIR}=.")
+  execute_process(COMMAND realpath --relative-to=${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}
+    RESULT_VARIABLE RESULT OUTPUT_VARIABLE RELATIVE_SOURCE_DIR ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+  if(RESULT EQUAL 0)
+    message(STATUS "Relative source directory is \"${RELATIVE_SOURCE_DIR}\".")
+  else()
+    message(WARNING "Failed to find relative source directory. Using \".\".")
+    set(RELATIVE_SOURCE_DIR ".")
+  endif()
+  set(optCFLAGS "${optCFLAGS} -fdebug-prefix-map=${CMAKE_SOURCE_DIR}=${RELATIVE_SOURCE_DIR}")
 endif()
 
 # Configure LTO
@@ -107,20 +115,20 @@ if(enable_lto) # User wants LTO. Try if we can do that
     endif()
   endif()
   if(enable_lto)
-    message("-- LTO seems usable.")
+    message(STATUS "LTO seems usable.")
   else()
     if(NOT enable_compile_optimizations)
-      message("-- LTO disabled: Compile-time optimizations turned off.")
+      message(STATUS "LTO disabled: Compile-time optimizations turned off.")
     else() 
       if(enable_model-checking)
-        message("-- LTO disabled when compiling with model-checking.")
+        message(STATUS "LTO disabled when compiling with model-checking.")
       else()
-        message("-- LTO does not seem usable -- try updating your build chain.")
+        message(STATUS "LTO does not seem usable -- try updating your build chain.")
       endif() 
     endif()
   endif()
 else()
-  message("-- LTO disabled on the command line.")
+  message(STATUS "LTO disabled on the command line.")
 endif()
 if(enable_lto) # User wants LTO, and it seems usable. Go for it
   set(optCFLAGS "${optCFLAGS} -flto ")
@@ -141,6 +149,7 @@ if(enable_model-checking AND enable_compile_optimizations)
   set(optCFLAGS "-O0 ")
   # But you can still optimize this:
   foreach(s
+      src/kernel/lmm/fair_bottleneck.cpp src/kernel/lmm/lagrange.cpp src/kernel/lmm/maxmin.cpp
       src/xbt/mmalloc/mm.c
       src/xbt/log.c src/xbt/xbt_log_appender_file.c
       src/xbt/xbt_log_layout_format.c src/xbt/xbt_log_layout_simple.c
index 3d5a70d..24c0994 100644 (file)
@@ -11,8 +11,8 @@ set(Java_FOUND 1)
 include(UseJava)
 
 find_package(JNI REQUIRED)
-message("-- [Java] JNI found: ${JNI_FOUND}")
-message("-- [Java] JNI include dirs: ${JNI_INCLUDE_DIRS}")
+message(STATUS "[Java] JNI found: ${JNI_FOUND}")
+message(STATUS "[Java] JNI include dirs: ${JNI_INCLUDE_DIRS}")
 
 if(WIN32)
   execute_process(COMMAND         java -d64 -version
@@ -39,7 +39,7 @@ else()
 endif()
 
 get_target_property(CHECK_INCLUDES simgrid-java INCLUDE_DIRECTORIES)
-message("-- [Java] simgrid-java includes: ${CHECK_INCLUDES}")
+message(STATUS "[Java] simgrid-java includes: ${CHECK_INCLUDES}")
 
 # Rules to build simgrid.jar
 ############################
index eaae782..70bd820 100755 (executable)
@@ -123,7 +123,7 @@ cmake -G"$GENERATOR"\
   -Denable_debug=ON -Denable_documentation=OFF -Denable_coverage=OFF \
   -Denable_model-checking=$(onoff test "$build_mode" = "ModelChecker") \
   -Denable_smpi_ISP_testsuite=$(onoff test "$build_mode" = "ModelChecker") \
-  -Denable_compile_optimizations=$(onoff test "$build_mode" = "Debug") \
+  -Denable_compile_optimizations=$(onoff test "$build_mode" != "DynamicAnalysis") \
   -Denable_smpi_MPICH3_testsuite=$(onoff test "$build_mode" != "DynamicAnalysis") \
   -Denable_mallocators=$(onoff test "$build_mode" != "DynamicAnalysis") \
   -Denable_memcheck=$(onoff test "$build_mode" = "DynamicAnalysis") \