teshsuite/simdag/platforms/is_router_test
teshsuite/simix/check_defaults/check_defaults
teshsuite/simix/stack_overflow/stack_overflow
-teshsuite/smpi/allgather/allgather_coll
-teshsuite/smpi/allgather_coll
+teshsuite/smpi/coll-allgather/coll-allgather
teshsuite/smpi/allgatherv/allgatherv_coll
teshsuite/smpi/allgatherv_coll
teshsuite/smpi/allreduce/allreduce
teshsuite/smpi/alltoallv_coll
teshsuite/smpi/barrier/barrier_coll
teshsuite/smpi/barrier_coll
-teshsuite/smpi/bcast/bcast
-teshsuite/smpi/bcast/bcast_coll
-teshsuite/smpi/bcast_coll
-teshsuite/smpi/compute2
-teshsuite/smpi/compute3
+teshsuite/smpi/coll-bcast/coll-bcast
teshsuite/smpi/compute/compute
teshsuite/smpi/compute/compute2
teshsuite/smpi/compute/compute3
teshsuite/smpi/gather_coll
teshsuite/smpi/gather/gather_coll
teshsuite/smpi/type-hvector/type-hvector
-teshsuite/smpi/indexed/indexed_test
-teshsuite/smpi/indexed_test
+teshsuite/smpi/type-indexed/type-indexed
teshsuite/smpi/isp/umpire/abort
teshsuite/smpi/isp/umpire/abort1
teshsuite/smpi/isp/umpire/abort2
teshsuite/xbt/mallocator/mallocator
teshsuite/xbt/mmalloc/mmalloc_test
teshsuite/xbt/mmalloc_test
-teshsuite/xbt/parallel_log_crashtest
-teshsuite/xbt/parallel_log/parallel_log_crashtest
+teshsuite/xbt/parallel_log_crashtest/parallel_log_crashtest
teshsuite/xbt/parmap_bench/parmap_bench
teshsuite/xbt/parmap_test/parmap_test
testgraph.dot
CHECK_LIBRARY_EXISTS(execinfo backtrace "" HAVE_BACKTRACE_IN_LIBEXECINFO)
CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
-if(NOT WIN32) # We don't want to have winpthread-1.dll in the jarfile
- CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_PTHREAD)
- CHECK_LIBRARY_EXISTS(pthread sem_init "" HAVE_SEM_INIT_LIB)
- CHECK_LIBRARY_EXISTS(pthread sem_open "" HAVE_SEM_OPEN_LIB)
- CHECK_LIBRARY_EXISTS(pthread sem_timedwait "" HAVE_SEM_TIMEDWAIT_LIB)
- CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock "" HAVE_MUTEX_TIMEDLOCK_LIB)
-endif()
+CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_PTHREAD)
+CHECK_LIBRARY_EXISTS(pthread sem_init "" HAVE_SEM_INIT_LIB)
+CHECK_LIBRARY_EXISTS(pthread sem_open "" HAVE_SEM_OPEN_LIB)
+CHECK_LIBRARY_EXISTS(pthread sem_timedwait "" HAVE_SEM_TIMEDWAIT_LIB)
+CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock "" HAVE_MUTEX_TIMEDLOCK_LIB)
+
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
ChangeLog for SimGrid-java, before its integration into the main source tree.
+SimGrid (3.13) UNRELEASED; urgency=low
+
+ Backwards Compatibility breaks
+ - VM.setBound(int load) is now VM.setBound(double bound) to meet the MSG semantics. Use VM.getSpeed()*load/100 for the legacy behavior.
+
+
SimGrid-java (3.9) stable; urgency=low
-- 2013-01-30 Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
are displayed (using the #XBT_LOG_ISENABLED() macro), or the
modification of the log formats to hide the timings when they
depend on the host machine.\n
- The script located in <project/directory>/tools/cmake/tesh/generate_tesh.sh can
+ The script located in <project/directory>/tools/tesh/generate_tesh can
help you a lot in particular if the output is large (though a smaller output is preferable).
- There are also example tesh files in the <project/directory>/tools/cmake/tesh/ directory, that can be useful to understand the tesh syntax.
+ There are also example tesh files in the <project/directory>/tools/tesh/ directory, that can be useful to understand the tesh syntax.
- <b>Add your test in the cmake infrastructure</b>. For that, modify
the file <project/directory>/tools/cmake/Tests.cmake. Make sure to
$ java -classpath ${classpath:=.} cloud/Cloud ${srcdir:=.}/../platforms/platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
> [ 0.000000] (0:maestro@) Using regular java threads.
> [ 0.000000] (0:maestro@) Start2 hosts
-> [ 0.000000] (0:maestro@) Create VM(VM00)@PM(Intel) with 0 mounted disks
-> [ 0.000000] (0:maestro@) Create VM(VM01)@PM(Provost) with 0 mounted disks
> [ 0.000000] (1:Master@Jacquelin) create VM00
> [ 0.000000] (1:Master@Jacquelin) Put Worker WRK00 on VM00
> [ 0.000000] (1:Master@Jacquelin) create VM01
> [ 4.798398] (3:WRK01@VM01) WRK01 executed task (Task01)
> [1000.000000] (1:Master@Jacquelin) Migrate everyone to Fernand
> [1000.000000] (1:Master@Jacquelin) Migrate VM00fromIntelto Fernand
-> [1000.000000] (5:__pr_mig_tx:VM00(Intel-Fernand)@Intel) Stage 1: Gonna send 1073741824
> [3467.577368] (1:Master@Jacquelin) Migrate VM01fromProvostto Fernand
-> [3467.577368] (7:__pr_mig_tx:VM01(Provost-Fernand)@Provost) Stage 1: Gonna send 1073741824
> [5931.433875] (0:maestro@) MSG_main finished; Cleaning up the simulation...
> [5931.433875] (1:Master@Jacquelin) Let's shut down the simulation and kill everyone.
> [5931.433875] (1:Master@Jacquelin) Master done.
$ java -classpath ${classpath:=.} cloud/energy/Main ${srcdir:=.}/../platforms/energy_platform.xml
> [0.000000] [jmsg/INFO] Using regular java threads.
> [MyHost1:energy VM runner:(1) 0.000000] [jmsg/INFO] Creating and starting two VMs
-> [0.000000] [surf_vm/INFO] Create VM(vmHost1)@PM(MyHost1) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vmHost3)@PM(MyHost3) with 0 mounted disks
> [MyHost1:energy VM runner:(1) 0.000000] [jmsg/INFO] Create two tasks on Host1: one inside a VM, the other directly on the host
> [MyHost1:energy VM runner:(1) 0.000000] [jmsg/INFO] Create two tasks on Host2: both directly on the host
> [MyHost1:energy VM runner:(1) 0.000000] [jmsg/INFO] Create two tasks on Host3: both inside a VM
public void setLoad(int load){
if (load >0) {
- this.setBound(load);
+ this.setBound(this.getSpeed()*load/100);
// this.getDaemon().setLoad(load);
daemon.resume();
} else{
> [host0:cloud/migration/Test:(1) 0.000000] [jmsg/INFO] This example evaluates the migration time of a VM in presence of collocated VMs on the source and the dest nodes
> [host0:cloud/migration/Test:(1) 0.000000] [jmsg/INFO] The migrated VM has a memory intensity rate of 70% of the network BW and a cpu load of 90% " (see cloudcom 2013 paper "Adding a Live Migration Model Into SimGrid" for further information)
> [host0:cloud/migration/Test:(1) 0.000000] [jmsg/INFO] Load of collocated VMs fluctuate between 0 and 90% in order to create a starvation issue and see whether it impacts or not the migration time
-> [0.000000] [surf_vm/INFO] Create VM(vm0)@PM(host0) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vm1)@PM(host0) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vm2)@PM(host0) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vm3)@PM(host0) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vm4)@PM(host0) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vm5)@PM(host0) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vm6)@PM(host0) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vm7)@PM(host1) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vm8)@PM(host1) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vm9)@PM(host1) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vm10)@PM(host1) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vm11)@PM(host1) with 0 mounted disks
-> [0.000000] [surf_vm/INFO] Create VM(vm12)@PM(host1) with 0 mounted disks
> [host0:cloud/migration/Test:(1) 0.000000] [jmsg/INFO] Round trip of VM1 (load 90%)
> [host0:cloud/migration/Test:(1) 0.000000] [jmsg/INFO] - Launch migration from host 0 to host 1
> [host0:cloud/migration/Test:(1) 0.000000] [jmsg/INFO] Start migration of VM vm0 to host1
> [host0:cloud/migration/Test:(1) 0.000000] [jmsg/INFO] currentLoad:90/ramSize:2048/dpIntensity:70/remaining:8.10E+11
-> [host0:__pr_mig_tx:vm0(host0-host1):(16) 0.000000] [msg_vm/INFO] Stage 1: Gonna send 2147483648
> [host0:cloud/migration/Test:(1) 35.084170] [jmsg/INFO] End of migration of VM vm0 to node host1
> [host0:cloud/migration/Test:(1) 35.084170] [jmsg/INFO] - End of Migration from host 0 to host 1 (duration:35.0841702956701)
> [host0:cloud/migration/Test:(1) 35.084170] [jmsg/INFO] - Launch migration from host 1 to host 0
> [host0:cloud/migration/Test:(1) 35.084170] [jmsg/INFO] Start migration of VM vm0 to host0
> [host0:cloud/migration/Test:(1) 35.084170] [jmsg/INFO] currentLoad:90/ramSize:2048/dpIntensity:70/remaining:6.22E+11
-> [host1:__pr_mig_tx:vm0(host1-host0):(18) 35.084170] [msg_vm/INFO] Stage 1: Gonna send 2147483648
> [host0:cloud/migration/Test:(1) 67.551019] [jmsg/INFO] End of migration of VM vm0 to node host0
> [host0:cloud/migration/Test:(1) 67.551019] [jmsg/INFO] - End of Migration from host 1 to host 0 (duration:32.46684874546391)
> [host0:cloud/migration/Test:(1) 67.551019] [jmsg/INFO]
> [host0:cloud/migration/Test:(1) 67.551019] [jmsg/INFO] - Launch migration from host 0 to host 1
> [host0:cloud/migration/Test:(1) 67.551019] [jmsg/INFO] Start migration of VM vm0 to host1
> [host0:cloud/migration/Test:(1) 67.551019] [jmsg/INFO] currentLoad:80/ramSize:2048/dpIntensity:70/remaining:4.64E+11
-> [host0:__pr_mig_tx:vm0(host0-host1):(20) 67.551019] [msg_vm/INFO] Stage 1: Gonna send 2147483648
> [host0:cloud/migration/Test:(1) 102.635189] [jmsg/INFO] End of migration of VM vm0 to node host1
> [host0:cloud/migration/Test:(1) 102.635189] [jmsg/INFO] - End of Migration from host 0 to host 1 (duration:35.08417029567006)
> [host0:cloud/migration/Test:(1) 102.635189] [jmsg/INFO] - Launch migration from host 1 to host 0
> [host0:cloud/migration/Test:(1) 102.635189] [jmsg/INFO] Start migration of VM vm0 to host0
> [host0:cloud/migration/Test:(1) 102.635189] [jmsg/INFO] currentLoad:80/ramSize:2048/dpIntensity:70/remaining:2.77E+11
-> [host1:__pr_mig_tx:vm0(host1-host0):(22) 102.635189] [msg_vm/INFO] Stage 1: Gonna send 2147483648
> [host0:cloud/migration/Test:(1) 135.102038] [jmsg/INFO] End of migration of VM vm0 to node host0
> [host0:cloud/migration/Test:(1) 135.102038] [jmsg/INFO] - End of Migration from host 1 to host 0 (duration:32.46684874546395)
> [host0:cloud/migration/Test:(1) 135.102038] [jmsg/INFO] Forcefully destroy VMs
double task1_remain_prev = MSG_task_get_flops_amount(task1);
{
- const double cpu_speed = MSG_get_host_speed(pm0);
+ const double cpu_speed = MSG_host_get_speed(pm0);
int i = 0;
for (i = 0; i < 10; i++) {
double new_bound = (cpu_speed / 10) * i;
static void test_one_task(msg_host_t hostA)
{
- const double cpu_speed = MSG_get_host_speed(hostA);
+ const double cpu_speed = MSG_host_get_speed(hostA);
const double computation_amount = cpu_speed * 10;
const char *hostA_name = MSG_host_get_name(hostA);
static void test_two_tasks(msg_host_t hostA, msg_host_t hostB)
{
- const double cpu_speed = MSG_get_host_speed(hostA);
- xbt_assert(cpu_speed == MSG_get_host_speed(hostB));
+ const double cpu_speed = MSG_host_get_speed(hostA);
+ xbt_assert(cpu_speed == MSG_host_get_speed(hostB));
const double computation_amount = cpu_speed * 10;
const char *hostA_name = MSG_host_get_name(hostA);
const char *hostB_name = MSG_host_get_name(hostB);
{
msg_host_t vm0 = MSG_vm_create_core(pm0, "VM0");
- const double cpu_speed = MSG_get_host_speed(pm0);
+ const double cpu_speed = MSG_host_get_speed(pm0);
MSG_vm_set_bound(vm0, cpu_speed / 10);
MSG_vm_start(vm0);
MSG_host_set_params(vm0, ¶ms);
MSG_vm_start(vm0);
- const double cpu_speed = MSG_get_host_speed(pm0);
+ const double cpu_speed = MSG_host_get_speed(pm0);
MSG_vm_start(vm0);
XBT_INFO("# 10. Test migration");
$ $SG_TEST_EXENV ${bindir:=.}/master_worker_vm$EXEEXT --log=no_loc ${srcdir:=.}/../../platforms/platform.xml
> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] # Launch 2 VMs
> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] create VM00 on PM(Intel)
-> [0.000000] [surf_vm/INFO] Create VM(VM00)@PM(Intel) with 0 mounted disks
> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] put a process (WRK00) on VM00
> [VM00:WRK00:(2) 0.000000] [msg_test/INFO] WRK00 is listening on mailbox(MBOX:WRK00)
> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] create VM01 on PM(Provost)
-> [0.000000] [surf_vm/INFO] Create VM(VM01)@PM(Provost) with 0 mounted disks
> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] put a process (WRK01) on VM01
> [VM01:WRK01:(3) 0.000000] [msg_test/INFO] WRK01 is listening on mailbox(MBOX:WRK01)
> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] # Send a task to 2 worker process
> [VM01:WRK03:(5) 1097.307521] [msg_test/INFO] WRK03 received task(Task03) from mailbox(MBOX:WRK03)
> [Jacquelin:master:(1) 1097.307521] [msg_test/INFO] # Migrate all VMs to PM(Intel)
> [Intel:__pr_mig_tx:VM00(Intel-Intel):(7) 1097.307521] [msg_vm/WARNING] use the default max_downtime value 30ms
-> [Intel:__pr_mig_tx:VM00(Intel-Intel):(7) 1097.307521] [msg_vm/INFO] Stage 1: Gonna send 1073741824
> [VM01:WRK03:(5) 1097.380336] [msg_test/INFO] WRK03 executed task(Task03)
> [Provost:__pr_mig_tx:VM01(Provost-Intel):(9) 1100.382717] [msg_vm/WARNING] use the default max_downtime value 30ms
-> [Provost:__pr_mig_tx:VM01(Provost-Intel):(9) 1100.382717] [msg_vm/INFO] Stage 1: Gonna send 1073741824
> [Jacquelin:master:(1) 3567.161124] [msg_test/INFO] # Migrate all VMs to PM(Provost)
> [Intel:__pr_mig_tx:VM00(Intel-Provost):(11) 3567.161124] [msg_vm/WARNING] use the default max_downtime value 30ms
-> [Intel:__pr_mig_tx:VM00(Intel-Provost):(11) 3567.161124] [msg_vm/INFO] Stage 1: Gonna send 1073741824
> [Intel:__pr_mig_tx:VM01(Intel-Provost):(13) 6034.900487] [msg_vm/WARNING] use the default max_downtime value 30ms
-> [Intel:__pr_mig_tx:VM01(Intel-Provost):(13) 6034.900487] [msg_vm/INFO] Stage 1: Gonna send 1073741824
> [Jacquelin:master:(1) 8502.639850] [msg_test/INFO] # Shutdown the half of worker processes gracefuly. The remaining half will be forcibly killed.
> [VM00:WRK00:(2) 8504.519504] [msg_test/INFO] WRK00 received task(finalize) from mailbox(MBOX:WRK00)
> [VM01:WRK01:(3) 8506.399157] [msg_test/INFO] WRK01 received task(finalize) from mailbox(MBOX:WRK01)
msg_host_t pm2 = xbt_dynar_get_as(hosts_dynar, 2, msg_host_t);
XBT_INFO("%s: %d core(s), %f flops/s per each", MSG_host_get_name(pm0), MSG_host_get_core_number(pm0),
- MSG_get_host_speed(pm0));
+ MSG_host_get_speed(pm0));
XBT_INFO("%s: %d core(s), %f flops/s per each", MSG_host_get_name(pm1), MSG_host_get_core_number(pm1),
- MSG_get_host_speed(pm1));
+ MSG_host_get_speed(pm1));
XBT_INFO("%s: %d core(s), %f flops/s per each", MSG_host_get_name(pm2), MSG_host_get_core_number(pm2),
- MSG_get_host_speed(pm2));
+ MSG_host_get_speed(pm2));
MSG_process_create("master", master_main, NULL, pm0);
> [Fafard:master_:(1) 6.000000] [msg_test/INFO] ## Test 1 (ended)
> [Fafard:master_:(1) 6.000000] [msg_test/INFO] ## Test 2 (started): check impact of running a task inside a VM (there is no degradation for the moment)
> [Fafard:master_:(1) 6.000000] [msg_test/INFO] ### Put a VM on a PM, and put a task to the VM
-> [6.000000] [surf_vm/INFO] Create VM(VM0)@PM(Fafard) with 0 mounted disks
> [VM0:compute:(7) 6.013107] [msg_test/INFO] VM0:compute task executed 0.0131068
> [Fafard:master_:(1) 8.000000] [msg_test/INFO] ## Test 2 (ended)
> [Fafard:master_:(1) 8.000000] [msg_test/INFO] ## Test 3 (started): check impact of running a task collocated with a VM (there is no VM noise for the moment)
> [Fafard:master_:(1) 8.000000] [msg_test/INFO] ### Put a VM on a PM, and put a task to the PM
-> [8.000000] [surf_vm/INFO] Create VM(VM0)@PM(Fafard) with 0 mounted disks
> [Fafard:compute:(8) 8.013107] [msg_test/INFO] Fafard:compute task executed 0.0131068
> [Fafard:master_:(1) 10.000000] [msg_test/INFO] ## Test 3 (ended)
> [Fafard:master_:(1) 10.000000] [msg_test/INFO] ## Test 4 (started): compare the cost of running two tasks inside two different VMs collocated or not (for the moment, there is no degradation for the VMs. Hence, the time should be equals to the time of test 1
> [Fafard:master_:(1) 10.000000] [msg_test/INFO] ### Put two VMs on a PM, and put a task to each VM
-> [10.000000] [surf_vm/INFO] Create VM(VM0)@PM(Fafard) with 0 mounted disks
-> [10.000000] [surf_vm/INFO] Create VM(VM1)@PM(Fafard) with 0 mounted disks
> [VM0:compute:(9) 10.026214] [msg_test/INFO] VM0:compute task executed 0.0262137
> [VM1:compute:(10) 10.026214] [msg_test/INFO] VM1:compute task executed 0.0262137
> [Fafard:master_:(1) 12.000000] [msg_test/INFO] ### Put a VM on each PM, and put a task to each VM
-> [12.000000] [surf_vm/INFO] Create VM(VM0)@PM(Fafard) with 0 mounted disks
-> [12.000000] [surf_vm/INFO] Create VM(VM1)@PM(Tremblay) with 0 mounted disks
> [VM1:compute:(12) 12.010194] [msg_test/INFO] VM1:compute task executed 0.0101942
> [VM0:compute:(11) 12.013107] [msg_test/INFO] VM0:compute task executed 0.0131068
> [Fafard:master_:(1) 14.000000] [msg_test/INFO] ## Test 4 (ended)
> [Tremblay:comm_rx:(18) 19.291085] [msg_test/INFO] Fafard:comm_tx to Tremblay:comm_rx => 0.291085 sec
> [Tremblay:comm_rx:(16) 19.291085] [msg_test/INFO] Fafard:comm_tx to Tremblay:comm_rx => 0.291085 sec
> [Fafard:master_:(1) 24.000000] [msg_test/INFO] ### Make a connection between PM0 and VM0@PM0
-> [24.000000] [surf_vm/INFO] Create VM(VM0)@PM(Fafard) with 0 mounted disks
> [VM0:comm_rx:(20) 24.002265] [msg_test/INFO] Fafard:comm_tx to VM0:comm_rx => 0.00226529 sec
> [Fafard:master_:(1) 29.000000] [msg_test/INFO] ### Make a connection between PM0 and VM0@PM1
-> [29.000000] [surf_vm/INFO] Create VM(VM0)@PM(Tremblay) with 0 mounted disks
> [VM0:comm_rx:(22) 29.158397] [msg_test/INFO] Fafard:comm_tx to VM0:comm_rx => 0.158397 sec
> [Fafard:master_:(1) 34.000000] [msg_test/INFO] ### Make two connections between PM0 and VM0@PM1
-> [34.000000] [surf_vm/INFO] Create VM(VM0)@PM(Tremblay) with 0 mounted disks
> [VM0:comm_rx:(26) 34.291085] [msg_test/INFO] Fafard:comm_tx to VM0:comm_rx => 0.291085 sec
> [VM0:comm_rx:(24) 34.291085] [msg_test/INFO] Fafard:comm_tx to VM0:comm_rx => 0.291085 sec
> [Fafard:master_:(1) 39.000000] [msg_test/INFO] ### Make a connection between PM0 and VM0@PM1, and also make a connection between PM0 and PM1
-> [39.000000] [surf_vm/INFO] Create VM(VM0)@PM(Tremblay) with 0 mounted disks
> [Tremblay:comm_rx:(30) 39.291085] [msg_test/INFO] Fafard:comm_tx to Tremblay:comm_rx => 0.291085 sec
> [VM0:comm_rx:(28) 39.291085] [msg_test/INFO] Fafard:comm_tx to VM0:comm_rx => 0.291085 sec
> [Fafard:master_:(1) 44.000000] [msg_test/INFO] ### Make a connection between VM0@PM0 and PM1@PM1, and also make a connection between VM0@PM0 and VM1@PM1
-> [44.000000] [surf_vm/INFO] Create VM(VM0)@PM(Fafard) with 0 mounted disks
-> [44.000000] [surf_vm/INFO] Create VM(VM1)@PM(Tremblay) with 0 mounted disks
> [VM1:comm_rx:(34) 44.291085] [msg_test/INFO] VM0:comm_tx to VM1:comm_rx => 0.291085 sec
> [VM1:comm_rx:(32) 44.291085] [msg_test/INFO] VM0:comm_tx to VM1:comm_rx => 0.291085 sec
> [Fafard:master_:(1) 49.000000] [msg_test/INFO] ## Test 5 (ended)
> [Fafard:master_:(1) 49.000000] [msg_test/INFO] ## Test 6 (started): Check migration impact (not yet implemented neither on the CPU resource nor on the network one
> [Fafard:master_:(1) 49.000000] [msg_test/INFO] ### Relocate VM0 between PM0 and PM1
-> [49.000000] [surf_vm/INFO] Create VM(VM0)@PM(Fafard) with 0 mounted disks
> [Fafard:__pr_mig_tx:VM0(Fafard-Tremblay):(38) 49.010000] [msg_vm/WARNING] use the default max_downtime value 30ms
-> [Fafard:__pr_mig_tx:VM0(Fafard-Tremblay):(38) 49.010000] [msg_vm/INFO] Stage 1: Gonna send 1073741824
> [Bourassa:comm_rx:(36) 49.204993] [msg_test/INFO] VM0:comm_tx to Bourassa:comm_rx => 0.204993 sec
> [Tremblay:__pr_mig_tx:VM0(Tremblay-Fafard):(40) 191.674258] [msg_vm/WARNING] use the default max_downtime value 30ms
-> [Tremblay:__pr_mig_tx:VM0(Tremblay-Fafard):(40) 191.674258] [msg_vm/INFO] Stage 1: Gonna send 1073741824
> [334.199056] [surf_vm/CRITICAL] FIXME: may need a proper handling, 1
> [Fafard:master_:(1) 339.199251] [msg_test/INFO] ## Test 6 (ended)
> [339.199251] [msg_test/INFO] Bye (simulation time 339.199)
p Testing a vm with two successive tasks
$ $SG_TEST_EXENV ${bindir:=.}/two_tasks_vm$EXEEXT ${srcdir:=.}/../../platforms/small_platform.xml
-> [0.000000] [surf_vm/INFO] Create VM(VM0)@PM(Fafard) with 0 mounted disks
> [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
$ $SG_TEST_EXENV energy/vm/energy_vm$EXEEXT ${srcdir:=.}/../platforms/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] (0:maestro@) Create VM(vm_host1)@PM(MyHost1) with 0 mounted disks
-> [ 0.000000] (0:maestro@) Create VM(vm_host3)@PM(MyHost3) with 0 mounted disks
> [ 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
> [ 0.000000] (1:dvfs@MyHost1) Create two tasks on Host3: both inside a VM
hosts = MSG_hosts_as_dynar();
xbt_dynar_foreach(hosts, i, host){
- XBT_INFO("Host '%s' runs at %.0f flops/s",MSG_host_get_name(host), MSG_get_host_speed(host));
+ XBT_INFO("Host '%s' runs at %.0f flops/s",MSG_host_get_name(host), MSG_host_get_speed(host));
}
MSG_launch_application(argv[2]);
XBT_PUBLIC(void) MSG_host_on(msg_host_t host);
XBT_PUBLIC(void) MSG_host_off(msg_host_t host);
XBT_PUBLIC(msg_host_t) MSG_host_self(void);
-XBT_PUBLIC(double) MSG_get_host_speed(msg_host_t h);
+XBT_PUBLIC(double) MSG_host_get_speed(msg_host_t h);
XBT_PUBLIC(int) MSG_host_get_core_number(msg_host_t h);
XBT_PUBLIC(xbt_swag_t) MSG_host_get_process_list(msg_host_t h);
XBT_PUBLIC(int) MSG_host_is_on(msg_host_t h);
XBT_PUBLIC(int) MSG_host_is_off(msg_host_t h);
+// deprecated
+XBT_PUBLIC(double) MSG_get_host_speed(msg_host_t h);
+
+
XBT_PUBLIC(double) MSG_host_get_power_peak_at(msg_host_t h, int pstate);
XBT_PUBLIC(double) MSG_host_get_current_power_peak(msg_host_t h);
XBT_PUBLIC(int) MSG_host_get_nb_pstates(msg_host_t h);
#ifdef _XBT_WIN32 /* defined if this is a windows system, 32bits or 64bits) */
#include <windows.h>
-typedef DWORD xbt_os_thread_key_t;
-#else /* assume that every non-windows system is POSIX-compatible */
+#endif
#include <pthread.h>
typedef pthread_key_t xbt_os_thread_key_t;
-#endif
-
/** Calls pthread_atfork() if present, and raise an exception otherwise.
*
* The only known user of this wrapper is mmalloc_preinit(), but it is absolutely mandatory there:
return -1;
}
- return (jdouble) MSG_get_host_speed(host);
+ return (jdouble) MSG_host_get_speed(host);
}
JNIEXPORT jdouble JNICALL
}
JNIEXPORT void JNICALL
-Java_org_simgrid_msg_VM_setBound(JNIEnv *env, jobject jvm, jint load) {
+Java_org_simgrid_msg_VM_setBound(JNIEnv *env, jobject jvm, jdouble bound) {
msg_vm_t vm = jvm_get_native(env,jvm);
- double bound = MSG_get_host_speed(vm) * load / 100;
- MSG_vm_set_bound(vm, bound);
+ MSG_vm_set_bound(vm, bound);
}
JNIEXPORT void JNICALL
TRY{
MSG_vm_migrate(vm,host);
} CATCH(e){
- XBT_INFO("CATCH EXCEPTION MIGRATION %s",e.msg);
+ XBT_VERB("CATCH EXCEPTION MIGRATION %s",e.msg);
xbt_ex_free(e);
jxbt_throw_host_failure(env, (char*)"during migration");
}
msg_vm_t vm = jvm_get_native(env,jvm);
MSG_vm_restore(vm);
}
-
-
-
-JNIEXPORT jobject JNICALL
-Java_org_simgrid_msg_VM_get_pm(JNIEnv *env, jobject jvm) {
- jobject jhost;
- msg_vm_t vm = jvm_get_native(env,jvm);
- msg_host_t host = MSG_vm_get_pm(vm);
-
- if (!host->extension(JAVA_HOST_LEVEL)) {
- THROW_DEADCODE;
- /* the native host not yet associated with the java host instance */
-
- /* instanciate a new java host instance */
- jhost = jhost_new_instance(env);
-
- if (!jhost) {
- jxbt_throw_jni(env, "java host instantiation failed");
- return NULL;
- }
-
- /* get a global reference to the newly created host */
- jhost = jhost_ref(env, jhost);
-
- if (!jhost) {
- jxbt_throw_jni(env, "global ref allocation failed");
- return NULL;
- }
- /* Sets the host name */
- const char *name = MSG_host_get_name(host);
- jobject jname = env->NewStringUTF(name);
- env->SetObjectField(jhost, jxbt_get_jfield(env,
- env->FindClass("org/simgrid/msg/Host"), "name", "Ljava/lang/String;"),
- jname);
- /* Bind & store it */
- jhost_bind(jhost, host, env);
- host->extension_set(JAVA_HOST_LEVEL, (void *) jhost);
- } else {
- jhost = (jobject) host->extension(JAVA_HOST_LEVEL);
- }
-
- return jhost;
-}
/**
* Class org_simgrid_msg_VM
* Method setBound
- * Signature ()B
+ * Signature (D)B
*/
JNIEXPORT void JNICALL
-Java_org_simgrid_msg_VM_setBound(JNIEnv *env, jobject jvm, jint load);
+Java_org_simgrid_msg_VM_setBound(JNIEnv *env, jobject jvm, jdouble bound);
/**
* Class org_simgrid_msg_VM
Java_org_simgrid_msg_VM_save(JNIEnv *env, jobject jvm);
/**
* Class org_simgrid_msg_VM
- * Method save
+ * Method restore
* Signature ()V
*/
JNIEXPORT void JNICALL
Java_org_simgrid_msg_VM_restore(JNIEnv *env, jobject jvm);
-JNIEXPORT jobject JNICALL
-Java_org_simgrid_msg_VM_get_pm(JNIEnv *env, jobject jvm);
-
SG_END_DECL()
#endif
/**
- * Bound the VM to a certain % of its vcpu capability (e.g. 75% of vm.getSpeed())
- * @param load percentage (between [0,100]
+ * Set a CPU bound for a given VM.
+ * @param bound in flops/s
*/
- public native void setBound(int load);
+ public native void setBound(double bound);
/**
* start the VM
/** \ingroup m_host_management
* \brief Return the speed of the processor (in flop/s), regardless of the current load on the machine.
*/
-double MSG_get_host_speed(msg_host_t host) {
+double MSG_host_get_speed(msg_host_t host) {
return host->speed();
}
+/** \ingroup m_host_management
+ * \brief Return the speed of the processor (in flop/s), regardless of the current load on the machine.
+ * Deprecated: use MSG_host_get_speed
+ */
+double MSG_get_host_speed(msg_host_t host) {
+ XBT_WARN("MSG_get_host_speed is deprecated: use MSG_host_get_speed");
+ return MSG_host_get_speed(host);
+}
+
+
/** \ingroup m_host_management
* \brief Return the number of cores.
*
{
/* For the moment, intensity_rate is the percentage against the migration
* bandwidth */
- double host_speed = MSG_get_host_speed(pm);
+ double host_speed = MSG_host_get_speed(pm);
double update_speed = ((double)dp_intensity/100) * mig_netspeed;
msg_vm_t vm = MSG_vm_create_core(pm, name);
} else if (ret == MSG_TIMEOUT) {
sg_size_t remaining = (sg_size_t)MSG_task_get_remaining_communication(task);
sent = size - remaining;
- XBT_INFO("timeout (%lf s) in sending_migration_data, remaining %llu bytes of %llu",
+ XBT_VERB("timeout (%lf s) in sending_migration_data, remaining %llu bytes of %llu",
timeout, remaining, size);
}
/* FIXME: why try-and-catch is used here? */
if(ret == MSG_HOST_FAILURE){
- //XBT_INFO("SRC host failed during migration of %s (stage %d)", sg_host_name(vm), stage);
+ //XBT_DEBUG("SRC host failed during migration of %s (stage %d)", sg_host_name(vm), stage);
MSG_task_destroy(task);
THROWF(host_error, 0, "SRC host failed during migration of %s (stage %d)", sg_host_get_name(vm), stage);
}else if(ret == MSG_TRANSFER_FAILURE){
- //XBT_INFO("DST host failed during migration of %s (stage %d)", sg_host_name(vm), stage);
+ //XBT_DEBUG("DST host failed during migration of %s (stage %d)", sg_host_name(vm), stage);
MSG_task_destroy(task);
THROWF(host_error, 0, "DST host failed during migration of %s (stage %d)", sg_host_get_name(vm), stage);
}
/* At stage 1, we do not need timeout. We have to send all the memory
* pages even though the duration of this tranfer exceeds the timeout
* value. */
- XBT_INFO("Stage 1: Gonna send %llu", ramsize);
+ XBT_VERB("Stage 1: Gonna send %llu", ramsize);
sg_size_t sent = send_migration_data(ms->vm, ms->src_pm, ms->dst_pm, ramsize, ms->mbox, 1, 0, mig_speed, -1);
remaining_size -= sent;
computed_during_stage1 = lookup_computed_flop_counts(ms->vm, 1, 0);
if (sent < ramsize) {
- XBT_INFO("mig-stage1: timeout, force moving to stage 3");
+ XBT_VERB("mig-stage1: timeout, force moving to stage 3");
skip_stage2 = 1;
} else if (sent > ramsize)
XBT_CRITICAL("bug");
double clock_post_send = MSG_get_clock();
mig_timeout -= (clock_post_send - clock_prev_send);
if (mig_timeout < 0) {
- XBT_INFO("The duration of stage 1 exceeds the timeout value (%lf > %lf), skip stage 2",
+ XBT_VERB("The duration of stage 1 exceeds the timeout value (%lf > %lf), skip stage 2",
(clock_post_send - clock_prev_send), MIGRATION_TIMEOUT_DO_NOT_HARDCODE_ME);
skip_stage2 = 1;
}
} else if (sent < updated_size) {
/* When timeout happens, we move to stage 3. The size of memory pages
* updated before timeout must be added to the remaining size. */
- XBT_INFO("mig-stage2.%d: timeout, force moving to stage 3. sent %llu / %llu, eta %lf",
+ XBT_VERB("mig-stage2.%d: timeout, force moving to stage 3. sent %llu / %llu, eta %lf",
stage2_round, sent, updated_size, (clock_post_send - clock_prev_send));
remaining_size -= sent;
if(ret == MSG_HOST_FAILURE){
// Note that since the communication failed, the owner did not change and the task should be destroyed on the other side.
// Hence, just throw the execption
- XBT_INFO("SRC crashes, throw an exception (m-control)");
+ XBT_ERROR("SRC crashes, throw an exception (m-control)");
//MSG_process_kill(tx_process); // Adrien, I made a merge on Nov 28th 2014, I'm not sure whether this line is required or not
return -1;
}
else if((ret == MSG_TRANSFER_FAILURE) || (ret == MSG_TIMEOUT)){ // MSG_TIMEOUT here means that MSG_host_is_avail() returned false.
- XBT_INFO("DST crashes, throw an exception (m-control)");
+ XBT_ERROR("DST crashes, throw an exception (m-control)");
return -2;
}
bool BoostContext::parallel_ = false;
xbt_parmap_t BoostContext::parmap_ = nullptr;
-unsigned long BoostContext::threads_working_ = 0;
+uintptr_t BoostContext::threads_working_ = 0;
xbt_os_thread_key_t BoostContext::worker_id_key_;
unsigned long BoostContext::process_index_ = 0;
BoostContext* BoostContext::maestro_context_ = nullptr;
}
else {
XBT_DEBUG("No more processes to run");
- unsigned long worker_id =
- (unsigned long) xbt_os_thread_get_specific(worker_id_key_);
+ uintptr_t worker_id =
+ (uintptr_t) xbt_os_thread_get_specific(worker_id_key_);
next_context = static_cast<BoostParallelContext*>(
workers_context_[worker_id]);
}
void BoostParallelContext::resume()
{
- unsigned long worker_id = __sync_fetch_and_add(&threads_working_, 1);
+ uintptr_t worker_id = __sync_fetch_and_add(&threads_working_, 1);
xbt_os_thread_set_specific(worker_id_key_, (void*) worker_id);
BoostParallelContext* worker_context =
static bool parallel_;
static xbt_parmap_t parmap_;
static std::vector<BoostContext*> workers_context_;
- static unsigned long threads_working_;
+ static uintptr_t threads_working_;
static xbt_os_thread_key_t worker_id_key_;
static unsigned long process_index_;
static BoostContext* maestro_context_;
#ifdef HAVE_THREAD_CONTEXTS
static xbt_parmap_t raw_parmap;
static simgrid::simix::RawContext** raw_workers_context; /* space to save the worker context in each thread */
-static unsigned long raw_threads_working; /* number of threads that have started their work */
+static uintptr_t raw_threads_working; /* number of threads that have started their work */
static xbt_os_thread_key_t raw_worker_id_key; /* thread-specific storage for the thread id */
#endif
#ifdef ADAPTIVE_THRESHOLD
else {
/* all processes were run, go to the barrier */
XBT_DEBUG("No more processes to run");
- unsigned long worker_id = (unsigned long)(uintptr_t)
+ uintptr_t worker_id = (uintptr_t)
xbt_os_thread_get_specific(raw_worker_id_key);
next_context = (RawContext*) raw_workers_context[worker_id];
- XBT_DEBUG("Restoring worker stack %lu (working threads = %lu)",
+ XBT_DEBUG("Restoring worker stack %zu (working threads = %zu)",
worker_id, raw_threads_working);
}
void RawContext::resume_parallel()
{
#ifdef HAVE_THREAD_CONTEXTS
- unsigned long worker_id = __sync_fetch_and_add(&raw_threads_working, 1);
- xbt_os_thread_set_specific(raw_worker_id_key, (void*)(uintptr_t) worker_id);
+ uintptr_t worker_id = __sync_fetch_and_add(&raw_threads_working, 1);
+ xbt_os_thread_set_specific(raw_worker_id_key, (void*) worker_id);
RawContext* worker_context = (RawContext*) SIMIX_context_self();
raw_workers_context[worker_id] = worker_context;
- XBT_DEBUG("Saving worker stack %lu", worker_id);
+ XBT_DEBUG("Saving worker stack %zu", worker_id);
SIMIX_context_set_current(this);
raw_swapcontext(&worker_context->stack_top_, this->stack_top_);
#else
#ifdef HAVE_THREAD_CONTEXTS
static xbt_parmap_t sysv_parmap;
static simgrid::simix::ParallelUContext** sysv_workers_context; /* space to save the worker's context in each thread */
-static unsigned long sysv_threads_working; /* number of threads that have started their work */
+static uintptr_t sysv_threads_working; /* number of threads that have started their work */
static xbt_os_thread_key_t sysv_worker_id_key; /* thread-specific storage for the thread id */
#endif
static unsigned long sysv_process_index = 0; /* index of the next process to run in the
{
#ifdef HAVE_THREAD_CONTEXTS
// What is my containing body?
- unsigned long worker_id = __sync_fetch_and_add(&sysv_threads_working, 1);
+ uintptr_t worker_id = __sync_fetch_and_add(&sysv_threads_working, 1);
// Store the number of my containing body in os-thread-specific area :
xbt_os_thread_set_specific(sysv_worker_id_key, (void*) worker_id);
// Get my current soul:
XBT_DEBUG("No more processes to run");
// Get back the identity of my body that was stored when starting
// the scheduling round
- unsigned long worker_id =
- (unsigned long) xbt_os_thread_get_specific(sysv_worker_id_key);
+ uintptr_t worker_id =
+ (uintptr_t) xbt_os_thread_get_specific(sysv_worker_id_key);
// Deduce the initial soul of that body
next_context = (ParallelUContext*) sysv_workers_context[worker_id];
// When given that soul, the body will wait for the next scheduling round
}
if (pm_overcommit) {
- XBT_INFO("%s allows memory overcommit.", sg_host_get_name(pm));
+ XBT_VERB("%s allows memory overcommit.", sg_host_get_name(pm));
return 1;
}
/* FIXME: TODO: we have to periodically input GUESTOS_NOISE to the system? how ? */
p_action = sub_cpu->execution_start(0);
- XBT_INFO("Create VM(%s)@PM(%s) with %ld mounted disks",
+ XBT_VERB("Create VM(%s)@PM(%s) with %ld mounted disks",
name, p_hostPM->name().c_str(), xbt_dynar_length(p_storage));
}
"Synchronization mechanism (OS-level)");
/* ********************************* PTHREAD IMPLEMENTATION ************************************ */
-#ifndef _XBT_WIN32
-
#include <pthread.h>
#include <limits.h>
#include <semaphore.h>
strerror(errno));
}
-/* ********************************* WINDOWS IMPLEMENTATION ************************************ */
-
-#elif defined(_XBT_WIN32)
-
-#include <math.h>
-
-typedef struct xbt_os_thread_ {
- char *name;
- HANDLE handle; /* the win thread handle */
- unsigned long id; /* the win thread id */
- pvoid_f_pvoid_t start_routine;
- void *param;
- void *extra_data;
-} s_xbt_os_thread_t;
-
-/* so we can specify the size of the stack of the threads */
-#ifndef STACK_SIZE_PARAM_IS_A_RESERVATION
-#define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000
-#endif
-
-/* the default size of the stack of the threads (in bytes)*/
-#define XBT_DEFAULT_THREAD_STACK_SIZE 4096
-static int stack_size=0;
-/* key to the TLS containing the xbt_os_thread_t structure */
-static unsigned long xbt_self_thread_key;
-
-void xbt_os_thread_mod_preinit(void)
-{
- xbt_self_thread_key = TlsAlloc();
-
- xbt_os_thread_t main_thread = xbt_new0(s_xbt_os_thread_t, 1);
- main_thread->name = (char *) "main";
- main_thread->start_routine = NULL;
- main_thread->param = NULL;
-
- if (!TlsSetValue(xbt_self_thread_key, main_thread))
- THROWF(system_error, (int)GetLastError(),
- "Impossible to set the SimGrid identity descriptor to the main thread (TlsSetValue() failed)");
-
-}
-
-void xbt_os_thread_mod_postexit(void)
-{
-
- if (!TlsFree(xbt_self_thread_key))
- THROWF(system_error, (int) GetLastError(),
- "TlsFree() failed to cleanup the thread submodule");
-}
-
-int xbt_os_thread_atfork(void (*prepare)(void),
- void (*parent)(void), void (*child)(void))
-{
- return 0;
-}
-
-static DWORD WINAPI wrapper_start_routine(void *s)
-{
- xbt_os_thread_t t = (xbt_os_thread_t) s;
- DWORD *rv;
-
- if (!TlsSetValue(xbt_self_thread_key, t))
- THROWF(system_error, (int) GetLastError(),
- "TlsSetValue of data describing the created thread failed");
-
- rv = (DWORD *) ((t->start_routine) (t->param));
-
- return rv ? *rv : 0;
-
-}
-
-
-xbt_os_thread_t xbt_os_thread_create(const char *name,
- pvoid_f_pvoid_t start_routine,
- void *param,
- void *extra_data)
-{
-
- xbt_os_thread_t t = xbt_new(s_xbt_os_thread_t, 1);
-
- t->name = xbt_strdup(name);
- t->start_routine = start_routine;
- t->param = param;
- t->extra_data = extra_data;
- t->handle = CreateThread(NULL, stack_size==0 ? XBT_DEFAULT_THREAD_STACK_SIZE : stack_size,
- (LPTHREAD_START_ROUTINE) wrapper_start_routine,
- t, STACK_SIZE_PARAM_IS_A_RESERVATION, &(t->id));
-
- if (!t->handle) {
- xbt_free(t);
- THROWF(system_error, (int) GetLastError(), "CreateThread failed");
- }
-
- return t;
-}
-
-void xbt_os_thread_setstacksize(int size)
-{
- stack_size = size;
-}
-
-void xbt_os_thread_setguardsize(int size)
-{
- XBT_WARN("xbt_os_thread_setguardsize is not implemented (%d)", size);
-}
-
-const char *xbt_os_thread_name(xbt_os_thread_t t)
-{
- return t->name;
-}
-
-const char *xbt_os_thread_self_name(void)
-{
- xbt_os_thread_t t = xbt_os_thread_self();
- return t ? t->name : "main";
-}
-
-void xbt_os_thread_join(xbt_os_thread_t thread, void **thread_return)
-{
-
- if (WAIT_OBJECT_0 != WaitForSingleObject(thread->handle, INFINITE))
- THROWF(system_error, (int) GetLastError(),
- "WaitForSingleObject failed");
-
- if (thread_return) {
-
- if (!GetExitCodeThread(thread->handle, (DWORD *) (*thread_return)))
- THROWF(system_error, (int) GetLastError(),
- "GetExitCodeThread failed");
- }
-
- CloseHandle(thread->handle);
-
- free(thread->name);
-
- free(thread);
-}
-
-void xbt_os_thread_exit(int *retval)
-{
- if (retval)
- ExitThread(*retval);
- else
- ExitThread(0);
-}
-
-void xbt_os_thread_key_create(xbt_os_thread_key_t* key) {
-
- *key = TlsAlloc();
-}
-
-void xbt_os_thread_set_specific(xbt_os_thread_key_t key, void* value) {
-
- if (!TlsSetValue(key, value))
- THROWF(system_error, (int) GetLastError(), "TlsSetValue() failed");
-}
-
-void* xbt_os_thread_get_specific(xbt_os_thread_key_t key) {
- return TlsGetValue(key);
-}
-
-void xbt_os_thread_detach(xbt_os_thread_t thread)
-{
- THROW_UNIMPLEMENTED;
-}
-
-
-xbt_os_thread_t xbt_os_thread_self(void)
-{
- return TlsGetValue(xbt_self_thread_key);
-}
-
-void *xbt_os_thread_getparam(void)
-{
- xbt_os_thread_t t = xbt_os_thread_self();
- return t->param;
-}
-
-
-void xbt_os_thread_yield(void)
-{
- Sleep(0);
-}
-
-void xbt_os_thread_cancel(xbt_os_thread_t t)
-{
- if (!TerminateThread(t->handle, 0))
- THROWF(system_error, (int) GetLastError(), "TerminateThread failed");
-}
-
-/****** mutex related functions ******/
-typedef struct xbt_os_mutex_ {
- /* KEEP IT IN SYNC WITH xbt_thread.c */
- CRITICAL_SECTION lock;
-} s_xbt_os_mutex_t;
-
-xbt_os_mutex_t xbt_os_mutex_init(void)
-{
- xbt_os_mutex_t res = xbt_new(s_xbt_os_mutex_t, 1);
-
- /* initialize the critical section object */
- InitializeCriticalSection(&(res->lock));
-
- return res;
-}
-
-void xbt_os_mutex_acquire(xbt_os_mutex_t mutex)
-{
- EnterCriticalSection(&mutex->lock);
-}
-
-void xbt_os_mutex_timedacquire(xbt_os_mutex_t mutex, double delay)
-{
- THROW_UNIMPLEMENTED;
-}
-
-void xbt_os_mutex_release(xbt_os_mutex_t mutex)
-{
-
- LeaveCriticalSection(&mutex->lock);
-
-}
-
-void xbt_os_mutex_destroy(xbt_os_mutex_t mutex)
-{
-
- if (!mutex)
- return;
-
- DeleteCriticalSection(&mutex->lock);
- free(mutex);
-}
-
-/***** condition related functions *****/
-enum { /* KEEP IT IN SYNC WITH xbt_thread.c */
- SIGNAL = 0,
- BROADCAST = 1,
- MAX_EVENTS = 2
-};
-
-typedef struct xbt_os_cond_ {
- /* KEEP IT IN SYNC WITH xbt_thread.c */
- HANDLE events[MAX_EVENTS];
-
- unsigned int waiters_count; /* the number of waiters */
- CRITICAL_SECTION waiters_count_lock; /* protect access to waiters_count */
-} s_xbt_os_cond_t;
-
-xbt_os_cond_t xbt_os_cond_init(void)
-{
-
- xbt_os_cond_t res = xbt_new0(s_xbt_os_cond_t, 1);
-
- memset(&res->waiters_count_lock, 0, sizeof(CRITICAL_SECTION));
-
- /* initialize the critical section object */
- InitializeCriticalSection(&res->waiters_count_lock);
-
- res->waiters_count = 0;
-
- /* Create an auto-reset event */
- res->events[SIGNAL] = CreateEvent(NULL, FALSE, FALSE, NULL);
-
- if (!res->events[SIGNAL]) {
- DeleteCriticalSection(&res->waiters_count_lock);
- free(res);
- THROWF(system_error, 0, "CreateEvent failed for the signals");
- }
-
- /* Create a manual-reset event. */
- res->events[BROADCAST] = CreateEvent(NULL, TRUE, FALSE, NULL);
-
- if (!res->events[BROADCAST]) {
-
- DeleteCriticalSection(&res->waiters_count_lock);
- CloseHandle(res->events[SIGNAL]);
- free(res);
- THROWF(system_error, 0, "CreateEvent failed for the broadcasts");
- }
-
- return res;
-}
-
-void xbt_os_cond_wait(xbt_os_cond_t cond, xbt_os_mutex_t mutex)
-{
-
- unsigned long wait_result;
- int is_last_waiter;
-
- /* lock the threads counter and increment it */
- EnterCriticalSection(&cond->waiters_count_lock);
- cond->waiters_count++;
- LeaveCriticalSection(&cond->waiters_count_lock);
-
- /* unlock the mutex associate with the condition */
- LeaveCriticalSection(&mutex->lock);
-
- /* wait for a signal (broadcast or no) */
- wait_result = WaitForMultipleObjects(2, cond->events, FALSE, INFINITE);
-
- if (wait_result == WAIT_FAILED)
- THROWF(system_error, 0,
- "WaitForMultipleObjects failed, so we cannot wait on the condition");
-
- /* we have a signal lock the condition */
- EnterCriticalSection(&cond->waiters_count_lock);
- cond->waiters_count--;
-
- /* it's the last waiter or it's a broadcast ? */
- is_last_waiter = ((wait_result == WAIT_OBJECT_0 + BROADCAST - 1)
- && (cond->waiters_count == 0));
-
- LeaveCriticalSection(&cond->waiters_count_lock);
-
- /* yes it's the last waiter or it's a broadcast
- * only reset the manual event (the automatic event is reset in the WaitForMultipleObjects() function
- * by the system.
- */
- if (is_last_waiter)
- if (!ResetEvent(cond->events[BROADCAST]))
- THROWF(system_error, 0, "ResetEvent failed");
-
- /* relock the mutex associated with the condition in accordance with the posix thread specification */
- EnterCriticalSection(&mutex->lock);
-}
-
-void xbt_os_cond_timedwait(xbt_os_cond_t cond, xbt_os_mutex_t mutex,
- double delay)
-{
-
- unsigned long wait_result = WAIT_TIMEOUT;
- int is_last_waiter;
- unsigned long end = (unsigned long) (delay * 1000);
-
-
- if (delay < 0) {
- xbt_os_cond_wait(cond, mutex);
- } else {
- XBT_DEBUG("xbt_cond_timedwait(%p,%p,%lu)", &(cond->events),
- &(mutex->lock), end);
-
- /* lock the threads counter and increment it */
- EnterCriticalSection(&cond->waiters_count_lock);
- cond->waiters_count++;
- LeaveCriticalSection(&cond->waiters_count_lock);
-
- /* unlock the mutex associate with the condition */
- LeaveCriticalSection(&mutex->lock);
- /* wait for a signal (broadcast or no) */
-
- wait_result = WaitForMultipleObjects(2, cond->events, FALSE, end);
-
- switch (wait_result) {
- case WAIT_TIMEOUT:
- THROWF(timeout_error, GetLastError(),
- "condition %p (mutex %p) wasn't signaled before timeout (%f)",
- cond, mutex, delay);
- case WAIT_FAILED:
- THROWF(system_error, GetLastError(),
- "WaitForMultipleObjects failed, so we cannot wait on the condition");
- }
-
- /* we have a signal lock the condition */
- EnterCriticalSection(&cond->waiters_count_lock);
- cond->waiters_count--;
-
- /* it's the last waiter or it's a broadcast ? */
- is_last_waiter = ((wait_result == WAIT_OBJECT_0 + BROADCAST - 1)
- && (cond->waiters_count == 0));
-
- LeaveCriticalSection(&cond->waiters_count_lock);
-
- /* yes it's the last waiter or it's a broadcast
- * only reset the manual event (the automatic event is reset in the WaitForMultipleObjects() function
- * by the system.
- */
- if (is_last_waiter)
- if (!ResetEvent(cond->events[BROADCAST]))
- THROWF(system_error, 0, "ResetEvent failed");
-
- /* relock the mutex associated with the condition in accordance with the posix thread specification */
- EnterCriticalSection(&mutex->lock);
- }
- /*THROW_UNIMPLEMENTED; */
-}
-
-void xbt_os_cond_signal(xbt_os_cond_t cond)
-{
- int have_waiters;
-
- EnterCriticalSection(&cond->waiters_count_lock);
- have_waiters = cond->waiters_count > 0;
- LeaveCriticalSection(&cond->waiters_count_lock);
-
- if (have_waiters)
- if (!SetEvent(cond->events[SIGNAL]))
- THROWF(system_error, 0, "SetEvent failed");
-
- xbt_os_thread_yield();
-}
-
-void xbt_os_cond_broadcast(xbt_os_cond_t cond)
-{
- int have_waiters;
-
- EnterCriticalSection(&cond->waiters_count_lock);
- have_waiters = cond->waiters_count > 0;
- LeaveCriticalSection(&cond->waiters_count_lock);
-
- if (have_waiters)
- SetEvent(cond->events[BROADCAST]);
-}
-
-void xbt_os_cond_destroy(xbt_os_cond_t cond)
-{
- int error = 0;
-
- if (!cond)
- return;
-
- if (!CloseHandle(cond->events[SIGNAL]))
- error = 1;
-
- if (!CloseHandle(cond->events[BROADCAST]))
- error = 1;
-
- DeleteCriticalSection(&cond->waiters_count_lock);
-
- xbt_free(cond);
-
- if (error)
- THROWF(system_error, 0, "Error while destroying the condition");
-}
-
-typedef struct xbt_os_sem_ {
- HANDLE h;
- unsigned int value;
- CRITICAL_SECTION value_lock; /* protect access to value of the semaphore */
-} s_xbt_os_sem_t;
-
-#ifndef INT_MAX
-# define INT_MAX 32767 /* let's be safe by underestimating this value: this is for 16bits only */
-#endif
-
-xbt_os_sem_t xbt_os_sem_init(unsigned int value)
-{
- xbt_os_sem_t res;
-
- if (value > INT_MAX)
- THROWF(arg_error, value,
- "Semaphore initial value too big: %ud cannot be stored as a signed int",
- value);
-
- res = (xbt_os_sem_t) xbt_new0(s_xbt_os_sem_t, 1);
-
- if (!(res->h = CreateSemaphore(NULL, value, (long) INT_MAX, NULL))) {
- THROWF(system_error, GetLastError(), "CreateSemaphore() failed: %s",
- strerror(GetLastError()));
- return NULL;
- }
-
- res->value = value;
-
- InitializeCriticalSection(&(res->value_lock));
-
- return res;
-}
-
-void xbt_os_sem_acquire(xbt_os_sem_t sem)
-{
- if (!sem)
- THROWF(arg_error, EINVAL, "Cannot acquire the NULL semaphore");
-
- /* wait failure */
- if (WAIT_OBJECT_0 != WaitForSingleObject(sem->h, INFINITE))
- THROWF(system_error, GetLastError(),
- "WaitForSingleObject() failed: %s", strerror(GetLastError()));
- EnterCriticalSection(&(sem->value_lock));
- sem->value--;
- LeaveCriticalSection(&(sem->value_lock));
-}
-
-void xbt_os_sem_timedacquire(xbt_os_sem_t sem, double timeout)
-{
- long seconds;
- long milliseconds;
- double end = timeout + xbt_os_time();
-
- if (!sem)
- THROWF(arg_error, EINVAL, "Cannot acquire the NULL semaphore");
-
- if (timeout < 0) {
- xbt_os_sem_acquire(sem);
- } else { /* timeout can be zero <-> try acquire ) */
-
-
- seconds = (long) floor(end);
- milliseconds = (long) ((end - seconds) * 1000);
- milliseconds += (seconds * 1000);
-
- switch (WaitForSingleObject(sem->h, milliseconds)) {
- case WAIT_OBJECT_0:
- EnterCriticalSection(&(sem->value_lock));
- sem->value--;
- LeaveCriticalSection(&(sem->value_lock));
- return;
-
- case WAIT_TIMEOUT:
- THROWF(timeout_error, GetLastError(),
- "semaphore %p wasn't signaled before timeout (%f)", sem,
- timeout);
- return;
-
- default:
- THROWF(system_error, GetLastError(),
- "WaitForSingleObject(%p,%f) failed: %s", sem, timeout,
- strerror(GetLastError()));
- }
- }
-}
-
-void xbt_os_sem_release(xbt_os_sem_t sem)
-{
- if (!sem)
- THROWF(arg_error, EINVAL, "Cannot release the NULL semaphore");
-
- if (!ReleaseSemaphore(sem->h, 1, NULL))
- THROWF(system_error, GetLastError(), "ReleaseSemaphore() failed: %s",
- strerror(GetLastError()));
- EnterCriticalSection(&(sem->value_lock));
- sem->value++;
- LeaveCriticalSection(&(sem->value_lock));
-}
-
-void xbt_os_sem_destroy(xbt_os_sem_t sem)
-{
- if (!sem)
- THROWF(arg_error, EINVAL, "Cannot destroy the NULL semaphore");
-
- if (!CloseHandle(sem->h))
- THROWF(system_error, GetLastError(), "CloseHandle() failed: %s",
- strerror(GetLastError()));
-
- DeleteCriticalSection(&(sem->value_lock));
-
- xbt_free(sem);
-
-}
-
-void xbt_os_sem_get_value(xbt_os_sem_t sem, int *svalue)
-{
- if (!sem)
- THROWF(arg_error, EINVAL,
- "Cannot get the value of the NULL semaphore");
-
- EnterCriticalSection(&(sem->value_lock));
- *svalue = sem->value;
- LeaveCriticalSection(&(sem->value_lock));
-}
-
-
-#endif
-
/** @brief Returns the amount of cores on the current host */
int xbt_os_get_numcores(void) {
$ ./host_on_off_processes ${srcdir:=.}/../../../examples/platforms/small_platform.xml ${srcdir:=.}/host_on_off_processes_d.xml 6 --log=no_loc --log=msg.thresh:error --log=surf_maxmin.thresh:error
> [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
-> [0.000000] [surf_vm/INFO] Create VM(vm0)@PM(Jupiter) with 0 mounted disks
> [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
> [Jupiter:process_daemonJUPI:(3) 0.000000] [msg_test/INFO] Start daemon on Jupiter (76296000.000000)
endif()
include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
- foreach(x type-hvector type-struct type-vector)
+ foreach(x coll-allgather coll-bcast type-hvector type-indexed type-struct type-vector)
add_executable (${x} ${x}/${x}.c)
target_link_libraries(${x} simgrid)
set_target_properties(${x} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${x})
set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/${x}/${x}.tesh)
set(teshsuite_src ${teshsuite_src} ${CMAKE_CURRENT_SOURCE_DIR}/${x}/${x}.c)
- 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 bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/${x} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/${x} ${x}.tesh)
+ endforeach()
+
+ foreach (ALLGATHER_COLL 2dmesh 3dmesh bruck GB loosely_lr NTSLR_NB pair rdb rhv ring SMP_NTS smp_simple
+ spreading_simple ompi mpich ompi_neighborexchange mvapich2 mvapich2_smp impi)
+ ADD_TESH(tesh-smpi-coll-allgather-${ALLGATHER_COLL} --cfg smpi/allgather:${ALLGATHER_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/coll-allgather --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/coll-allgather coll-allgather.tesh)
+ endforeach()
+
+ foreach (BCAST_COLL arrival_pattern_aware arrival_pattern_aware_wait arrival_scatter binomial_tree flattree
+ flattree_pipeline NTSB NTSL NTSL_Isend scatter_LR_allgather scatter_rdb_allgather SMP_binary
+ SMP_binomial SMP_linear ompi mpich ompi_split_bintree ompi_pipeline mvapich2 mvapich2_intra_node
+ mvapich2_knomial_intra_node impi)
+ ADD_TESH(tesh-smpi-coll-bcast-${BCAST_COLL} --cfg smpi/bcast:${BCAST_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/coll-bcast --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/coll-bcast coll-bcast.tesh)
endforeach()
endif()
+++ /dev/null
-if(enable_smpi)
- if(WIN32)
- set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
- else()
- set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
- endif()
- include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-
- add_executable (allgather_coll allgather_coll.c)
- target_link_libraries(allgather_coll simgrid)
-endif()
-
-set(tesh_files
- ${tesh_files}
- ${CMAKE_CURRENT_SOURCE_DIR}/allgather_coll.tesh
- PARENT_SCOPE)
-set(examples_src
- ${examples_src}
- ${CMAKE_CURRENT_SOURCE_DIR}/allgather_coll.c
- PARENT_SCOPE)
+++ /dev/null
-if(enable_smpi)
- if(WIN32)
- set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
- else()
- set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
- endif()
- include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-
- add_executable (bcast bcast.c)
- target_link_libraries(bcast simgrid)
- add_executable (bcast_coll bcast_coll.c)
- target_link_libraries(bcast_coll simgrid)
-endif()
-
-set(tesh_files
- ${tesh_files}
- ${CMAKE_CURRENT_SOURCE_DIR}/bcast.tesh
- ${CMAKE_CURRENT_SOURCE_DIR}/bcast_coll.tesh
- PARENT_SCOPE)
-set(examples_src
- ${examples_src}
- ${CMAKE_CURRENT_SOURCE_DIR}/bcast.c
- ${CMAKE_CURRENT_SOURCE_DIR}/bcast_coll.c
- PARENT_SCOPE)
+++ /dev/null
-/* Copyright (c) 2009, 2012-2014. The SimGrid Team.
- * All rights reserved. */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#include <stdio.h>
-#include <mpi.h>
-
-int main(int argc, char **argv)
-{
- int size, rank;
- int value = 3;
- double start_timer;
- int quiet = 0;
-
- MPI_Init(&argc, &argv);
- MPI_Comm_size(MPI_COMM_WORLD, &size);
- MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-
- if (argc > 1 && !strcmp(argv[1], "-q"))
- quiet = 1;
-
- start_timer = MPI_Wtime();
-
- if (0 == rank) {
- value = 17;
- }
- MPI_Bcast(&value, 1, MPI_INT, 0, MPI_COMM_WORLD);
- if (value != 17) {
- printf("node %d has value %d after broadcast\n", rank, value);
- }
-
- MPI_Barrier(MPI_COMM_WORLD);
- if (0 == rank && !quiet)
- printf("Elapsed time on rank %d: %f s\n", rank,
- MPI_Wtime() - start_timer);
- MPI_Finalize();
- return 0;
-}
+++ /dev/null
-# use the tested library, not the installed one
-# (since we want to pass it to the child, it has to be redefined before each command)
-# Go for the first test
-p Test Broadcast with less processes than hosts
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 3 ${bindir:=.}/bcast -q --log=smpi_kernel.thres:warning
-> [rank 0] -> Tremblay
-> [rank 1] -> Tremblay
-> [rank 2] -> Tremblay
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304'
-
-# second test
-p Test Broadcast with as much processes than hosts
-! setenv LD_LIBRARY_PATH=../../lib
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 5 ${bindir:=.}/bcast -q --log=smpi_kernel.thres:warning
-> [rank 0] -> Tremblay
-> [rank 1] -> Tremblay
-> [rank 2] -> Tremblay
-> [rank 3] -> Tremblay
-> [rank 4] -> Jupiter
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304'
-
-# Another test
-p Test Broadcast with more processes than hosts
-! setenv LD_LIBRARY_PATH=../../lib
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 12 ${bindir:=.}/bcast -q --log=smpi_kernel.thres:warning
-> [rank 0] -> Tremblay
-> [rank 1] -> Tremblay
-> [rank 2] -> Tremblay
-> [rank 3] -> Tremblay
-> [rank 4] -> Jupiter
-> [rank 5] -> Jupiter
-> [rank 6] -> Jupiter
-> [rank 7] -> Jupiter
-> [rank 8] -> Fafard
-> [rank 9] -> Fafard
-> [rank 10] -> Fafard
-> [rank 11] -> Fafard
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304'
printf("%d ", rb[i]);
printf("]\n");
-
if (rank == 0) {
if (status != MPI_SUCCESS) {
printf("allgather returned %d\n", status);
! output sort
p Test all to all
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/allgather_coll --log=smpi_kernel.thres:warning --log=smpi_coll.thres:error
+$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/coll-allgather --log=smpi_kernel.thres:warning --log=smpi_coll.thres:error
> [rank 0] -> Tremblay
> [rank 1] -> Tremblay
> [rank 2] -> Tremblay
{
int i, size, rank;
int count = 2048;
- int *values;
- int status;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-
- values = (int *) xbt_malloc(count * sizeof(int));
+
+ int *values = (int *) xbt_malloc(count * sizeof(int));
for (i = 0; i < count; i++)
values[i] = (0 == rank) ? 17 : 3;
for (i = 0; i < count; i++)
values[i] = (size -1 == rank) ? 17 : 3;
- status = MPI_Bcast(values, count, MPI_INT, size-1, MPI_COMM_WORLD);
+ int status = MPI_Bcast(values, count, MPI_INT, size-1, MPI_COMM_WORLD);
good = 0;
for (i = 0; i < count; i++)
if (values[i]==17) good++;
printf("[%d] number of values equals to 17: %d\n", rank, good);
-
-
-
if (rank == 0) {
if (status != MPI_SUCCESS) {
printf("bcast returned %d\n", status);
! setenv LD_LIBRARY_PATH=../../lib
! output sort
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/bcast_coll --log=smpi_kernel.thres:warning --log=smpi_coll.thres:error
+$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/coll-bcast --log=smpi_kernel.thres:warning --log=smpi_coll.thres:error
> [rank 0] -> Tremblay
> [rank 1] -> Tremblay
> [rank 2] -> Tremblay
+++ /dev/null
-if(enable_smpi)
- if(WIN32)
- set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
- else()
- set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
- endif()
- include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-
- add_executable (indexed_test indexed_test.c)
- target_link_libraries(indexed_test simgrid)
-endif()
-
-set(tesh_files
- ${tesh_files}
- ${CMAKE_CURRENT_SOURCE_DIR}/indexed.tesh
- PARENT_SCOPE)
-set(examples_src
- ${examples_src}
- ${CMAKE_CURRENT_SOURCE_DIR}/indexed_test.c
- PARENT_SCOPE)
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
- if (size < 2)
- {
+ if (size < 2) {
printf("Please run with 2 processes.\n");
MPI_Finalize();
return 1;
MPI_Type_indexed(3, blocklen, displacement, type2, &type);
MPI_Type_commit(&type);
- if (rank == 0)
- {
+ if (rank == 0) {
for (i=0; i<27; i++)
buffer[i] = i;
MPI_Send(buffer, 1, type, 1, 123, MPI_COMM_WORLD);
}
- if (rank == 1)
- {
+ if (rank == 1) {
for (i=0; i<27; i++)
buffer[i] = -1;
MPI_Recv(buffer, 1, type, 0, 123, MPI_COMM_WORLD, &status);
p Test indexed
! setenv LD_LIBRARY_PATH=../../lib
! output sort
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/platforms/small_platform.xml -np 2 ${bindir:=.}/indexed_test -q --log=smpi_kernel.thres:warning
+$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/platforms/small_platform.xml -np 2 ${bindir:=.}/type-indexed -q --log=smpi_kernel.thres:warning
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304'
--- /dev/null
+foreach(x heap_bench log_large mallocator parallel_log_crashtest parmap_bench parmap_test)
+ add_executable (${x} ${x}/${x}.c)
+ target_link_libraries(${x} simgrid)
+ set_target_properties(${x} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${x})
+
+ set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/${x}/${x}.tesh)
+ set(teshsuite_src ${teshsuite_src} ${CMAKE_CURRENT_SOURCE_DIR}/${x}/${x}.c)
+endforeach()
+
+foreach(x heap_bench log_large parallel_log_crashtest parmap_test) #mallocator parmap_bench
+ ADD_TESH(tesh-xbt-${x} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/${x} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/${x} ${x}.tesh)
+endforeach()
+
+set(teshsuite_src ${teshsuite_src} PARENT_SCOPE)
+set(tesh_files ${tesh_files} PARENT_SCOPE)
+++ /dev/null
-add_executable (heap_bench heap_bench.c)
-target_link_libraries(heap_bench simgrid)
-
-set(tesh_files
- ${tesh_files}
- ${CMAKE_CURRENT_SOURCE_DIR}/heap_bench.tesh
- PARENT_SCOPE)
-set(testsuite_src
- ${testsuite_src}
- ${CMAKE_CURRENT_SOURCE_DIR}/heap_bench.c
- PARENT_SCOPE)
+++ /dev/null
-add_executable (log_large_test log_large_test.c)
-target_link_libraries(log_large_test simgrid)
-
-set(tesh_files
- ${tesh_files}
- ${CMAKE_CURRENT_SOURCE_DIR}/log_large_test.tesh
- PARENT_SCOPE)
-set(teshsuite_src
- ${teshsuite_src}
- ${CMAKE_CURRENT_SOURCE_DIR}/log_large_test.c
- PARENT_SCOPE)
p Check that the dynamic version of the log simple layout works
-$ $SG_EXENV_TEST ${bindir:=.}/log_large_test "--log=root.fmt:%m%n"
+$ $SG_EXENV_TEST ${bindir:=.}/log_large "--log=root.fmt:%m%n"
> This is a very large message:
> 0
> 1.........1.........2.........3.........4.........5.........6.........7.........8.........9.........0
> Done (strlen>10210)
p Check that the dynamic version of the log formatted layout works
-$ $SG_EXENV_TEST ${bindir:=.}/log_large_test "--log=root.fmt:%m%n"
+$ $SG_EXENV_TEST ${bindir:=.}/log_large "--log=root.fmt:%m%n"
> This is a very large message:
> 0
> 1.........1.........2.........3.........4.........5.........6.........7.........8.........9.........0
+++ /dev/null
-add_executable (mallocator mallocator_test.c)
-target_link_libraries(mallocator simgrid)
-
-set(tesh_files
- ${tesh_files}
- ${CMAKE_CURRENT_SOURCE_DIR}/mallocator.tesh
- PARENT_SCOPE)
-set(teshsuite_src
- ${teshsuite_src}
- ${CMAKE_CURRENT_SOURCE_DIR}/mallocator_test.c
- PARENT_SCOPE)
+++ /dev/null
-add_executable (parallel_log_crashtest parallel_log_crashtest.c)
-target_link_libraries(parallel_log_crashtest simgrid)
-
-set(tesh_files
- ${tesh_files}
- ${CMAKE_CURRENT_SOURCE_DIR}/parallel_log_crashtest.tesh
- PARENT_SCOPE)
-set(teshsuite_src
- ${teshsuite_src}
- ${CMAKE_CURRENT_SOURCE_DIR}/parallel_log_crashtest.c
- PARENT_SCOPE)
return NULL;
}
-int crasher(int argc, char *argv[]);
-int crasher(int argc, char *argv[])
+static int crasher(int argc, char *argv[])
{
int i;
xbt_os_thread_t *crashers;
+++ /dev/null
-add_executable (parmap_bench parmap_bench.c)
-target_link_libraries(parmap_bench simgrid)
-
-set(tesh_files
- ${tesh_files}
- ${CMAKE_CURRENT_SOURCE_DIR}/parmap_bench.tesh
- PARENT_SCOPE)
-set(testsuite_src
- ${testsuite_src}
- ${CMAKE_CURRENT_SOURCE_DIR}/parmap_bench.c
- PARENT_SCOPE)
+++ /dev/null
-add_executable (parmap_test parmap_test.c)
-target_link_libraries(parmap_test simgrid)
-
-set(tesh_files
- ${tesh_files}
- ${CMAKE_CURRENT_SOURCE_DIR}/parmap_test.tesh
- PARENT_SCOPE)
-set(teshsuite_src
- ${teshsuite_src}
- ${CMAKE_CURRENT_SOURCE_DIR}/parmap_test.c
- PARENT_SCOPE)
teshsuite/simix/stack_overflow/CMakeLists.txt
teshsuite/smpi/CMakeLists.txt
- teshsuite/smpi/allgather/CMakeLists.txt
teshsuite/smpi/allgatherv/CMakeLists.txt
teshsuite/smpi/allreduce/CMakeLists.txt
teshsuite/smpi/alltoall/CMakeLists.txt
teshsuite/smpi/alltoallv/CMakeLists.txt
teshsuite/smpi/barrier/CMakeLists.txt
- teshsuite/smpi/bcast/CMakeLists.txt
teshsuite/smpi/compute/CMakeLists.txt
teshsuite/smpi/gather/CMakeLists.txt
- teshsuite/smpi/indexed/CMakeLists.txt
teshsuite/smpi/pingpong/CMakeLists.txt
teshsuite/smpi/reduce/CMakeLists.txt
teshsuite/smpi/scatter/CMakeLists.txt
teshsuite/surf/surf_usage/CMakeLists.txt
teshsuite/surf/trace_usage/CMakeLists.txt
- teshsuite/xbt/heap_bench/CMakeLists.txt
- teshsuite/xbt/log_large/CMakeLists.txt
+ teshsuite/xbt/CMakeLists.txt
teshsuite/xbt/log_usage/CMakeLists.txt
- teshsuite/xbt/mallocator/CMakeLists.txt
teshsuite/xbt/mmalloc/CMakeLists.txt
- teshsuite/xbt/parallel_log/CMakeLists.txt
- teshsuite/xbt/parmap_bench/CMakeLists.txt
- teshsuite/xbt/parmap_test/CMakeLists.txt
tools/CMakeLists.txt
tools/graphicator/CMakeLists.txt
### XBT ###
# BEGIN TESH TESTS
- ADD_TESH(tesh-xbt-log-large --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/log_large --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_large log_large_test.tesh)
- ADD_TESH(tesh-xbt-log-parallel --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/parallel_log --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parallel_log parallel_log_crashtest.tesh)
-# ADD_TESH(tesh-xbt-mallocator --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/mallocator --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/mallocator mallocator.tesh)
IF(HAVE_MMALLOC)
IF(${ARCH_32_BITS})
ADD_TESH(tesh-xbt-mmalloc-32 --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/mmalloc --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/mmalloc mmalloc_32.tesh)
ADD_TESH(tesh-xbt-mmalloc-64 --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/mmalloc --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/mmalloc mmalloc_64.tesh)
ENDIF()
ENDIF()
- ADD_TESH(tesh-xbt-parmap --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/parmap_test --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_test parmap_test.tesh)
IF(enable_debug)
ADD_TESH(tesh-xbt-log --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/log_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_usage log_usage.tesh)
ELSE()
ADD_TESH(tesh-xbt-log --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/log_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_usage log_usage_ndebug.tesh)
ENDIF()
- ADD_TESH(tesh-xbt-heap --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/heap_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/heap_bench heap_bench.tesh)
- #ADD_TESH(test-xbt-parmap --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/parmap_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_bench parmap_bench.tesh)
# END TESH TESTS
-
## INTERFACES ##
### MSG ###
# BEGIN TESH TESTS
ADD_TESH_FACTORIES(s4u-basic "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/examples/s4u/basic --cd ${CMAKE_HOME_DIRECTORY}/examples/s4u/basic s4u_basic.tesh)
ADD_TESH_FACTORIES(s4u-io "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/examples/s4u/io --cd ${CMAKE_HOME_DIRECTORY}/examples/s4u/io s4u_io.tesh)
-
### SIMDAG ###
# BEGIN TESH TESTS
# these tests need the assertion mechanism
# BEGIN TESH TESTS
# smpi examples
ADD_TESH_FACTORIES(tesh-smpi-pt2pt "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/pingpong --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/pingpong pt2pt.tesh)
- ADD_TESH_FACTORIES(tesh-smpi-bcast "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/bcast --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/bcast bcast.tesh)
ADD_TESH_FACTORIES(tesh-smpi-reduce "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/reduce --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce reduce.tesh)
- ADD_TESH_FACTORIES(tesh-smpi-indexed "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/indexed --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/indexed indexed.tesh)
ADD_TESH_FACTORIES(tesh-smpi-compute "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/compute --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/compute compute.tesh)
# smpi broken usage
ADD_TESH_FACTORIES(tesh-smpi-broken "thread" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/pingpong --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/pingpong broken_hostfiles.tesh)
FOREACH (GATHER_COLL default ompi mpich ompi_basic_linear ompi_linear_sync ompi_binomial mvapich2 mvapich2_two_level impi)
ADD_TESH(tesh-smpi-gather-coll-${GATHER_COLL} --cfg smpi/gather:${GATHER_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/gather --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/gather gather_coll.tesh)
ENDFOREACH()
- FOREACH (ALLGATHER_COLL default 2dmesh 3dmesh bruck GB loosely_lr
- NTSLR NTSLR_NB pair rdb rhv ring SMP_NTS
- smp_simple spreading_simple ompi mpich ompi_neighborexchange mvapich2 mvapich2_smp impi)
- ADD_TESH(tesh-smpi-allgather-coll-${ALLGATHER_COLL} --cfg smpi/allgather:${ALLGATHER_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/allgather --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgather allgather_coll.tesh)
- ENDFOREACH()
+
FOREACH (ALLGATHERV_COLL default GB pair ring ompi mpich ompi_neighborexchange ompi_bruck mpich_rdb mpich_ring mvapich2 impi)
ADD_TESH(tesh-smpi-allgatherv-coll-${ALLGATHERV_COLL} --cfg smpi/allgatherv:${ALLGATHERV_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/allgatherv --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgatherv allgatherv_coll.tesh)
ENDFOREACH()
ring_mpi_barrier ring_one_barrier bruck ompi mpich mvapich2 ompi_basic_linear impi)
ADD_TESH(tesh-smpi-alltoallv-coll-${ALLTOALLV_COLL} --cfg smpi/alltoallv:${ALLTOALLV_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/alltoallv --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoallv alltoallv_coll.tesh)
ENDFOREACH()
- FOREACH (BCAST_COLL default arrival_pattern_aware arrival_pattern_aware_wait arrival_scatter
- binomial_tree flattree flattree_pipeline NTSB NTSL NTSL_Isend scatter_LR_allgather
- scatter_rdb_allgather SMP_binary SMP_binomial SMP_linear ompi mpich ompi_split_bintree ompi_pipeline mvapich2 mvapich2_intra_node mvapich2_knomial_intra_node impi)
- ADD_TESH(tesh-smpi-bcast-coll-${BCAST_COLL} --cfg smpi/bcast:${BCAST_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/bcast --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/bcast bcast_coll.tesh)
- ENDFOREACH()
+
FOREACH (REDUCE_COLL default arrival_pattern_aware binomial flat_tree NTSL scatter_gather ompi mpich ompi_chain ompi_binary ompi_basic_linear ompi_binomial ompi_in_order_binary mvapich2 mvapich2_knomial mvapich2_two_level impi rab)
ADD_TESH(tesh-smpi-reduce-coll-${REDUCE_COLL} --cfg smpi/reduce:${REDUCE_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/reduce --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce reduce_coll.tesh)
ENDFOREACH()
### LUA ###
# BEGIN TESH TESTS
IF(HAVE_LUA)
- # Tests testing simulation from C but using lua for platform files. Executed
- # like this
- #
+ # Tests testing simulation from C but using lua for platform files. Executed like this
# ~$ ./masterslave platform.lua deploy.lua
ADD_TESH(lua-platform-masterslave --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/lua --cd ${CMAKE_BINARY_DIR}/examples/lua ${CMAKE_HOME_DIRECTORY}/teshsuite/lua/lua_platforms.tesh)
SET_TESTS_PROPERTIES(lua-platform-masterslave PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so")
ENDIF()
ENDIF()
-
## OTHER ##
ADD_TEST(testall ${CMAKE_BINARY_DIR}/testall)