Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Replace xbt_heap by boost::heap::fibonacci_heap
authorPaul Bédaride <paul.bedaride@gmail.com>
Fri, 16 May 2014 12:20:54 +0000 (14:20 +0200)
committerPaul Bédaride <paul.bedaride@gmail.com>
Fri, 16 May 2014 12:22:08 +0000 (14:22 +0200)
18 files changed:
examples/lua/kademlia/kademlia.tesh
examples/msg/cloud/simple_vm.tesh
examples/msg/gtnets/gtnets-crosstraffic.tesh
examples/msg/kademlia/kademlia.tesh
examples/msg/pmm/pmm.tesh
examples/msg/start_kill_time/start_kill_time.tesh
examples/smpi/energy/energy.tesh
examples/smpi/energy/f77/energy.tesh
examples/smpi/energy/f90/energy.tesh
examples/smpi/replay/smpi_replay.tesh
src/surf/cpu_cas01.cpp
src/surf/cpu_interface.cpp
src/surf/cpu_ti.cpp
src/surf/network_cm02.cpp
src/surf/network_interface.hpp
src/surf/surf_interface.cpp
src/surf/surf_interface.hpp
teshsuite/msg/process_join/process_join.tesh

index 2092ee8..db1ad02 100644 (file)
@@ -11,17 +11,16 @@ $ lua kademlia.lua
 > [Tanguay:node:(11) 0.000000] [lua/INFO] Hi, I'm going to join the network with the id 1111111111 !
 > [Morin:node:(12) 0.000000] [lua/INFO] Hi, I'm going to join the network with the id 11111111111 !
 > [Ethernet:node:(13) 0.000000] [lua/INFO] Hi, I'm going to join the network with the id 11111111111 !
 > [Tanguay:node:(11) 0.000000] [lua/INFO] Hi, I'm going to join the network with the id 1111111111 !
 > [Morin:node:(12) 0.000000] [lua/INFO] Hi, I'm going to join the network with the id 11111111111 !
 > [Ethernet:node:(13) 0.000000] [lua/INFO] Hi, I'm going to join the network with the id 11111111111 !
