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
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
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
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
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
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
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()
# 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()
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.")
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)
#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)
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:
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>
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.
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})")
# 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)
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()
${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
${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)
@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
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>.
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
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,
@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
! 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).
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
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
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"
> [ 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"
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)
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
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
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'
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'
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'
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'
#! ./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"
> [ 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"
> [ 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"
-$ $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
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
-$ $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
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
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
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
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'
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
> [ 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
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
> [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
+
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
> [ 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
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
#! ./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
* 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)
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);
#! ./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'
> [ 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
+++ /dev/null
-/* 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;
-}
+++ /dev/null
-#! ./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
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
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.
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
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
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
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
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
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)
#! ./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
-$ $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)
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).
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.
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.
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.
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
#! ./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!
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'
#! ./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:
$ 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
#! ./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'
#! ./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'
> [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'
> [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'
> [4.214821] [msg_trace_masterworker/INFO] Declared marks:
> [4.214821] [msg_trace_masterworker/INFO] msmark
-
$ rm -rf trace-masterworker.trace
#! ./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'
$ 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'
#! ./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'
> 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'
> 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'
> 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'
> 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'
> 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'
#! ./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'
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})
${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
${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
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()
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.
+
*/
/**
@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
! 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
* 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>
! 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
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
#! ./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
return 0;
}
-static void victim()
+static void victimA_fun()
{
simgrid::s4u::this_actor::onExit(on_exit, nullptr);
XBT_INFO("Hello!");
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");
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 */
#! ./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
#! ./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.
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.
#! ./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!
#! ./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...
#! ./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!
#! ./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
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"
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)
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
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
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'
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'
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'
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'
#! ./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"
> [ 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"
> [ 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"
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'
#! ./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
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
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
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
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
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
> [ 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
--- /dev/null
+/* 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;
+}
--- /dev/null
+#! ./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
--- /dev/null
+/* 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;
+}
--- /dev/null
+#! ./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
--- /dev/null
+<?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>
--- /dev/null
+/* 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;
+}
--- /dev/null
+#! ./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
#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");
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));
}
}
--- /dev/null
+/* 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;
+}
--- /dev/null
+#! ./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
--- /dev/null
+<?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>
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)
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"
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;
}
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;
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);
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);
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);
/*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);
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,
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()
#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 */
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();
* 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).
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_; }
#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()
#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()
* 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"
+++ /dev/null
-/* 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
#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"
#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"
/* 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>
#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");
/*
* 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");
* 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"
#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.
// 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;
}
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;
}
}
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);
}
/* 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);
/* 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);
}
}
*
* @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;
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,
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;
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;
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");
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;
}
* 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;
* 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);
}
/*
* 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);
* 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)
}
}
}
+}
/* \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"
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;
"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");
}
}
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
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);
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;
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;
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();
}
}
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);
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)
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) {
}
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
/* 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++;
}
/* 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)) {
}
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) ||
}
} 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 */
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 "
check_concurrency();
delete[] cnst_light_tab;
- XBT_OUT();
}
void lmm_solve(lmm_system_t sys)
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
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())
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();
}
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
*/
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
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);
}
}
// (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();
}
/**
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; });
+}
}
}
}
#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
/** 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
* 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();
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;
* \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);
* @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
* @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
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;
* 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);
/**
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;
/* \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:
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
* @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
* @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();
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);
/** @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;
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
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()){
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.
*
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;
-}
}
/* 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.
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
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);
}
+
}
#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 {
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(); }
/** 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;
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
--- /dev/null
+/* 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()
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);
}
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)
{
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();
+++ /dev/null
-/* 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()
#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");
/* 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>
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()
{
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);
#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"
*/
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;
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);
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);
}
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) {
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);
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);
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
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);
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);
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) {
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);
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);
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);
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);
}
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);
} 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
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;
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);
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);
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());
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());
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);
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());
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());
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());
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,
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,
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());
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());
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);
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,
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,
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,
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);
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();
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)) {
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_;
}
* 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");
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()
* @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; }
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.
#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");
}
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();
/** @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))) {
} 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();
#define SURF_CPU_INTERFACE_HPP_
#include "simgrid/s4u/Host.hpp"
-#include "surf/maxmin.hpp"
+#include "src/kernel/lmm/maxmin.hpp"
#include <list>
#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);
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);
}
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);
}
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);
}
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) {
turnOn();
else {
lmm_variable_t var = nullptr;
- lmm_element_t elem = nullptr;
+ const_lmm_element_t elem = nullptr;
double now = surf_get_clock();
turnOff();
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());
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;
#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>
#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>
*
* @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.
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_);
}
/** @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))) {
{
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))) {
#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);
# 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)
${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
${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)
! 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
> [ 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
! 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
! 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
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, char* argv[])
{
- 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);
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);
}
}
/* Receiver process expects 3 arguments: */
-static int receiver(int argc, char *argv[])
+static int receiver(int argc, char* argv[])
{
- 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 {
return 0;
}
-int main(int argc, char *argv[])
+int main(int argc, char* argv[])
{
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());
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
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
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
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
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, char* argv[])
{
- 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_t* comm = 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);
}
return 0;
}
-static int receiver(int argc, char *argv[])
+static int receiver(int argc, char* argv[])
{
- 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) {
return 0;
}
-int main(int argc, char *argv[])
+int main(int argc, char* argv[])
{
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);
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
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, char* argv[])
{
- 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 */
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);
/* 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);
return 0;
}
-static int receiver(int argc, char *argv[])
+static int receiver(int argc, char* argv[])
{
- 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_t* tasks = 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);
}
return 0;
}
-int main(int argc, char *argv[])
+int main(int argc, char* argv[])
{
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]);
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
#! ./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
/* 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");
* interfaces, but it's not possible ATM).
*/
-static int runner(int argc, char *argv[])
+static int runner(int argc, char* argv[])
{
/* 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_t* hosts = 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);
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);
return 0;
}
-int main(int argc, char *argv[])
+int main(int argc, char* argv[])
{
MSG_init(&argc, argv);
MSG_config("host/model", "ptask_L07");
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);
#! ./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.
! 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'
-$ ./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"
-$ ./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)
> [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'
> [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
> [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
> [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
> [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
-$ ./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
--- /dev/null
+/* 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;
+}
--- /dev/null
+#! ./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
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
-/* 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. */
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());
return 0;
}
-int main(int argc, char *argv[])
+int main(int argc, char* argv[])
{
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"));
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
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, char* argv[])
{
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);
}
/* The policeman check for emigrants and move them back to 'Jacquelin' */
-static int policeman(int argc, char *argv[])
+static int policeman(int argc, char* argv[])
{
- 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");
return 0;
}
-int main(int argc, char *argv[])
+int main(int argc, char* argv[])
{
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"));
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.
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, char* argv[])
{
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.");
}
/* The Dream master: */
-static int dream_master(int argc, char *argv[])
+static int dream_master(int argc, char* argv[])
{
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...");
return 0;
}
-int main(int argc, char *argv[])
+int main(int argc, char* argv[])
{
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));
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...
#! ./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!
-$ ./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
-$ ./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)
-$ ./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"
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
## 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
-$ ./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)
-$ ./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!
-$ ./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
-$ ./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
-$ ./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".
> [ 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".
* 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>
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);
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());
-$ ./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
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
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
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()
--- /dev/null
+/* -*- 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;
+}
#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
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
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()
* 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"
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);
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);
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];
/* 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 */
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));
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
> [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
#! ./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
#! ./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
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
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
)
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
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
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
# 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
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 ")
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
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
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
############################
-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") \