-> [Morin:node:(12) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
 > [Tanguay:node:(11) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
 > [Tanguay:node:(11) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
+> [McGee:node:(8) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
+> [TeX:node:(4) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
 > [iRMX:node:(7) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
 > [Gatien:node:(9) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
 > [iRMX:node:(7) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
 > [Gatien:node:(9) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
-> [TeX:node:(4) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
 > [Laroche:node:(10) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
 > [Laroche:node:(10) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
-> [Disney:node:(6) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
 > [Geoff:node:(5) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
 > [Geoff:node:(5) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
-> [McGee:node:(8) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
-> [Jean_Yves:node:(3) 900.000000] [lua/INFO] 8/8 FIND_NODE have succedded
-> [Jacquelin:node:(1) 900.000000] [lua/INFO] 0/8 FIND_NODE have succedded
-> [Boivin:node:(2) 900.000000] [lua/INFO] 8/8 FIND_NODE have succedded
+> [Disney:node:(6) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
 > [Ethernet:node:(13) 900.000000] [lua/INFO] 8/8 FIND_NODE have succedded
 > [Ethernet:node:(13) 900.000000] [lua/INFO] 8/8 FIND_NODE have succedded
-
+> [Morin:node:(12) 900.000000] [lua/INFO] 7/7 FIND_NODE have succedded
+> [Boivin:node:(2) 900.000000] [lua/INFO] 8/8 FIND_NODE have succedded
+> [Jacquelin:node:(1) 900.000000] [lua/INFO] 0/8 FIND_NODE have succedded
+> [Jean_Yves:node:(3) 900.000000] [lua/INFO] 8/8 FIND_NODE have succedded
index 12d0ad2..872441e 100644 (file)
@@ -7,11 +7,11 @@ $ $SG_TEST_EXENV ${bindir:=.}/simple_vm$EXEEXT --log=no_loc ${srcdir:=.}/simple_
 > [PM0:master_:(1) 0.000000] [msg_test/INFO] ### Put a task on a PM
 > [PM0:compute:(2) 0.010000] [msg_test/INFO] PM0:compute task executed 0.01
 > [PM0:master_:(1) 2.000000] [msg_test/INFO] ### Put two tasks on a PM
 > [PM0:master_:(1) 0.000000] [msg_test/INFO] ### Put a task on a PM
 > [PM0:compute:(2) 0.010000] [msg_test/INFO] PM0:compute task executed 0.01
 > [PM0:master_:(1) 2.000000] [msg_test/INFO] ### Put two tasks on a PM
-> [PM0:compute:(4) 2.020000] [msg_test/INFO] PM0:compute task executed 0.02
 > [PM0:compute:(3) 2.020000] [msg_test/INFO] PM0:compute task executed 0.02
 > [PM0:compute:(3) 2.020000] [msg_test/INFO] PM0:compute task executed 0.02
+> [PM0:compute:(4) 2.020000] [msg_test/INFO] PM0:compute task executed 0.02
 > [PM0:master_:(1) 4.000000] [msg_test/INFO] ### Put a task on each PM
 > [PM0:master_:(1) 4.000000] [msg_test/INFO] ### Put a task on each PM
-> [PM0:compute:(5) 4.010000] [msg_test/INFO] PM0:compute task executed 0.01
 > [PM1:compute:(6) 4.010000] [msg_test/INFO] PM1:compute task executed 0.01
 > [PM1:compute:(6) 4.010000] [msg_test/INFO] PM1:compute task executed 0.01
+> [PM0:compute:(5) 4.010000] [msg_test/INFO] PM0:compute task executed 0.01
 > [PM0:master_:(1) 6.000000] [msg_test/INFO] ## Test 1 (ended)
 > [PM0: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)
 > [PM0:master_:(1) 6.000000] [msg_test/INFO] ### Put a VM on a PM, and put a task to the VM
 > [PM0:master_:(1) 6.000000] [msg_test/INFO] ## Test 1 (ended)
 > [PM0: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)
 > [PM0:master_:(1) 6.000000] [msg_test/INFO] ### Put a VM on a PM, and put a task to the VM
@@ -27,13 +27,13 @@ $ $SG_TEST_EXENV ${bindir:=.}/simple_vm$EXEEXT --log=no_loc ${srcdir:=.}/simple_
 > [PM0:master_:(1) 10.000000] [msg_test/INFO] ### Put two VMs on a PM, and put a task to each VM
 > [10.000000] [surf_vm_workstation/INFO] Create VM(VM0)@PM(PM0) with 0 mounted disks
 > [10.000000] [surf_vm_workstation/INFO] Create VM(VM1)@PM(PM0) with 0 mounted disks
 > [PM0:master_:(1) 10.000000] [msg_test/INFO] ### Put two VMs on a PM, and put a task to each VM
 > [10.000000] [surf_vm_workstation/INFO] Create VM(VM0)@PM(PM0) with 0 mounted disks
 > [10.000000] [surf_vm_workstation/INFO] Create VM(VM1)@PM(PM0) with 0 mounted disks
-> [VM0:compute:(9) 10.020000] [msg_test/INFO] VM0:compute task executed 0.02
 > [VM1:compute:(10) 10.020000] [msg_test/INFO] VM1:compute task executed 0.02
 > [VM1:compute:(10) 10.020000] [msg_test/INFO] VM1:compute task executed 0.02
+> [VM0:compute:(9) 10.020000] [msg_test/INFO] VM0:compute task executed 0.02
 > [PM0:master_:(1) 12.000000] [msg_test/INFO] ### Put a VM on each PM, and put a task to each VM
 > [12.000000] [surf_vm_workstation/INFO] Create VM(VM0)@PM(PM0) with 0 mounted disks
 > [12.000000] [surf_vm_workstation/INFO] Create VM(VM1)@PM(PM1) with 0 mounted disks
 > [PM0:master_:(1) 12.000000] [msg_test/INFO] ### Put a VM on each PM, and put a task to each VM
 > [12.000000] [surf_vm_workstation/INFO] Create VM(VM0)@PM(PM0) with 0 mounted disks
 > [12.000000] [surf_vm_workstation/INFO] Create VM(VM1)@PM(PM1) with 0 mounted disks
-> [VM0:compute:(11) 12.010000] [msg_test/INFO] VM0:compute task executed 0.01
 > [VM1:compute:(12) 12.010000] [msg_test/INFO] VM1:compute task executed 0.01
 > [VM1:compute:(12) 12.010000] [msg_test/INFO] VM1:compute task executed 0.01
+> [VM0:compute:(11) 12.010000] [msg_test/INFO] VM0:compute task executed 0.01
 > [PM0:master_:(1) 14.000000] [msg_test/INFO] ## Test 4 (ended)
 > [PM0:master_:(1) 14.000000] [msg_test/INFO] ## Test 5  (started): Analyse network impact
 > [PM0:master_:(1) 14.000000] [msg_test/INFO] ### Make a connection between PM0 and PM1
 > [PM0:master_:(1) 14.000000] [msg_test/INFO] ## Test 4 (ended)
 > [PM0:master_:(1) 14.000000] [msg_test/INFO] ## Test 5  (started): Analyse network impact
 > [PM0:master_:(1) 14.000000] [msg_test/INFO] ### Make a connection between PM0 and PM1
index e5e722c..5f0ea80 100644 (file)
@@ -13,7 +13,7 @@ p Testing crosstraffic TCP option ENABLED
 
 $ gtnets/gtnets ${srcdir:=.}/gtnets/crosstraffic-p.xml ${srcdir:=.}/gtnets/crosstraffic-d.xml --cfg=network/crosstraffic:1
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/crosstraffic' to '1'
 
 $ gtnets/gtnets ${srcdir:=.}/gtnets/crosstraffic-p.xml ${srcdir:=.}/gtnets/crosstraffic-d.xml --cfg=network/crosstraffic:1
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/crosstraffic' to '1'
-> [C1:slave:(4) 314.563090] [msg_test/INFO] ===> Estimated Bw of FLOW[1] : 3179.012519 ;  message from S1 to C1  with remaining : 0.000000
-> [C1:slave:(4) 314.563090] [msg_test/INFO] ===> Estimated Bw of FLOW[2] : 3179.012519 ;  message from S1 to C1  with remaining : 0.000000
-> [C1:slave:(4) 314.563090] [msg_test/INFO] ===> Estimated Bw of FLOW[3] : 3179.012519 ;  message from S1 to C1  with remaining : 0.000000
-> [C1:slave:(4) 314.563090] [msg_test/INFO] ===> Estimated Bw of FLOW[4] : 3179.012519 ;  message from C1 to S1  with remaining : 0.000000
\ No newline at end of file
+> [S1:slave:(8) 314.563090] [msg_test/INFO] ===> Estimated Bw of FLOW[1] : 3179.012519 ;  message from S1 to C1  with remaining : 0.000000
+> [S1:slave:(8) 314.563090] [msg_test/INFO] ===> Estimated Bw of FLOW[2] : 3179.012519 ;  message from S1 to C1  with remaining : 0.000000
+> [S1:slave:(8) 314.563090] [msg_test/INFO] ===> Estimated Bw of FLOW[3] : 3179.012519 ;  message from S1 to C1  with remaining : 0.000000
+> [S1:slave:(8) 314.563090] [msg_test/INFO] ===> Estimated Bw of FLOW[4] : 3179.012519 ;  message from C1 to S1  with remaining : 0.000000
index db69e3c..ae154b0 100644 (file)
@@ -17,18 +17,18 @@ $ $SG_TEST_EXENV ${bindir:=.}/kademlia ${srcdir:=.}/../msg_platform.xml ${srcdir
 > [  0.000000] (11:node@Tanguay) Hi, I'm going to join the network with id 000003ff
 > [  0.000000] (12:node@Morin) Hi, I'm going to join the network with id 000007ff
 > [  0.000000] (13:node@Ethernet) Hi, I'm going to join the network with id 00000fff
 > [  0.000000] (11:node@Tanguay) Hi, I'm going to join the network with id 000003ff
 > [  0.000000] (12:node@Morin) Hi, I'm going to join the network with id 000007ff
 > [  0.000000] (13:node@Ethernet) Hi, I'm going to join the network with id 00000fff
-> [900.000000] ( 0:@) Messages created: 1277
+> [900.000000] ( 0:@) Messages created: 1283
 > [900.000000] ( 0:@) Simulated time: 900
 > [900.000000] ( 1:node@Jacquelin) 8/8 FIND_NODE have succeeded
 > [900.000000] ( 2:node@Boivin) 7/7 FIND_NODE have succeeded
 > [900.000000] ( 3:node@Jean_Yves) 6/6 FIND_NODE have succeeded
 > [900.000000] ( 4:node@TeX) 6/6 FIND_NODE have succeeded
 > [900.000000] ( 0:@) Simulated time: 900
 > [900.000000] ( 1:node@Jacquelin) 8/8 FIND_NODE have succeeded
 > [900.000000] ( 2:node@Boivin) 7/7 FIND_NODE have succeeded
 > [900.000000] ( 3:node@Jean_Yves) 6/6 FIND_NODE have succeeded
 > [900.000000] ( 4:node@TeX) 6/6 FIND_NODE have succeeded
-> [900.000000] ( 5:node@Geoff) 6/6 FIND_NODE have succeeded
+> [900.000000] ( 5:node@Geoff) 7/7 FIND_NODE have succeeded
 > [900.000000] ( 6:node@Disney) 6/6 FIND_NODE have succeeded
 > [900.000000] ( 7:node@iRMX) 6/6 FIND_NODE have succeeded
 > [900.000000] ( 8:node@McGee) 7/7 FIND_NODE have succeeded
 > [900.000000] ( 9:node@Gatien) 6/6 FIND_NODE have succeeded
 > [900.000000] (10:node@Laroche) 6/6 FIND_NODE have succeeded
 > [900.000000] ( 6:node@Disney) 6/6 FIND_NODE have succeeded
 > [900.000000] ( 7:node@iRMX) 6/6 FIND_NODE have succeeded
 > [900.000000] ( 8:node@McGee) 7/7 FIND_NODE have succeeded
 > [900.000000] ( 9:node@Gatien) 6/6 FIND_NODE have succeeded
 > [900.000000] (10:node@Laroche) 6/6 FIND_NODE have succeeded
-> [900.000000] (11:node@Tanguay) 6/6 FIND_NODE have succeeded
+> [900.000000] (11:node@Tanguay) 7/7 FIND_NODE have succeeded
 > [900.000000] (12:node@Morin) 7/7 FIND_NODE have succeeded
 > [900.000000] (13:node@Ethernet) 7/7 FIND_NODE have succeeded
 > [900.000000] (12:node@Morin) 7/7 FIND_NODE have succeeded
 > [900.000000] (13:node@Ethernet) 7/7 FIND_NODE have succeeded
index 8c977f3..a93e3b8 100644 (file)
@@ -1,6 +1,6 @@
 #! ./tesh
 
 #! ./tesh
 
-p Testing the Parallel Matrix Multiplication 
+p Testing the Parallel Matrix Multiplication
 
 ! timeout 120
 $ ./pmm/msg_pmm --log=msg_pmm.thres:verbose --log=no_loc ${srcdir:=.}/../platforms/cluster.xml ${srcdir:=.}/pmm/pmm_9_deploy.xml
 
 ! timeout 120
 $ ./pmm/msg_pmm --log=msg_pmm.thres:verbose --log=no_loc ${srcdir:=.}/../platforms/cluster.xml ${srcdir:=.}/pmm/pmm_9_deploy.xml
@@ -14,12 +14,6 @@ $ ./pmm/msg_pmm --log=msg_pmm.thres:verbose --log=no_loc ${srcdir:=.}/../platfor
 > [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 7
 > [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 8
 > [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Broadcast Jobs
 > [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 7
 > [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 8
 > [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Broadcast Jobs
-> [c-2.me:node:(3) 0.007813] [msg_pmm/VERBOSE] Got Job (0,2)
-> [c-2.me:node:(3) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [c-2.me:node:(3) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,2) to col 2
-> [c-1.me:node:(2) 0.007813] [msg_pmm/VERBOSE] Got Job (0,1)
-> [c-1.me:node:(2) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [c-1.me:node:(2) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,1) to col 1
 > [c-8.me:node:(9) 0.007813] [msg_pmm/VERBOSE] Got Job (2,2)
 > [c-8.me:node:(9) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
 > [c-8.me:node:(9) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-8.me:node:(9) 0.007813] [msg_pmm/VERBOSE] Got Job (2,2)
 > [c-8.me:node:(9) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
 > [c-8.me:node:(9) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
@@ -38,61 +32,67 @@ $ ./pmm/msg_pmm --log=msg_pmm.thres:verbose --log=no_loc ${srcdir:=.}/../platfor
 > [c-3.me:node:(4) 0.007813] [msg_pmm/VERBOSE] Got Job (1,0)
 > [c-3.me:node:(4) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
 > [c-3.me:node:(4) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(1,0) to row 1
 > [c-3.me:node:(4) 0.007813] [msg_pmm/VERBOSE] Got Job (1,0)
 > [c-3.me:node:(4) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
 > [c-3.me:node:(4) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(1,0) to row 1
-> [c-2.me:node:(3) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-1.me:node:(2) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-2.me:node:(3) 0.007813] [msg_pmm/VERBOSE] Got Job (0,2)
+> [c-2.me:node:(3) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
+> [c-2.me:node:(3) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,2) to col 2
+> [c-1.me:node:(2) 0.007813] [msg_pmm/VERBOSE] Got Job (0,1)
+> [c-1.me:node:(2) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
+> [c-1.me:node:(2) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,1) to col 1
 > [c-6.me:node:(7) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-3.me:node:(4) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-6.me:node:(7) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-3.me:node:(4) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-2.me:node:(3) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-1.me:node:(2) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-0.me:node:(1) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
 > [c-0.me:node:(1) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(0,0) to row 0
 > [c-0.me:node:(1) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,0) to col 0
 > [c-0.me:node:(1) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-0.me:node:(1) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
 > [c-0.me:node:(1) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(0,0) to row 0
 > [c-0.me:node:(1) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,0) to col 0
 > [c-0.me:node:(1) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-7.me:node:(8) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-5.me:node:(6) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-4.me:node:(5) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-8.me:node:(9) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-4.me:node:(5) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-8.me:node:(9) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-5.me:node:(6) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-7.me:node:(8) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-6.me:node:(7) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-6.me:node:(7) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-2.me:node:(3) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-3.me:node:(4) 0.015619] [msg_pmm/VERBOSE] Broadcast sB(1,0) to col 0
 > [c-3.me:node:(4) 0.015619] [msg_pmm/VERBOSE] Broadcast sB(1,0) to col 0
+> [c-2.me:node:(3) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-1.me:node:(2) 0.015619] [msg_pmm/VERBOSE] Broadcast sA(0,1) to row 0
 > [c-3.me:node:(4) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-1.me:node:(2) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-8.me:node:(9) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-1.me:node:(2) 0.015619] [msg_pmm/VERBOSE] Broadcast sA(0,1) to row 0
 > [c-3.me:node:(4) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-1.me:node:(2) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-8.me:node:(9) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-6.me:node:(7) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-0.me:node:(1) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-5.me:node:(6) 0.023426] [msg_pmm/VERBOSE] Broadcast sB(1,2) to col 2
 > [c-2.me:node:(3) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-7.me:node:(8) 0.023426] [msg_pmm/VERBOSE] Broadcast sA(2,1) to row 2
 > [c-2.me:node:(3) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-7.me:node:(8) 0.023426] [msg_pmm/VERBOSE] Broadcast sA(2,1) to row 2
-> [c-5.me:node:(6) 0.023426] [msg_pmm/VERBOSE] Broadcast sB(1,2) to col 2
-> [c-6.me:node:(7) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-4.me:node:(5) 0.023426] [msg_pmm/VERBOSE] Broadcast sA(1,1) to row 1
 > [c-4.me:node:(5) 0.023426] [msg_pmm/VERBOSE] Broadcast sA(1,1) to row 1
-> [c-0.me:node:(1) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-7.me:node:(8) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-5.me:node:(6) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-5.me:node:(6) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-7.me:node:(8) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-4.me:node:(5) 0.023426] [msg_pmm/VERBOSE] Broadcast sB(1,1) to col 1
 > [c-4.me:node:(5) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-4.me:node:(5) 0.023426] [msg_pmm/VERBOSE] Broadcast sB(1,1) to col 1
 > [c-4.me:node:(5) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-2.me:node:(3) 0.031233] [msg_pmm/VERBOSE] Broadcast sA(0,2) to row 0
-> [c-0.me:node:(1) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-6.me:node:(7) 0.031233] [msg_pmm/VERBOSE] Broadcast sB(2,0) to col 0
 > [c-6.me:node:(7) 0.031233] [msg_pmm/VERBOSE] Broadcast sB(2,0) to col 0
+> [c-0.me:node:(1) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-8.me:node:(9) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-8.me:node:(9) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-2.me:node:(3) 0.031233] [msg_pmm/VERBOSE] Broadcast sA(0,2) to row 0
+> [c-7.me:node:(8) 0.031233] [msg_pmm/VERBOSE] Broadcast sB(2,1) to col 1
+> [c-1.me:node:(2) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-5.me:node:(6) 0.031233] [msg_pmm/VERBOSE] Broadcast sA(1,2) to row 1
 > [c-3.me:node:(4) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-5.me:node:(6) 0.031233] [msg_pmm/VERBOSE] Broadcast sA(1,2) to row 1
 > [c-3.me:node:(4) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-1.me:node:(2) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-7.me:node:(8) 0.031233] [msg_pmm/VERBOSE] Broadcast sB(2,1) to col 1
-> [c-2.me:node:(3) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-6.me:node:(7) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-6.me:node:(7) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-5.me:node:(6) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-2.me:node:(3) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-7.me:node:(8) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-7.me:node:(8) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-5.me:node:(6) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-3.me:node:(4) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-0.me:node:(1) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-0.me:node:(1) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
+> [c-4.me:node:(5) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-1.me:node:(2) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-8.me:node:(9) 0.039040] [msg_pmm/VERBOSE] Broadcast sA(2,2) to row 2
 > [c-1.me:node:(2) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-8.me:node:(9) 0.039040] [msg_pmm/VERBOSE] Broadcast sA(2,2) to row 2
-> [c-3.me:node:(4) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-4.me:node:(5) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
 > [c-8.me:node:(9) 0.039040] [msg_pmm/VERBOSE] Broadcast sB(2,2) to col 2
 > [c-8.me:node:(9) 0.039040] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
 > [c-8.me:node:(9) 0.039040] [msg_pmm/VERBOSE] Broadcast sB(2,2) to col 2
 > [c-8.me:node:(9) 0.039040] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [c-1.me:node:(2) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
 > [c-4.me:node:(5) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
 > [c-3.me:node:(4) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
 > [c-4.me:node:(5) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
 > [c-3.me:node:(4) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
+> [c-1.me:node:(2) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
 > [c-0.me:node:(1) 0.046847] [msg_pmm/VERBOSE] Multiplication done.
 > [c-0.me:node:(1) 0.046847] [msg_pmm/VERBOSE] Receive Results.
 > [c-0.me:node:(1) 0.046847] [msg_pmm/VERBOSE] Multiplication done.
 > [c-0.me:node:(1) 0.046847] [msg_pmm/VERBOSE] Receive Results.
-> [c-6.me:node:(7) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [c-2.me:node:(3) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
 > [c-5.me:node:(6) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
 > [c-5.me:node:(6) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
+> [c-2.me:node:(3) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
 > [c-7.me:node:(8) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
 > [c-7.me:node:(8) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
+> [c-6.me:node:(7) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
 > [0.054659] [msg_pmm/CRITICAL] Simulated time: 0.0546594
 > [0.054659] [msg_pmm/CRITICAL] Simulated time: 0.0546594
index f54c9d6..b16da8d 100644 (file)
@@ -9,12 +9,12 @@ $ $SG_TEST_EXENV ${bindir:=.}/start_kill_time/sk_time ${srcdir:=.}/examples/plat
 > [  0.000000] (4:slave@c-3.me) Hello!
 > [  0.000000] (5:slave@c-4.me) Hello!
 > [  0.000000] (6:slave@c-5.me) Hello!
 > [  0.000000] (4:slave@c-3.me) Hello!
 > [  0.000000] (5:slave@c-4.me) Hello!
 > [  0.000000] (6:slave@c-5.me) Hello!
-> [ 10.000000] (6:slave@c-5.me) OK, goodbye now.
 > [ 10.000000] (1:master@c-0.me) OK, goodbye now.
 > [ 10.000000] (2:slave@c-1.me) OK, goodbye now.
 > [ 10.000000] (3:slave@c-2.me) OK, goodbye now.
 > [ 10.000000] (4:slave@c-3.me) OK, goodbye now.
 > [ 10.000000] (5:slave@c-4.me) OK, goodbye now.
 > [ 10.000000] (1:master@c-0.me) OK, goodbye now.
 > [ 10.000000] (2:slave@c-1.me) OK, goodbye now.
 > [ 10.000000] (3:slave@c-2.me) OK, goodbye now.
 > [ 10.000000] (4:slave@c-3.me) OK, goodbye now.
 > [ 10.000000] (5:slave@c-4.me) OK, goodbye now.
+> [ 10.000000] (6:slave@c-5.me) OK, goodbye now.
 > [ 10.000000] (0:@) Simulation time 10
 
 p Test1 Process with start time
 > [ 10.000000] (0:@) Simulation time 10
 
 p Test1 Process with start time
index 37603c6..4d54058 100644 (file)
@@ -11,8 +11,8 @@ $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile  -platf
 > [0.000000] [rank 0] Pstates: 3; Powers: 100000000, 50000000, 20000000
 > [0.000000] [rank 1] Current pstate: 0; Current power: 100000000
 > [0.000000] [rank 0] Current pstate: 0; Current power: 100000000
 > [0.000000] [rank 0] Pstates: 3; Powers: 100000000, 50000000, 20000000
 > [0.000000] [rank 1] Current pstate: 0; Current power: 100000000
 > [0.000000] [rank 0] Current pstate: 0; Current power: 100000000
-> [10.000000] [rank 1] Energy consumed: 2000 Joules.
 > [10.000000] [rank 0] Energy consumed: 2000 Joules.
 > [10.000000] [rank 0] Energy consumed: 2000 Joules.
+> [10.000000] [rank 1] Energy consumed: 2000 Joules.
 > [10.000000] [rank 0] Current pstate: 1; Current power: 50000000
 > [30.000000] [rank 0] Energy consumed: 5400 Joules.
 > [30.000000] [rank 0] Current pstate: 2; Current power: 20000000
 > [10.000000] [rank 0] Current pstate: 1; Current power: 50000000
 > [30.000000] [rank 0] Energy consumed: 5400 Joules.
 > [30.000000] [rank 0] Current pstate: 2; Current power: 20000000
index 1f4b353..83f6ff0 100644 (file)
@@ -18,8 +18,8 @@ $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile  -platf
 >  [  0.] [rank  0] Power:   20000000.
 >  [  0.] [rank  1] Current pstate:  0; Current power:   100000000.
 >  [  0.] [rank  0] Current pstate:  0; Current power:   100000000.
 >  [  0.] [rank  0] Power:   20000000.
 >  [  0.] [rank  1] Current pstate:  0; Current power:   100000000.
 >  [  0.] [rank  0] Current pstate:  0; Current power:   100000000.
->  [  10.] [rank  1] Energy consumed (Joules):   2000.
 >  [  10.] [rank  0] Energy consumed (Joules):   2000.
 >  [  10.] [rank  0] Energy consumed (Joules):   2000.
+>  [  10.] [rank  1] Energy consumed (Joules):   2000.
 >  [  10.] [rank  0] Current pstate:  1; Current power:   50000000.
 >  [  30.] [rank  0] Energy consumed (Joules):   5400.
 >  [  30.] [rank  0] Current pstate:  2; Current power:   20000000.
 >  [  10.] [rank  0] Current pstate:  1; Current power:   50000000.
 >  [  30.] [rank  0] Energy consumed (Joules):   5400.
 >  [  30.] [rank  0] Current pstate:  2; Current power:   20000000.
index e78dff5..aae09c9 100644 (file)
@@ -18,8 +18,8 @@ $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile  -platf
 >  [   0.0000000000000000      ] [rank            0 ] Power:    20000000.000000000     
 >  [   0.0000000000000000      ] [rank            1 ] Current pstate:            0 ; Current power:    100000000.00000000     
 >  [   0.0000000000000000      ] [rank            0 ] Current pstate:            0 ; Current power:    100000000.00000000     
 >  [   0.0000000000000000      ] [rank            0 ] Power:    20000000.000000000     
 >  [   0.0000000000000000      ] [rank            1 ] Current pstate:            0 ; Current power:    100000000.00000000     
 >  [   0.0000000000000000      ] [rank            0 ] Current pstate:            0 ; Current power:    100000000.00000000     
->  [   10.000000000000000      ] [rank            1 ] Energy consumed (Joules):    2000.0000000000000     
 >  [   10.000000000000000      ] [rank            0 ] Energy consumed (Joules):    2000.0000000000000     
 >  [   10.000000000000000      ] [rank            0 ] Energy consumed (Joules):    2000.0000000000000     
+>  [   10.000000000000000      ] [rank            1 ] Energy consumed (Joules):    2000.0000000000000     
 >  [   10.000000000000000      ] [rank            0 ] Current pstate:            1 ; Current power:    50000000.000000000     
 >  [   30.000000000000000      ] [rank            0 ] Energy consumed (Joules):    5400.0000000000000     
 >  [   30.000000000000000      ] [rank            0 ] Current pstate:            2 ; Current power:    20000000.000000000     
 >  [   10.000000000000000      ] [rank            0 ] Current pstate:            1 ; Current power:    50000000.000000000     
 >  [   30.000000000000000      ] [rank            0 ] Energy consumed (Joules):    5400.0000000000000     
 >  [   30.000000000000000      ] [rank            0 ] Current pstate:            2 ; Current power:    20000000.000000000     
index 480018a..a842c83 100644 (file)
@@ -345,9 +345,9 @@ $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.thresh:critical --
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'smpi/cpu_threshold' to '-1'
 > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s)
 > [Tremblay:0:(0) 0.004041] [smpi_replay/VERBOSE] 0 allToAll 500 500 0.004041
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'smpi/cpu_threshold' to '-1'
 > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s)
 > [Tremblay:0:(0) 0.004041] [smpi_replay/VERBOSE] 0 allToAll 500 500 0.004041
-> [Jupiter:1:(0) 0.006920] [smpi_replay/VERBOSE] 1 allToAll 500 500 0.006920
 > [Fafard:2:(0) 0.006920] [smpi_replay/VERBOSE] 2 allToAll 500 500 0.006920
 > [Fafard:2:(0) 0.006920] [smpi_replay/VERBOSE] 2 allToAll 500 500 0.006920
-> [Fafard:2:(0) 0.006920] [smpi_replay/INFO] Simulation time 0.006920
+> [Jupiter:1:(0) 0.006920] [smpi_replay/VERBOSE] 1 allToAll 500 500 0.006920
+> [Jupiter:1:(0) 0.006920] [smpi_replay/INFO] Simulation time 0.006920
 
 $ rm -f replay/one_trace
 
 
 $ rm -f replay/one_trace
 
index b58815c..5464386 100644 (file)
@@ -85,8 +85,7 @@ CpuCas01Model::CpuCas01Model() : CpuModel("cpu")
   }
 
   if (getUpdateMechanism() == UM_LAZY) {
   }
 
   if (getUpdateMechanism() == UM_LAZY) {
-    p_actionHeap = xbt_heap_new(8, NULL);
-    xbt_heap_set_update_callback(p_actionHeap,  surf_action_lmm_update_index_heap);
+    p_actionHeap = new ActionHeap();
     p_modifiedSet = new ActionLmmList();
     p_maxminSystem->keep_track = p_modifiedSet;
   }
     p_modifiedSet = new ActionLmmList();
     p_maxminSystem->keep_track = p_modifiedSet;
   }
@@ -98,7 +97,7 @@ CpuCas01Model::~CpuCas01Model()
   p_maxminSystem = NULL;
 
   if (p_actionHeap)
   p_maxminSystem = NULL;
 
   if (p_actionHeap)
-    xbt_heap_free(p_actionHeap);
+    delete p_actionHeap;
   delete p_modifiedSet;
 
   surf_cpu_model_pm = NULL;
   delete p_modifiedSet;
 
   surf_cpu_model_pm = NULL;
@@ -315,7 +314,7 @@ CpuActionPtr CpuCas01::sleep(double duration)
   lmm_update_variable_weight(getModel()->getMaxminSystem(),
                              action->getVariable(), 0.0);
   if (getModel()->getUpdateMechanism() == UM_LAZY) {     // remove action from the heap
   lmm_update_variable_weight(getModel()->getMaxminSystem(),
                              action->getVariable(), 0.0);
   if (getModel()->getUpdateMechanism() == UM_LAZY) {     // remove action from the heap
-    action->heapRemove(getModel()->getActionHeap());
+    action->heapRemove();
     // this is necessary for a variable with weight 0 since such
     // variables are ignored in lmm and we need to set its max_duration
     // correctly at the next call to share_resources
     // this is necessary for a variable with weight 0 since such
     // variables are ignored in lmm and we need to set its max_duration
     // correctly at the next call to share_resources
@@ -365,7 +364,6 @@ CpuCas01Action::CpuCas01Action(ModelPtr model, double cost, bool failed, double
 {
   m_suspended = 0;
   if (model->getUpdateMechanism() == UM_LAZY) {
 {
   m_suspended = 0;
   if (model->getUpdateMechanism() == UM_LAZY) {
-    m_indexHeap = -1;
     m_lastUpdate = surf_get_clock();
     m_lastValue = 0.0;
   }
     m_lastUpdate = surf_get_clock();
     m_lastValue = 0.0;
   }
index 7dc2d1a..8c667e5 100644 (file)
@@ -53,9 +53,11 @@ void cpu_add_traces(){
 void CpuModel::updateActionsStateLazy(double now, double /*delta*/)
 {
   CpuActionPtr action;
 void CpuModel::updateActionsStateLazy(double now, double /*delta*/)
 {
   CpuActionPtr action;
-  while ((xbt_heap_size(getActionHeap()) > 0)
-         && (double_equals(xbt_heap_maxkey(getActionHeap()), now, sg_surf_precision))) {
-    action = static_cast<CpuActionPtr>(xbt_heap_pop(getActionHeap()));
+  while ((!getActionHeap()->empty())
+         && (double_equals(getActionHeap()->topKey(), now, sg_surf_precision))) {
+
+    action = static_cast<CpuActionPtr>(getActionHeap()->topValue());
+    getActionHeap()->pop();
     XBT_CDEBUG(surf_kernel, "Something happened to action %p", action);
 #ifdef HAVE_TRACING
     if (TRACE_is_enabled()) {
     XBT_CDEBUG(surf_kernel, "Something happened to action %p", action);
 #ifdef HAVE_TRACING
     if (TRACE_is_enabled()) {
@@ -73,7 +75,6 @@ void CpuModel::updateActionsStateLazy(double now, double /*delta*/)
     /* set the remains to 0 due to precision problems when updating the remaining amount */
     action->setRemains(0);
     action->setState(SURF_ACTION_DONE);
     /* set the remains to 0 due to precision problems when updating the remaining amount */
     action->setRemains(0);
     action->setState(SURF_ACTION_DONE);
-    action->heapRemove(getActionHeap()); //FIXME: strange call since action was already popped
   }
 #ifdef HAVE_TRACING
   if (TRACE_is_enabled()) {
   }
 #ifdef HAVE_TRACING
   if (TRACE_is_enabled()) {
index d592f52..61e3a5e 100644 (file)
@@ -889,7 +889,7 @@ int CpuTiAction::unref()
 void CpuTiAction::cancel()
 {
   this->setState(SURF_ACTION_FAILED);
 void CpuTiAction::cancel()
 {
   this->setState(SURF_ACTION_FAILED);
-  xbt_heap_remove(getModel()->getActionHeap(), this->m_indexHeap);
+  heapRemove();
   xbt_swag_insert(p_cpu, static_cast<CpuTiModelPtr>(getModel())->p_modifiedCpu);
   return;
 }
   xbt_swag_insert(p_cpu, static_cast<CpuTiModelPtr>(getModel())->p_modifiedCpu);
   return;
 }
@@ -904,7 +904,7 @@ void CpuTiAction::suspend()
   XBT_IN("(%p)", this);
   if (m_suspended != 2) {
     m_suspended = 1;
   XBT_IN("(%p)", this);
   if (m_suspended != 2) {
     m_suspended = 1;
-    xbt_heap_remove(getModel()->getActionHeap(), m_indexHeap);
+    heapRemove();
     xbt_swag_insert(p_cpu, static_cast<CpuTiModelPtr>(getModel())->p_modifiedCpu);
   }
   XBT_OUT();
     xbt_swag_insert(p_cpu, static_cast<CpuTiModelPtr>(getModel())->p_modifiedCpu);
   }
   XBT_OUT();
@@ -940,14 +940,8 @@ void CpuTiAction::setMaxDuration(double duration)
     min_finish = getFinishTime();
 
 /* add in action heap */
     min_finish = getFinishTime();
 
 /* add in action heap */
-  if (m_indexHeap >= 0) {
-    CpuTiActionPtr heap_act = (CpuTiActionPtr)
-        xbt_heap_remove(getModel()->getActionHeap(), m_indexHeap);
-    if (heap_act != this)
-      DIE_IMPOSSIBLE;
-  }
-  xbt_heap_push(getModel()->getActionHeap(), this, min_finish);
-
+  heapRemove();
+  heapInsert(min_finish, NOTSET);
   XBT_OUT();
 }
 
   XBT_OUT();
 }
 
index 278dacd..d7c41bb 100644 (file)
@@ -192,8 +192,7 @@ void NetworkCm02Model::initialize()
                                                   SURF_LINK_FATPIPE, NULL));
 
   if (p_updateMechanism == UM_LAZY) {
                                                   SURF_LINK_FATPIPE, NULL));
 
   if (p_updateMechanism == UM_LAZY) {
-       p_actionHeap = xbt_heap_new(8, NULL);
-       xbt_heap_set_update_callback(p_actionHeap, surf_action_lmm_update_index_heap);
+       p_actionHeap = new ActionHeap();
        p_modifiedSet = new ActionLmmList();
        p_maxminSystem->keep_track = p_modifiedSet;
   }
        p_modifiedSet = new ActionLmmList();
        p_maxminSystem->keep_track = p_modifiedSet;
   }
@@ -229,9 +228,10 @@ NetworkLinkPtr NetworkCm02Model::createNetworkLink(const char *name,
 void NetworkCm02Model::updateActionsStateLazy(double now, double /*delta*/)
 {
   NetworkCm02ActionPtr action;
 void NetworkCm02Model::updateActionsStateLazy(double now, double /*delta*/)
 {
   NetworkCm02ActionPtr action;
-  while ((xbt_heap_size(p_actionHeap) > 0)
-         && (double_equals(xbt_heap_maxkey(p_actionHeap), now, sg_surf_precision))) {
-    action = (NetworkCm02ActionPtr) xbt_heap_pop(p_actionHeap);
+  while ((!p_actionHeap->empty())
+         && (double_equals(p_actionHeap->topKey(), now, sg_surf_precision))) {
+    action = (NetworkCm02ActionPtr) p_actionHeap->topValue();
+    p_actionHeap->pop();
     XBT_DEBUG("Something happened to action %p", action);
 #ifdef HAVE_TRACING
     if (TRACE_is_enabled()) {
     XBT_DEBUG("Something happened to action %p", action);
 #ifdef HAVE_TRACING
     if (TRACE_is_enabled()) {
@@ -255,22 +255,22 @@ void NetworkCm02Model::updateActionsStateLazy(double now, double /*delta*/)
 #endif
 
     // if I am wearing a latency hat
 #endif
 
     // if I am wearing a latency hat
-    if (action->getHat() == LATENCY) {
+    if (action->getHeapActionType() == LATENCY) {
       XBT_DEBUG("Latency paid for action %p. Activating", action);
       lmm_update_variable_weight(p_maxminSystem, action->getVariable(), action->m_weight);
       XBT_DEBUG("Latency paid for action %p. Activating", action);
       lmm_update_variable_weight(p_maxminSystem, action->getVariable(), action->m_weight);
-      action->heapRemove(p_actionHeap);
+      action->heapRemove();
       action->refreshLastUpdate();
 
         // if I am wearing a max_duration or normal hat
       action->refreshLastUpdate();
 
         // if I am wearing a max_duration or normal hat
-    } else if (action->getHat() == MAX_DURATION ||
-        action->getHat() == NORMAL) {
+    } else if (action->getHeapActionType() == MAX_DURATION ||
+        action->getHeapActionType() == NORMAL) {
         // no need to communicate anymore
         // assume that flows that reached max_duration have remaining of 0
       XBT_DEBUG("Action %p finished", action);
       action->setRemains(0);
       action->finish();
       action->setState(SURF_ACTION_DONE);
         // no need to communicate anymore
         // assume that flows that reached max_duration have remaining of 0
       XBT_DEBUG("Action %p finished", action);
       action->setRemains(0);
       action->finish();
       action->setState(SURF_ACTION_DONE);
-      action->heapRemove(p_actionHeap);
+      action->heapRemove();
 
       action->gapRemove();
     }
 
       action->gapRemove();
     }
@@ -327,7 +327,6 @@ ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEdgePtr dst,
 
   action->m_rate = rate;
   if (p_updateMechanism == UM_LAZY) {
 
   action->m_rate = rate;
   if (p_updateMechanism == UM_LAZY) {
-    action->m_indexHeap = -1;
     action->m_lastUpdate = surf_get_clock();
   }
 
     action->m_lastUpdate = surf_get_clock();
   }
 
@@ -370,7 +369,8 @@ ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEdgePtr dst,
       // add to the heap the event when the latency is payed
       XBT_DEBUG("Added action (%p) one latency event at date %f", action,
                 action->m_latency + action->m_lastUpdate);
       // add to the heap the event when the latency is payed
       XBT_DEBUG("Added action (%p) one latency event at date %f", action,
                 action->m_latency + action->m_lastUpdate);
-      action->heapInsert(p_actionHeap, action->m_latency + action->m_lastUpdate, xbt_dynar_is_empty(route) ? NORMAL : LATENCY);
+
+      action->heapInsert(action->m_latency + action->m_lastUpdate, xbt_dynar_is_empty(route) ? NORMAL : LATENCY);
     }
   } else
     action->p_variable = lmm_variable_new(p_maxminSystem, action, 1.0, -1.0, constraints_per_variable);
     }
   } else
     action->p_variable = lmm_variable_new(p_maxminSystem, action, 1.0, -1.0, constraints_per_variable);
@@ -617,12 +617,12 @@ void NetworkCm02Action::updateRemainingLazy(double now)
     finish();
     setState(SURF_ACTION_DONE);
 
     finish();
     setState(SURF_ACTION_DONE);
 
-    heapRemove(getModel()->getActionHeap());
+    heapRemove();
   } else if (((m_maxDuration != NO_MAX_DURATION)
       && (m_maxDuration <= 0))) {
     finish();
     setState(SURF_ACTION_DONE);
   } else if (((m_maxDuration != NO_MAX_DURATION)
       && (m_maxDuration <= 0))) {
     finish();
     setState(SURF_ACTION_DONE);
-    heapRemove(getModel()->getActionHeap());
+    heapRemove();
   }
 
   m_lastUpdate = now;
   }
 
   m_lastUpdate = now;
index b654419..67d9cd9 100644 (file)
@@ -96,7 +96,7 @@ public:
        if (p_maxminSystem)
          lmm_system_free(p_maxminSystem);
        if (p_actionHeap)
        if (p_maxminSystem)
          lmm_system_free(p_maxminSystem);
        if (p_actionHeap)
-         xbt_heap_free(p_actionHeap);
+         delete p_actionHeap;
        if (p_modifiedSet)
          delete p_modifiedSet;
   }
        if (p_modifiedSet)
          delete p_modifiedSet;
   }
index 52b1722..3ee6695 100644 (file)
@@ -541,7 +541,7 @@ double Model::shareResourcesLazy(double now)
       continue;
 
     /* bogus priority, skip it */
       continue;
 
     /* bogus priority, skip it */
-    if (action->getPriority() <= 0 || action->getHat()==LATENCY)
+    if (action->getPriority() <= 0 || action->getHeapActionType()==LATENCY)
       continue;
 
     action->updateRemainingLazy(now);
       continue;
 
     action->updateRemainingLazy(now);
@@ -576,17 +576,17 @@ double Model::shareResourcesLazy(double now)
         action->getMaxDuration());
 
     if (min != -1) {
         action->getMaxDuration());
 
     if (min != -1) {
-      action->heapRemove(p_actionHeap);
-      action->heapInsert(p_actionHeap, min, max_dur_flag ? MAX_DURATION : NORMAL);
+      action->heapRemove();
+      action->heapInsert(min, max_dur_flag ? MAX_DURATION : NORMAL);
       XBT_DEBUG("Insert at heap action(%p) min %f now %f", action, min,
                 now);
     } else DIE_IMPOSSIBLE;
   }
 
   //hereafter must have already the min value for this resource model
       XBT_DEBUG("Insert at heap action(%p) min %f now %f", action, min,
                 now);
     } else DIE_IMPOSSIBLE;
   }
 
   //hereafter must have already the min value for this resource model
-  if (xbt_heap_size(p_actionHeap) > 0)
-    min = xbt_heap_maxkey(p_actionHeap) - now;
-  else
+  if (!p_actionHeap->empty()) {
+    min = p_actionHeap->topKey() - now;
+  else
     min = -1;
 
   XBT_DEBUG("The minimum with the HEAP %f", min);
     min = -1;
 
   XBT_DEBUG("The minimum with the HEAP %f", min);
@@ -867,7 +867,7 @@ void Action::setBound(double bound)
     lmm_update_variable_bound(getModel()->getMaxminSystem(), getVariable(), bound);
 
   if (getModel()->getUpdateMechanism() == UM_LAZY && getLastUpdate()!=surf_get_clock())
     lmm_update_variable_bound(getModel()->getMaxminSystem(), getVariable(), bound);
 
   if (getModel()->getUpdateMechanism() == UM_LAZY && getLastUpdate()!=surf_get_clock())
-         heapRemove(getModel()->getActionHeap());
+         heapRemove();
   XBT_OUT();
 }
 
   XBT_OUT();
 }
 
@@ -905,7 +905,7 @@ void Action::setMaxDuration(double duration)
   XBT_IN("(%p,%g)", this, duration);
   m_maxDuration = duration;
   if (getModel()->getUpdateMechanism() == UM_LAZY)      // remove action from the heap
   XBT_IN("(%p,%g)", this, duration);
   m_maxDuration = duration;
   if (getModel()->getUpdateMechanism() == UM_LAZY)      // remove action from the heap
-    heapRemove(getModel()->getActionHeap());
+    heapRemove();
   XBT_OUT();
 }
 
   XBT_OUT();
 }
 
@@ -918,7 +918,7 @@ void Action::setPriority(double priority)
   lmm_update_variable_weight(getModel()->getMaxminSystem(), getVariable(), priority);
 
   if (getModel()->getUpdateMechanism() == UM_LAZY)
   lmm_update_variable_weight(getModel()->getMaxminSystem(), getVariable(), priority);
 
   if (getModel()->getUpdateMechanism() == UM_LAZY)
-       heapRemove(getModel()->getActionHeap());
+       heapRemove();
   XBT_OUT();
 }
 
   XBT_OUT();
 }
 
@@ -927,25 +927,25 @@ void Action::cancel(){
   if (getModel()->getUpdateMechanism() == UM_LAZY) {
        if (actionLmmHook::is_linked())
          getModel()->getModifiedSet()->erase(getModel()->getModifiedSet()->iterator_to(*this));
   if (getModel()->getUpdateMechanism() == UM_LAZY) {
        if (actionLmmHook::is_linked())
          getModel()->getModifiedSet()->erase(getModel()->getModifiedSet()->iterator_to(*this));
-    heapRemove(getModel()->getActionHeap());
+    heapRemove();
   }
 }
 
 int Action::unref(){
   m_refcount--;
   if (!m_refcount) {
   }
 }
 
 int Action::unref(){
   m_refcount--;
   if (!m_refcount) {
-       if (actionHook::is_linked())
-         p_stateSet->erase(p_stateSet->iterator_to(*this));
-       if (getVariable())
-         lmm_variable_free(getModel()->getMaxminSystem(), getVariable());
-       if (getModel()->getUpdateMechanism() == UM_LAZY) {
-         /* remove from heap */
-         heapRemove(getModel()->getActionHeap());
+         if (actionHook::is_linked())
+           p_stateSet->erase(p_stateSet->iterator_to(*this));
+         if (getVariable())
+           lmm_variable_free(getModel()->getMaxminSystem(), getVariable());
+         if (getModel()->getUpdateMechanism() == UM_LAZY) {
+           /* remove from heap */
+           heapRemove();
       if (actionLmmHook::is_linked())
       if (actionLmmHook::is_linked())
-           getModel()->getModifiedSet()->erase(getModel()->getModifiedSet()->iterator_to(*this));
+             getModel()->getModifiedSet()->erase(getModel()->getModifiedSet()->iterator_to(*this));
     }
     }
-       delete this;
-       return 1;
+         delete this;
+         return 1;
   }
   return 0;
 }
   }
   return 0;
 }
@@ -957,7 +957,7 @@ void Action::suspend()
     lmm_update_variable_weight(getModel()->getMaxminSystem(), getVariable(), 0.0);
     m_suspended = 1;
     if (getModel()->getUpdateMechanism() == UM_LAZY)
     lmm_update_variable_weight(getModel()->getMaxminSystem(), getVariable(), 0.0);
     m_suspended = 1;
     if (getModel()->getUpdateMechanism() == UM_LAZY)
-      heapRemove(getModel()->getActionHeap());
+      heapRemove();
   }
   XBT_OUT();
 }
   }
   XBT_OUT();
 }
@@ -969,7 +969,7 @@ void Action::resume()
     lmm_update_variable_weight(getModel()->getMaxminSystem(), getVariable(), m_priority);
     m_suspended = 0;
     if (getModel()->getUpdateMechanism() == UM_LAZY)
     lmm_update_variable_weight(getModel()->getMaxminSystem(), getVariable(), m_priority);
     m_suspended = 0;
     if (getModel()->getUpdateMechanism() == UM_LAZY)
-      heapRemove(getModel()->getActionHeap());
+      heapRemove();
   }
   XBT_OUT();
 }
   }
   XBT_OUT();
 }
@@ -985,29 +985,21 @@ bool Action::isSuspended()
  * LATENCY = this is a heap entry to warn us when the latency is payed
  * MAX_DURATION =this is a heap entry to warn us when the max_duration limit is reached
  */
  * LATENCY = this is a heap entry to warn us when the latency is payed
  * MAX_DURATION =this is a heap entry to warn us when the max_duration limit is reached
  */
-void Action::heapInsert(xbt_heap_t heap, double key, enum heap_action_type hat)
+void Action::heapInsert(double key, enum heap_action_type hat)
 {
   m_hat = hat;
 {
   m_hat = hat;
-  xbt_heap_push(heap, this, key);
+  sp_heapHandle = getModel()->getActionHeap()->push(key, this);
 }
 
 }
 
-void Action::heapRemove(xbt_heap_t heap)
+void Action::heapRemove()
 {
   m_hat = NOTSET;
 {
   m_hat = NOTSET;
-  if (m_indexHeap >= 0) {
-    xbt_heap_remove(heap, m_indexHeap);
+  if (sp_heapHandle) {
+    getModel()->getActionHeap()->erase(sp_heapHandle);
+    sp_heapHandle.reset();
   }
 }
 
   }
 }
 
-/* added to manage the communication action's heap */
-void surf_action_lmm_update_index_heap(void *action, int i) {
-  ((ActionPtr)action)->updateIndexHeap(i);
-}
-
-void Action::updateIndexHeap(int i) {
-  m_indexHeap = i;
-}
-
 double Action::getRemains()
 {
   XBT_IN("(%p)", this);
 double Action::getRemains()
 {
   XBT_IN("(%p)", this);
@@ -1068,12 +1060,12 @@ void Action::updateRemainingLazy(double now)
         (lmm_get_variable_weight(getVariable()) > 0)) {
       finish();
       setState(SURF_ACTION_DONE);
         (lmm_get_variable_weight(getVariable()) > 0)) {
       finish();
       setState(SURF_ACTION_DONE);
-      heapRemove(getModel()->getActionHeap());
+      heapRemove();
     } else if (((m_maxDuration != NO_MAX_DURATION)
         && (m_maxDuration <= 0))) {
       finish();
       setState(SURF_ACTION_DONE);
     } else if (((m_maxDuration != NO_MAX_DURATION)
         && (m_maxDuration <= 0))) {
       finish();
       setState(SURF_ACTION_DONE);
-      heapRemove(getModel()->getActionHeap());
+      heapRemove();
     }
   }
 
     }
   }
 
index 4270a6e..513a293 100644 (file)
@@ -13,6 +13,8 @@
 #include <memory>
 #include <boost/function.hpp>
 #include <boost/intrusive/list.hpp>
 #include <memory>
 #include <boost/function.hpp>
 #include <boost/intrusive/list.hpp>
+#include <boost/heap/fibonacci_heap.hpp>
+#include <boost/smart_ptr.hpp>
 #include "surf/trace_mgr.h"
 #include "xbt/lib.h"
 #include "surf/surf_routing.h"
 #include "surf/trace_mgr.h"
 #include "xbt/lib.h"
 #include "surf/surf_routing.h"
@@ -88,6 +90,56 @@ typedef ActionLmmList* ActionLmmListPtr;
 typedef boost::intrusive::list_base_hook<boost::intrusive::tag<lmmTag> > actionLmmHook;
 
 
 typedef boost::intrusive::list_base_hook<boost::intrusive::tag<lmmTag> > actionLmmHook;
 
 
+template <typename K, typename V>
+class Heap {
+  class HeapItem;
+  struct compare_PI : binary_function <boost::shared_ptr<HeapItem>, boost::shared_ptr<HeapItem>, bool> {
+    bool operator() (boost::shared_ptr<HeapItem> x, boost::shared_ptr<HeapItem> y) const {
+      return (x->p_key==y->p_key) ? x->m_i<y->m_i : x->p_key>y->p_key;}
+  };
+public:
+  typedef typename boost::heap::fibonacci_heap<boost::shared_ptr<HeapItem>, boost::heap::compare<compare_PI > >::handle_type HeapHandle;
+  typedef boost::shared_ptr<HeapHandle> HeapHandleSPtr;
+private:
+  class HeapItem {
+  public:
+    HeapItem(K key, V value, int i)
+     : p_key(key), p_value(value), m_i(i) {
+    }
+    K p_key;
+    V p_value;
+    int m_i;
+    HeapHandleSPtr sp_handle;
+  };
+  boost::heap::fibonacci_heap<boost::shared_ptr<HeapItem>, boost::heap::compare<compare_PI > > m_heap;
+public:
+  int m_i;
+  Heap() : m_i(0) {}
+  HeapHandleSPtr push(K key, V value) {
+    boost::shared_ptr<HeapItem> hi(new HeapItem(key, value, m_i++));
+    hi->sp_handle = boost::shared_ptr<HeapHandle>(new HeapHandle(m_heap.push(hi)));
+    return hi->sp_handle;
+  }
+  void pop() {
+    HeapHandleSPtr hl = m_heap.top()->sp_handle;
+    m_heap.pop();
+    hl->node_ = NULL;
+  }
+  void erase(HeapHandleSPtr handle) {
+    if (used(handle)) {
+      m_heap.erase(*handle);
+      handle->node_ = NULL;
+    }
+  }
+  K topKey() {return m_heap.top()->p_key;}
+  V topValue() {return m_heap.top()->p_value;}
+  int size() {return m_heap.size();}
+  bool empty() {return m_heap.empty();}
+  bool used(HeapHandleSPtr handle) {return handle && handle->node_!=NULL;}
+};
+
+typedef Heap<double, ActionPtr> ActionHeap;
+
 enum heap_action_type{
   LATENCY = 100,
   MAX_DURATION,
 enum heap_action_type{
   LATENCY = 100,
   MAX_DURATION,
@@ -194,7 +246,7 @@ public:
    *
    * @return The Action heap
    */
    *
    * @return The Action heap
    */
-  xbt_heap_t getActionHeap() {return p_actionHeap;}
+  ActionHeap *getActionHeap() {return p_actionHeap;}
 
   /**
    * @brief share the resources
 
   /**
    * @brief share the resources
@@ -226,7 +278,7 @@ protected:
   lmm_system_t p_maxminSystem;
   e_UM_t p_updateMechanism;
   int m_selectiveUpdate;
   lmm_system_t p_maxminSystem;
   e_UM_t p_updateMechanism;
   int m_selectiveUpdate;
-  xbt_heap_t p_actionHeap;
+  ActionHeap *p_actionHeap;
 
 private:
   const char *p_name;
 
 private:
   const char *p_name;
@@ -385,7 +437,6 @@ private:
 /**********
  * Action *
  **********/
 /**********
  * Action *
  **********/
-void surf_action_lmm_update_index_heap(void *action, int i);
 
 /** @ingroup SURF_interface
  * @brief SURF action interface class
 
 /** @ingroup SURF_interface
  * @brief SURF action interface class
@@ -679,7 +730,6 @@ private:
                                  double value, double time);
 
   ActionLmmListPtr p_modifiedSet;
                                  double value, double time);
 
   ActionLmmListPtr p_modifiedSet;
-  xbt_heap_t p_actionHeap;
   int m_selectiveUpdate;
   bool m_failed;
   double m_start; /**< start time  */
   int m_selectiveUpdate;
   bool m_failed;
   double m_start; /**< start time  */
@@ -694,14 +744,13 @@ private:
 
   /* LMM */
 public:
 
   /* LMM */
 public:
+  void heapInsert(double key, enum heap_action_type hat);
+  void heapRemove();
+  enum heap_action_type getHeapActionType() {return m_hat;}
   virtual void updateRemainingLazy(double now);
   virtual void updateRemainingLazy(double now);
-  void heapInsert(xbt_heap_t heap, double key, enum heap_action_type hat);
-  void heapRemove(xbt_heap_t heap);
-  void updateIndexHeap(int i);
   lmm_variable_t getVariable() {return p_variable;}
   double getLastUpdate() {return m_lastUpdate;}
   void refreshLastUpdate() {m_lastUpdate = surf_get_clock();}
   lmm_variable_t getVariable() {return p_variable;}
   double getLastUpdate() {return m_lastUpdate;}
   void refreshLastUpdate() {m_lastUpdate = surf_get_clock();}
-  enum heap_action_type getHat() {return m_hat;}
   bool is_linked() {return actionLmmHook::is_linked();}
   void gapRemove();
 
   bool is_linked() {return actionLmmHook::is_linked();}
   void gapRemove();
 
@@ -710,7 +759,7 @@ protected:
   double m_lastValue;
   double m_lastUpdate;
   int m_suspended;
   double m_lastValue;
   double m_lastUpdate;
   int m_suspended;
-  int m_indexHeap;
+  ActionHeap::HeapHandleSPtr sp_heapHandle;
   enum heap_action_type m_hat;
 };
 
   enum heap_action_type m_hat;
 };
 
index 90548a5..f672fe0 100644 (file)
@@ -12,6 +12,6 @@ $ process_join ${srcdir:=.}/process_join_p.xml ${srcdir:=.}/process_join_d.xml
 > [Tremblay:slave from master:(4) 5.000000] [msg_test/INFO] Slave started
 > [Tremblay:master:(1) 5.000000] [msg_test/INFO] Join the slave (timeout 2)
 > [Tremblay:master:(1) 7.000000] [msg_test/INFO] Goodbye now!
 > [Tremblay:slave from master:(4) 5.000000] [msg_test/INFO] Slave started
 > [Tremblay:master:(1) 5.000000] [msg_test/INFO] Join the slave (timeout 2)
 > [Tremblay:master:(1) 7.000000] [msg_test/INFO] Goodbye now!
-> [Tremblay:slave from master:(4) 8.000000] [msg_test/INFO] I'm done. See you!
 > [Tremblay:master:(1) 8.000000] [msg_test/INFO] Goodbye now!
 > [Tremblay:master:(1) 8.000000] [msg_test/INFO] Goodbye now!
+> [Tremblay:slave from master:(4) 8.000000] [msg_test/INFO] I'm done. See you!
 > [8.000000] [msg_test/INFO] Simulation time 8
 > [8.000000] [msg_test/INFO] Simulation time 8