+++ /dev/null
-# System-dependent values determined by the configuration script.
-
-#
-# Should not print info about cd-ing to directories
-#
-#.SILENT:
-
-#
-# Variables
-#
-SIMGRID_PATH = $(HOME)
-MY_MIXTESIM_ROOT = /home/alegrand/simgrid3/examples/simdag/mixtesim
-CFLAGS = -I$(MY_MIXTESIM_ROOT)/include \
- -I$(SIMGRID_PATH)/include \
- -finline-functions -g -Wall -Werror
-CC = gcc
-LD = gcc
-
-LIBS = -lm
-
-SIMGRIDLIB = $(SIMGRID_PATH)/lib/libsimgrid.so
+++ /dev/null
-include ./Makedefs
-
-default: pre executable
-
-pre:
- rm -f ./make.log
- @echo "Make log for Mixtesim" > ./make.log
-
-executable:
- cd src; make all
-
-wc:
- wc -l `find . -name "*.[ch]"` | grep total
-
-clean:
- cd src; $(MAKE) clean
- /bin/rm -f ./bin/mixtesim
+++ /dev/null
-NODE_COUNT 32
-NODE 0 1 ROOT 0.0
-NODE 1 2,3,4,5,6,7 COMPUTATION 13512840
-NODE 2 8 TRANSFER 2250000
-NODE 3 9 TRANSFER 2250000
-NODE 4 10 TRANSFER 2250000
-NODE 5 11 TRANSFER 2250000
-NODE 6 12 TRANSFER 2250000
-NODE 7 13 TRANSFER 2250000
-NODE 8 14,15 COMPUTATION 17210020
-NODE 14 26 TRANSFER 1000000
-NODE 15 27 TRANSFER 1000000
-NODE 9 16,17 COMPUTATION 16452590
-NODE 16 26 TRANSFER 1562500
-NODE 17 27 TRANSFER 1562500
-NODE 10 18,19 COMPUTATION 45283690
-NODE 18 26 TRANSFER 2250000
-NODE 19 27 TRANSFER 2250000
-NODE 11 20,21 COMPUTATION 11806970
-NODE 20 26 TRANSFER 0562500
-NODE 21 27 TRANSFER 0562500
-NODE 12 22,23 COMPUTATION 14832260
-NODE 22 26 TRANSFER 2250000
-NODE 23 27 TRANSFER 2250000
-NODE 13 24,25 COMPUTATION 18832050
-NODE 24 26 TRANSFER 1062500
-NODE 25 27 TRANSFER 1062500
-NODE 26 28 COMPUTATION 33674670
-NODE 28 30 TRANSFER 0300000
-NODE 27 29 COMPUTATION 11186360
-NODE 29 30 TRANSFER 0250000
-NODE 30 31 COMPUTATION 10941360
-NODE 31 - END 0.0
-# DAG END
+++ /dev/null
-<?xml version='1.0'?>
-<!DOCTYPE platform_description SYSTEM "surfxml.dtd">
-<platform_description version="1">
- <cpu name="6host#6" power="1873913"/>
- <cpu name="11host#11" power="2255213"/>
- <cpu name="3host#3" power="1744072"/>
- <cpu name="7host#7" power="1873913"/>
- <cpu name="9host#9" power="2255213"/>
- <cpu name="2host#2" power="1744072"/>
- <cpu name="8host#8" power="2255213"/>
- <cpu name="1host#1" power="1744072"/>
- <cpu name="4host#4" power="1873913"/>
- <cpu name="0host#0" power="1744072"/>
- <cpu name="10host#10" power="2255213"/>
- <cpu name="5host#5" power="1873913"/>
- <network_link name="11" bandwidth="1000000" latency="0.000100"/>
- <network_link name="7" bandwidth="100000" latency="0.000100"/>
- <network_link name="17" bandwidth="1000000" latency="0.000100"/>
- <network_link name="2" bandwidth="1000000" latency="0.000100"/>
- <network_link name="1" bandwidth="1000000" latency="0.000100"/>
- <network_link name="18" bandwidth="2500000" latency="0.050000"/>
- <network_link name="0" bandwidth="1000000" latency="0.000100"/>
- <network_link name="16" bandwidth="1000000" latency="0.000100"/>
- <network_link name="13" bandwidth="100000" latency="0.000100" sharing_policy="FATPIPE" />
- <network_link name="6" bandwidth="100000" latency="0.000100"/>
- <network_link name="3" bandwidth="1000000" latency="0.000100"/>
- <network_link name="9" bandwidth="1000000" latency="0.000100"/>
- <network_link name="12" bandwidth="1000000" latency="0.000100" sharing_policy="FATPIPE" />
- <network_link name="14" bandwidth="1000000" latency="0.000100" sharing_policy="FATPIPE" />
- <network_link name="15" bandwidth="1000000" latency="0.000100"/>
- <network_link name="8" bandwidth="1000000" latency="0.000100"/>
- <network_link name="4" bandwidth="100000" latency="0.000100"/>
- <network_link name="10" bandwidth="1000000" latency="0.000100"/>
- <network_link name="5" bandwidth="100000" latency="0.000100"/>
- <route src="6host#6" dst="11host#11"><route_element name="6"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="11"/> </route>
- <route src="6host#6" dst="3host#3"><route_element name="6"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="3"/> </route>
- <route src="6host#6" dst="7host#7"><route_element name="6"/><route_element name="13"/><route_element name="7"/> </route>
- <route src="6host#6" dst="9host#9"><route_element name="6"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="9"/> </route>
- <route src="6host#6" dst="2host#2"><route_element name="6"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="2"/> </route>
- <route src="6host#6" dst="8host#8"><route_element name="6"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="8"/> </route>
- <route src="6host#6" dst="1host#1"><route_element name="6"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="1"/> </route>
- <route src="6host#6" dst="4host#4"><route_element name="6"/><route_element name="13"/><route_element name="4"/> </route>
- <route src="6host#6" dst="0host#0"><route_element name="6"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="0"/> </route>
- <route src="6host#6" dst="10host#10"><route_element name="6"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="10"/> </route>
- <route src="6host#6" dst="5host#5"><route_element name="6"/><route_element name="13"/><route_element name="5"/> </route>
- <route src="11host#11" dst="6host#6"><route_element name="11"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="6"/> </route>
- <route src="11host#11" dst="3host#3"><route_element name="11"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="3"/> </route>
- <route src="11host#11" dst="7host#7"><route_element name="11"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="7"/> </route>
- <route src="11host#11" dst="9host#9"><route_element name="11"/><route_element name="14"/><route_element name="9"/> </route>
- <route src="11host#11" dst="2host#2"><route_element name="11"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="2"/> </route>
- <route src="11host#11" dst="8host#8"><route_element name="11"/><route_element name="14"/><route_element name="8"/> </route>
- <route src="11host#11" dst="1host#1"><route_element name="11"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="1"/> </route>
- <route src="11host#11" dst="4host#4"><route_element name="11"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="4"/> </route>
- <route src="11host#11" dst="0host#0"><route_element name="11"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="0"/> </route>
- <route src="11host#11" dst="10host#10"><route_element name="11"/><route_element name="14"/><route_element name="10"/> </route>
- <route src="11host#11" dst="5host#5"><route_element name="11"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="5"/> </route>
- <route src="3host#3" dst="6host#6"><route_element name="3"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="6"/> </route>
- <route src="3host#3" dst="11host#11"><route_element name="3"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="11"/> </route>
- <route src="3host#3" dst="7host#7"><route_element name="3"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="7"/> </route>
- <route src="3host#3" dst="9host#9"><route_element name="3"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="9"/> </route>
- <route src="3host#3" dst="2host#2"><route_element name="3"/><route_element name="12"/><route_element name="2"/> </route>
- <route src="3host#3" dst="8host#8"><route_element name="3"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="8"/> </route>
- <route src="3host#3" dst="1host#1"><route_element name="3"/><route_element name="12"/><route_element name="1"/> </route>
- <route src="3host#3" dst="4host#4"><route_element name="3"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="4"/> </route>
- <route src="3host#3" dst="0host#0"><route_element name="3"/><route_element name="12"/><route_element name="0"/> </route>
- <route src="3host#3" dst="10host#10"><route_element name="3"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="10"/> </route>
- <route src="3host#3" dst="5host#5"><route_element name="3"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="5"/> </route>
- <route src="7host#7" dst="6host#6"><route_element name="7"/><route_element name="13"/><route_element name="6"/> </route>
- <route src="7host#7" dst="11host#11"><route_element name="7"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="11"/> </route>
- <route src="7host#7" dst="3host#3"><route_element name="7"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="3"/> </route>
- <route src="7host#7" dst="9host#9"><route_element name="7"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="9"/> </route>
- <route src="7host#7" dst="2host#2"><route_element name="7"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="2"/> </route>
- <route src="7host#7" dst="8host#8"><route_element name="7"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="8"/> </route>
- <route src="7host#7" dst="1host#1"><route_element name="7"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="1"/> </route>
- <route src="7host#7" dst="4host#4"><route_element name="7"/><route_element name="13"/><route_element name="4"/> </route>
- <route src="7host#7" dst="0host#0"><route_element name="7"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="0"/> </route>
- <route src="7host#7" dst="10host#10"><route_element name="7"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="10"/> </route>
- <route src="7host#7" dst="5host#5"><route_element name="7"/><route_element name="13"/><route_element name="5"/> </route>
- <route src="9host#9" dst="6host#6"><route_element name="9"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="6"/> </route>
- <route src="9host#9" dst="11host#11"><route_element name="9"/><route_element name="14"/><route_element name="11"/> </route>
- <route src="9host#9" dst="3host#3"><route_element name="9"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="3"/> </route>
- <route src="9host#9" dst="7host#7"><route_element name="9"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="7"/> </route>
- <route src="9host#9" dst="2host#2"><route_element name="9"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="2"/> </route>
- <route src="9host#9" dst="8host#8"><route_element name="9"/><route_element name="14"/><route_element name="8"/> </route>
- <route src="9host#9" dst="1host#1"><route_element name="9"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="1"/> </route>
- <route src="9host#9" dst="4host#4"><route_element name="9"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="4"/> </route>
- <route src="9host#9" dst="0host#0"><route_element name="9"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="0"/> </route>
- <route src="9host#9" dst="10host#10"><route_element name="9"/><route_element name="14"/><route_element name="10"/> </route>
- <route src="9host#9" dst="5host#5"><route_element name="9"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="5"/> </route>
- <route src="2host#2" dst="6host#6"><route_element name="2"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="6"/> </route>
- <route src="2host#2" dst="11host#11"><route_element name="2"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="11"/> </route>
- <route src="2host#2" dst="3host#3"><route_element name="2"/><route_element name="12"/><route_element name="3"/> </route>
- <route src="2host#2" dst="7host#7"><route_element name="2"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="7"/> </route>
- <route src="2host#2" dst="9host#9"><route_element name="2"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="9"/> </route>
- <route src="2host#2" dst="8host#8"><route_element name="2"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="8"/> </route>
- <route src="2host#2" dst="1host#1"><route_element name="2"/><route_element name="12"/><route_element name="1"/> </route>
- <route src="2host#2" dst="4host#4"><route_element name="2"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="4"/> </route>
- <route src="2host#2" dst="0host#0"><route_element name="2"/><route_element name="12"/><route_element name="0"/> </route>
- <route src="2host#2" dst="10host#10"><route_element name="2"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="10"/> </route>
- <route src="2host#2" dst="5host#5"><route_element name="2"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="5"/> </route>
- <route src="8host#8" dst="6host#6"><route_element name="8"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="6"/> </route>
- <route src="8host#8" dst="11host#11"><route_element name="8"/><route_element name="14"/><route_element name="11"/> </route>
- <route src="8host#8" dst="3host#3"><route_element name="8"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="3"/> </route>
- <route src="8host#8" dst="7host#7"><route_element name="8"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="7"/> </route>
- <route src="8host#8" dst="9host#9"><route_element name="8"/><route_element name="14"/><route_element name="9"/> </route>
- <route src="8host#8" dst="2host#2"><route_element name="8"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="2"/> </route>
- <route src="8host#8" dst="1host#1"><route_element name="8"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="1"/> </route>
- <route src="8host#8" dst="4host#4"><route_element name="8"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="4"/> </route>
- <route src="8host#8" dst="0host#0"><route_element name="8"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="0"/> </route>
- <route src="8host#8" dst="10host#10"><route_element name="8"/><route_element name="14"/><route_element name="10"/> </route>
- <route src="8host#8" dst="5host#5"><route_element name="8"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="5"/> </route>
- <route src="1host#1" dst="6host#6"><route_element name="1"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="6"/> </route>
- <route src="1host#1" dst="11host#11"><route_element name="1"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="11"/> </route>
- <route src="1host#1" dst="3host#3"><route_element name="1"/><route_element name="12"/><route_element name="3"/> </route>
- <route src="1host#1" dst="7host#7"><route_element name="1"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="7"/> </route>
- <route src="1host#1" dst="9host#9"><route_element name="1"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="9"/> </route>
- <route src="1host#1" dst="2host#2"><route_element name="1"/><route_element name="12"/><route_element name="2"/> </route>
- <route src="1host#1" dst="8host#8"><route_element name="1"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="8"/> </route>
- <route src="1host#1" dst="4host#4"><route_element name="1"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="4"/> </route>
- <route src="1host#1" dst="0host#0"><route_element name="1"/><route_element name="12"/><route_element name="0"/> </route>
- <route src="1host#1" dst="10host#10"><route_element name="1"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="10"/> </route>
- <route src="1host#1" dst="5host#5"><route_element name="1"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="5"/> </route>
- <route src="4host#4" dst="6host#6"><route_element name="4"/><route_element name="13"/><route_element name="6"/> </route>
- <route src="4host#4" dst="11host#11"><route_element name="4"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="11"/> </route>
- <route src="4host#4" dst="3host#3"><route_element name="4"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="3"/> </route>
- <route src="4host#4" dst="7host#7"><route_element name="4"/><route_element name="13"/><route_element name="7"/> </route>
- <route src="4host#4" dst="9host#9"><route_element name="4"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="9"/> </route>
- <route src="4host#4" dst="2host#2"><route_element name="4"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="2"/> </route>
- <route src="4host#4" dst="8host#8"><route_element name="4"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="8"/> </route>
- <route src="4host#4" dst="1host#1"><route_element name="4"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="1"/> </route>
- <route src="4host#4" dst="0host#0"><route_element name="4"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="0"/> </route>
- <route src="4host#4" dst="10host#10"><route_element name="4"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="10"/> </route>
- <route src="4host#4" dst="5host#5"><route_element name="4"/><route_element name="13"/><route_element name="5"/> </route>
- <route src="0host#0" dst="6host#6"><route_element name="0"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="6"/> </route>
- <route src="0host#0" dst="11host#11"><route_element name="0"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="11"/> </route>
- <route src="0host#0" dst="3host#3"><route_element name="0"/><route_element name="12"/><route_element name="3"/> </route>
- <route src="0host#0" dst="7host#7"><route_element name="0"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="7"/> </route>
- <route src="0host#0" dst="9host#9"><route_element name="0"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="9"/> </route>
- <route src="0host#0" dst="2host#2"><route_element name="0"/><route_element name="12"/><route_element name="2"/> </route>
- <route src="0host#0" dst="8host#8"><route_element name="0"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="8"/> </route>
- <route src="0host#0" dst="1host#1"><route_element name="0"/><route_element name="12"/><route_element name="1"/> </route>
- <route src="0host#0" dst="4host#4"><route_element name="0"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="4"/> </route>
- <route src="0host#0" dst="10host#10"><route_element name="0"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="10"/> </route>
- <route src="0host#0" dst="5host#5"><route_element name="0"/><route_element name="12"/><route_element name="15"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="5"/> </route>
- <route src="10host#10" dst="6host#6"><route_element name="10"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="6"/> </route>
- <route src="10host#10" dst="11host#11"><route_element name="10"/><route_element name="14"/><route_element name="11"/> </route>
- <route src="10host#10" dst="3host#3"><route_element name="10"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="3"/> </route>
- <route src="10host#10" dst="7host#7"><route_element name="10"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="7"/> </route>
- <route src="10host#10" dst="9host#9"><route_element name="10"/><route_element name="14"/><route_element name="9"/> </route>
- <route src="10host#10" dst="2host#2"><route_element name="10"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="2"/> </route>
- <route src="10host#10" dst="8host#8"><route_element name="10"/><route_element name="14"/><route_element name="8"/> </route>
- <route src="10host#10" dst="1host#1"><route_element name="10"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="1"/> </route>
- <route src="10host#10" dst="4host#4"><route_element name="10"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="4"/> </route>
- <route src="10host#10" dst="0host#0"><route_element name="10"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="0"/> </route>
- <route src="10host#10" dst="5host#5"><route_element name="10"/><route_element name="14"/><route_element name="17"/><route_element name="18"/><route_element name="16"/><route_element name="13"/><route_element name="5"/> </route>
- <route src="5host#5" dst="6host#6"><route_element name="5"/><route_element name="13"/><route_element name="6"/> </route>
- <route src="5host#5" dst="11host#11"><route_element name="5"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="11"/> </route>
- <route src="5host#5" dst="3host#3"><route_element name="5"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="3"/> </route>
- <route src="5host#5" dst="7host#7"><route_element name="5"/><route_element name="13"/><route_element name="7"/> </route>
- <route src="5host#5" dst="9host#9"><route_element name="5"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="9"/> </route>
- <route src="5host#5" dst="2host#2"><route_element name="5"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="2"/> </route>
- <route src="5host#5" dst="8host#8"><route_element name="5"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="8"/> </route>
- <route src="5host#5" dst="1host#1"><route_element name="5"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="1"/> </route>
- <route src="5host#5" dst="4host#4"><route_element name="5"/><route_element name="13"/><route_element name="4"/> </route>
- <route src="5host#5" dst="0host#0"><route_element name="5"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="15"/><route_element name="12"/><route_element name="0"/> </route>
- <route src="5host#5" dst="10host#10"><route_element name="5"/><route_element name="13"/><route_element name="16"/><route_element name="18"/><route_element name="17"/><route_element name="14"/><route_element name="10"/> </route>
-</platform_description>
+++ /dev/null
-#ifndef LIST_SCHEDULING_H
-#define LIST_SCHEDULING_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-void allocateNodeAttributes(DAG dag);
-void freeNodeAttributes(DAG dag);
-void allocateHostAttributes();
-void freeHostAttributes();
-void implementSimgridSchedule(DAG dag, Node *list);
-
-/* Link local_link; */
-
-#define LIST_SCHEDULING_NOT_SCHEDULED 0
-#define LIST_SCHEDULING_READY 1
-#define LIST_SCHEDULING_SCHEDULED 2
-#define LIST_SCHEDULING_RUNNING 3
-
-
-
-/**************/
-/* Attributes */
-/**************/
-
-typedef struct _NodeAttribute *NodeAttribute;
-typedef struct _HostAttribute *HostAttribute;
-
-struct _NodeAttribute {
- SD_workstation_t host; /* The host on which the node has been scheduled */
- SD_link_t link; /* The link on which the transfer is running */
- double start; /* time the task is supposed to start */
- double finish; /* time the task is supposed to finish */
- int state; /* scheduled, not scheduled, ready */
- double SL;
- int tag;
-
- double mean_cost; /* used by heft */
- double rank_u; /* used by heft */
-
- double data_available;
-};
-
-struct _HostAttribute {
- double first_available;
- int nb_nodes;
- int *nodes;
- int state;
-};
-
-#define NODE_ATTR(x) ((NodeAttribute)(x->metadata))
-#define HOST_ATTR(x) ((HostAttribute)(SD_workstation_get_data(x)))
-
-#endif
+++ /dev/null
-#ifndef MIXTESIM_DATASTRUCTURES_H
-#define MIXTESIM_DATASTRUCTURES_H
-
-#include "simdag/simdag.h"
-#include "mixtesim_types.h"
-
-/* NODE structure */
-struct _Node {
- /* nodes that must complete before this node can start */
- int nb_parents;
- Node *parents; /* array of size nb_parents */
-
- /* nodes that cannot start until this node has completed */
- int nb_children;
- Node *children; /* array of size nb_children */
-
- /* index of this node in the DAG->nodes array */
- int global_index;
-
- node_t type; /* node type: TRANSFER or COMMUNICATION */
-
- double cost; /* cost of the computation */
- /* or file transfer on a resource */
-
- /* Pointer to the SIMGRID Task that will
- * be used for the simulation. The abstract task should
- * be created upon creation of this node, and will be
- * de-allocated when SG_shutdown() is called
- */
- SD_task_t sd_task;
-
- void *metadata; /* For use by the scheduling algorithms */
-};
-
-Node newNode(); /* Allocates memory for a node */
-void freeNode(); /* Free memory for a node */
-void printNode(DAG dag, Node node); /* print node info */
-
-/* DAG structure */
-struct _DAG {
- Node root; /* first node */
- Node end; /* last node */
-
- /* Array of nodes, for direct access */
- int nb_nodes;
- Node *nodes; /* array of size nb_nodes */
-};
-
-DAG parseDAGFile(char *filename); /* Construct a DAG from a */
- /* DAG description file */
-DAG newDAG(); /* allocate memory for a DAG, called by parseDAGFile() */
-void freeDAG(DAG dag); /* free memory for a DAG */
-void printDAG(DAG dag); /* prints DAG info */
-
-/* /\* HOST structure *\/ */
-/* struct _Host { */
-/* /\* index in the Grid->hosts array *\/ */
-/* int global_index; */
-
-/* /\* in which cluster this host is *\/ */
-/* int cluster; */
-
-/* /\* relative speed of the host *\/ */
-/* double rel_speed; */
-/* /\* Pointer to the SIMGRID Resource that will be used */
-/* * for the simulation. The resource should be created upon */
-/* * creation of this host, and will be de-allocated when */
-/* * SG_shutdown() is called */
-/* *\/ */
-/* /\* char *cpu_trace;*\/ */
-
-/* void *metadata; */
-
-/* /\* SG_resourcesharing_t mode;*\/ */
-
-/* SD_workstation_t sd_host; */
-/* }; */
-
-/* Host newHost(); /\* Allocate memory for a host *\/ */
-/* void freeHost(Host h); /\* free memory for a host *\/ */
-
-
-/* /\* LINK structure *\/ */
-/* struct _Link { */
-/* /\* index of this link in the Grid->links array *\/ */
-/* int global_index; */
-/* /\* Pointer to the SIMGRID Resource that will be used */
-/* * for the simulation. The resource shouild be created upon */
-/* * creation of this host, and will be de-allocated when */
-/* * SG_shutdown() is called */
-/* *\/ */
-/* /\* char *latency_trace; */
-/* char *bandwidth_trace;*\/ */
-
-/* /\* SG_resourcesharing_t mode;*\/ */
-
-/* SD_link_t sd_link; */
-/* }; */
-
-/* Link newLink(); /\* Allocate memory for a link *\/ */
-/* void freeLink(Link l); /\* free memory for a link *\/ */
-
-/* GRID structure */
-/* struct _Grid { */
-/* int nb_hosts; /\* Number of hosts in the Grid *\/ */
-/* Host *hosts; /\* array of size nb_hosts *\/ */
-/* int nb_links; /\* Number of links in the Grid *\/ */
-/* Link *links; /\* array of size nb_links *\/ */
-
-/* /\* connection matrix. connections[i][j] is a pointer */
-/* * to the network link that connects hosts of */
-/* * global_index i and j, that is grid->hosts[i] */
-/* * and grid->hosts[j]. This matrix is likely to */
-/* * be symetric since we probably assume that links */
-/* * behave the same way in both directions. Note that */
-/* * simulating non-bi-directional performance characteristics */
-/* * would not be trivial as two separate links would not */
-/* * model any contention between traffic going both ways */
-/* *\/ */
-/* /\* SG_Resource **routes;*\/ */
-/* /\* SD_link_t **connections;*\/ */
-/* }; */
-
-/* Grid parseGridFile(char *filename); /\* Creates a Grid from a *\/ */
-/* /\* Grid description file *\/ */
-/* Grid newGrid(); /\* Allocates memory for a Grid *\/ */
-/* void freeGrid(); /\* frees memory of a Grid. free Hosts and Links *\/ */
-/* void printGrid(Grid grid); /\* print Grid info *\/ */
-
-
-#endif /* MIXTESIM_DATA_STRUCTURES */
+++ /dev/null
-#ifndef MIXTESIM_PROTOTYPES_H
-#define MIXTESIM_PROTOTYPES_H
-
-#include "mixtesim_types.h"
-#include "mixtesim_datastructures.h"
-
-#ifndef MAX
-# define MAX(x,y) ((x) > (y) ? (x) : (y))
-#endif
-#ifndef MIN
-# define MIN(x,y) ((x) > (y) ? (x) : (y))
-#endif
-
-
-int HEFT(DAG dag);
-
-/* parsing */
-/*Grid parseGridFile(char*filename);*/
-DAG parseDAGFile(char*filename);
-
-int createSimgridObjects();
-
-#endif /* MIXTESIM_PROTOTYPES_H */
+++ /dev/null
-#ifndef MIXTESIM_TYPES_H
-#define MIXTESIM_TYPES_H
-
-typedef struct _DAG *DAG;
-typedef struct _Node *Node;
-
-typedef enum {
- NODE_COMPUTATION=0,
- NODE_TRANSFER,
- NODE_ROOT,
- NODE_END
-} node_t;
-
-#endif /* MIXTESIM_TYPES_H */
+++ /dev/null
-include ../Makedefs
-
-default: all
-
-MIXTESIM = ../bin/mixtesim
-
-MIXTESIM_OBJECTS = ./heft.o\
- ./main.o \
- ./dag.o \
- ./list_scheduling_util.o
-
-all: $(MIXTESIM)
-
-$(MIXTESIM): $(MIXTESIM_OBJECTS)
- $(LD) $(MIXTESIM_OBJECTS) -o $(MIXTESIM) $(SIMGRIDLIB) \
- $(APPLESEEDSLIB) -lm
-
-clean:
- /bin/rm -f *.o *~
+++ /dev/null
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "mixtesim_prototypes.h"
-
-/** **
- ** STRUCTURE **
- ** **/
-
-/*
- * newDAG()
- */
-DAG newDAG()
-{
- return (DAG)calloc(1,sizeof(struct _DAG));
-}
-
-/*
- * freeDAG()
- */
-void freeDAG(DAG dag)
-{
- int i;
-
- for (i=0;i<dag->nb_nodes;i++) {
- freeNode(dag->nodes[i]);
- }
- if (dag->nodes)
- free(dag->nodes);
- free(dag);
- return;
-}
-
-/*
- * newNode()
- */
-Node newNode()
-{
- return (Node)calloc(1,sizeof(struct _Node));
-}
-
-/*
- * freeNode()
- */
-void freeNode(Node n)
-{
- if (n->parents)
- free(n->parents);
- if (n->children)
- free(n->children);
- free(n);
- return;
-}
-
-/*
- * printDAG()
- */
-void printDAG(DAG dag)
-{
- fprintf(stderr,"%d nodes: # (children) [parents]\n",dag->nb_nodes);
- printNode(dag,dag->root);
-}
-
-/*
- * printNode()
- */
-void printNode(DAG dag, Node node)
-{
- int i;
- fprintf(stderr,"%d (",node->global_index);
-
- /* print children info */
- for (i=0;i<node->nb_children-1;i++) {
- fprintf(stderr,"%d,",node->children[i]->global_index);
- }
- if (node->nb_children> 0)
- fprintf(stderr,"%d",node->children[node->nb_children-1]->global_index);
- fprintf(stderr,") ");
-
- /* print parent info */
- fprintf(stderr,"[");
- for (i=0;i<node->nb_parents-1;i++) {
- fprintf(stderr,"%d,",node->parents[i]->global_index);
- }
- if (node->nb_parents > 0)
- fprintf(stderr,"%d",node->parents[node->nb_parents-1]->global_index);
- fprintf(stderr,"] ");
-
- /* print special inf */
- if (dag->root == node) {
- fprintf(stderr,"ROOT\n");
- } else if (dag->end == node) {
- fprintf(stderr,"END\n");
- } else {
- fprintf(stderr,"\n");
- }
-
- for (i=0;i<node->nb_children;i++) {
- printNode(dag, node->children[i]);
- }
- return;
-}
-
-/** **
- ** PARSING **
- ** **/
-
-static int parseLine(DAG,char*);
-static int parseNodeLine(DAG,char*);
-static int parseNodeCountLine(DAG,char*);
-static node_t string2NodeType(const char*);
-static int string2NodeList(const char*,int**,int*);
-static int finalizeDAG(DAG);
-
-/* temporary array in which children lists are stored. Once all nodes
- * have been parsed, one can go through these lists and assign actual
- * Node pointers to real children lists
- */
-char **tmp_childrens;
-
-/*
- * parseDAGFile()
- */
-DAG parseDAGFile(char *filename)
-{
- FILE *f;
- char line[4024];
- int i,count=0;
- char *tmp;
- DAG new;
-
- /* initialize the global children list array */
- tmp_childrens=NULL;
-
- /* opening the DAG description file */
- if (!(f=fopen(filename,"r"))) {
- fprintf(stderr,"Impossible to open file '%s'\n",filename);
- return NULL;
- }
-
- /* allocate memory for the DAG */
- new = newDAG();
-
- /* Go through the lines of the file */
- while(fgets(line,4024,f)) {
- count++;
- if (line[0]=='#') /* comment lines */
- continue;
- if (line[0]=='\n') /* empty lines */
- continue;
- tmp=strdup(line); /* somehow, strduping makes it work ? */
- if (parseLine(new,tmp) == -1) {
- fprintf(stderr,"Error in DAG description file at line %d\n",count);
- fclose(f);
- return NULL;
- }
- free(tmp);
- }
- fclose(f);
-
- /* fill in child lists, parent lists, and perform a few
- * reality checks
- */
- if (finalizeDAG(new) == -1) {
- freeDAG(new);
- return NULL;
- }
-
- /* free the temporary global child list array */
- for (i=0;i<new->nb_nodes;i++) {
- if (tmp_childrens[i])
- free(tmp_childrens[i]);
- }
- free(tmp_childrens);
-
- return new;
-}
-
-/*
- * finalizeDAG(): fills in the child lists with actual pointers,
- * creates the parent lists, checks some things about the Root
- * and the End node.
- */
-static int finalizeDAG(DAG dag)
-{
- int i,j;
- int *childrenlist,nb_children;
-
- /* Set the children pointers */
- for (i=0;i<dag->nb_nodes;i++) {
- Node node=dag->nodes[i];
-
- /* convert the textual list to an integer list */
- if (string2NodeList(tmp_childrens[i],&childrenlist,&nb_children) == -1) {
- fprintf(stderr,"Error: invalid child list '%s'\n",
- tmp_childrens[i]);
- return -1;
- }
- /* set the number of children */
- node->nb_children=nb_children;
-
- /* create the child list with pointers to nodes */
- if (nb_children) {
- node->children=(Node*)calloc(nb_children,sizeof(Node));
- for (j=0;j<nb_children;j++) {
- node->children[j]=dag->nodes[childrenlist[j]];
- }
- free(childrenlist);
- }
- }
-
- /* Set the parent pointers */
- for (i=0;i<dag->nb_nodes;i++) {
- for (j=0;j<dag->nodes[i]->nb_children;j++) {
- Node node=dag->nodes[i]->children[j];
- node->parents=(Node*)realloc(node->parents,
- (node->nb_parents+1)*sizeof(Node));
- node->parents[node->nb_parents]=dag->nodes[i];
- (node->nb_parents)++;
- }
- }
-
- /* A few sanity checks */
- if (!(dag->root) || !(dag->end)) {
- fprintf(stderr,"Error: Graph has missing end points\n");
- return -1;
- }
-
- if (dag->root->nb_parents != 0) {
- fprintf(stderr,"Error: The Root should have no parents\n");
- return -1;
- }
- if (dag->end->nb_children != 0) {
- fprintf(stderr,"Error: The End should have no children\n");
- return -1;
- }
- return 0;
-}
-
-/*
- * parseLine()
- */
-static int parseLine(DAG dag, char *line)
-{
- char *ptr;
-
- /* If the line does not start with a keyword, then bail */
- ptr=strchr(line,' ');
- if (ptr==NULL) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- } else{
- *ptr='\0';
- }
-
- /* deal with the two possible keywords */
- if (!strncmp(line,"NODE_COUNT",strlen("NODE_COUNT")))
- return parseNodeCountLine(dag,ptr+1);
- if (!strncmp(line,"NODE",strlen("NODE")))
- return parseNodeLine(dag,ptr+1);
-
- fprintf(stderr,"Unknown keyword %s\n",line);
- return -1;
-}
-
-/*
- * parseNodeCountLine()
- *
- * NODE_COUNT <number>
- */
-int parseNodeCountLine(DAG dag, char *line)
-{
- int count;
-
- /* more than one NODE_COUNT statements ? */
- if (dag->nb_nodes != 0) {
- fprintf(stderr,"Error: Only one Node Count specification allowed\n");
- return -1;
- }
-
- /* get the count and checks that it's >0 */
- count=atoi(line);
- if (count == 0) {
- fprintf(stderr,"Error: invalid Node count\n");
- return -1;
- }
-
- /* allocate the node array within the dag */
- dag->nb_nodes=count;
- dag->nodes=(Node *)calloc(dag->nb_nodes,sizeof(Node));
- /* allocate space in the temporary gobal childlist array */
- tmp_childrens=(char **)calloc(dag->nb_nodes,sizeof(char*));
- return 0;
-}
-
-/*
- * parseNodeLine()
- *
- * NODE <index> <childlist> <type> <cost>
- */
-int parseNodeLine(DAG dag, char *line)
-{
- char *ptr;
- Node node;
-
- char *s_index,*s_childlist,*s_type,*s_cost;
- int index;
- node_t type;
- double cost;
-
- /* NODE_COUNT should be called before NODE */
- if (dag->nb_nodes == 0) {
- fprintf(stderr,"Error: Node Count must be specified before Nodes\n");
- return -1;
- }
-
- /* Get index */
- ptr=strchr(line,' ');
- if (!ptr) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- }
- s_index=line;
- *ptr='\0';
- line=ptr+1;
-
-
- /* Get childlist */
- ptr=strchr(line,' ');
- if (!ptr) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- }
- s_childlist=line;
- *ptr='\0';
- line=ptr+1;
-
- /* get node type */
- ptr=strchr(line,' ');
- if (!ptr) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- }
- s_type=line;
- *ptr='\0';
- line=ptr+1;
-
- /* get cost */
- ptr=strchr(line,'\n');
- if (!ptr) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- }
- s_cost=line;
- *ptr='\0';
-
- /* Process strings, but store childlist for later */
- index=atoi(s_index);
- if ((type=string2NodeType(s_type)) ==-1)
- return -1;
- cost=atof(s_cost);
- tmp_childrens[index]=strdup(s_childlist);
-
- /* Creating the node */
- node = newNode();
- node->global_index = index;
- node->cost=cost;
- node->type=type;
-
- /* Is this the root ? */
- if (node->type == NODE_ROOT) {
- if (dag->root) {
- fprintf(stderr,"Error: only one Root node allowed\n");
- return -1;
- } else {
- dag->root = node;
-
- }
- }
- /* Is this the end ? */
- if (node->type == NODE_END) {
- if (dag->end) {
- fprintf(stderr,"Error: only one End node allowed\n");
- return -1;
- } else {
- dag->end = node;
- }
- }
-
- /* Is the node beyond the total number of nodes ? */
- if (node->global_index >= dag->nb_nodes) {
- fprintf(stderr,"Error: More nodes than the node count\n");
- return -1;
- }
-
- /* Have we seen that node before ? */
- if (dag->nodes[node->global_index] != NULL) {
- fprintf(stderr,"Error: Two nodes share index %d\n",
- node->global_index);
- return -1;
- }
- /* add the node to the global array */
- dag->nodes[node->global_index]=node;
- return 1;
-}
-
-/*
- * string2NodeList()
- * parser x,y,z and returns {x,y,z} and 3
- * Does not really do good error checking
- */
-static int string2NodeList(const char *string, int **list, int *nb_nodes)
-{
- char *start,*ptr;
- int count=0;
-
- *list=NULL;
-
- /* no children "-" */
- if (!strcmp(string,"-")) {
- *nb_nodes=0;
- *list=NULL;
- return 0;
- }
-
- /* Get all indexes in the list */
- start = (char*)string;
- while((ptr = strchr(start,','))) {
- *ptr='\0';
- *list=(int*)realloc(*list,(count+1)*sizeof(int));
- (*list)[count]=atoi(start);
- count++;
- start = ptr+1;
- }
- *list=(int*)realloc(*list,(count+1)*sizeof(int));
- (*list)[count]=atoi(start);
- count++;
-
- *nb_nodes=count;
- return 0;
-}
-
-/*
- * string2NodeType()
- */
-static node_t string2NodeType(const char *string) {
- if (!strcmp(string,"ROOT")) {
- return NODE_ROOT;
- } else if (!strcmp(string,"END")) {
- return NODE_END;
- } else if (!strcmp(string,"COMPUTATION")) {
- return NODE_COMPUTATION;
- } else if (!strcmp(string,"TRANSFER")) {
- return NODE_TRANSFER;
- }
- fprintf(stderr,"Error: Unknown Node Type '%s'\n",string);
- return -1;
-}
-
+++ /dev/null
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "simgrid.h"
-
-#include "mixtesim_prototypes.h"
-
-/** **
- ** STRUCTURE **
- ** **/
-
-/*
- * newHost()
- */
-Host newHost()
-{
- return (Host)calloc(1,sizeof(struct _Host));
-}
-
-/*
- * freeHost()
- */
-void freeHost(Host h)
-{
- if (h->cpu_trace)
- free(h->cpu_trace);
- free(h);
- return;
-}
-
-/*
- * newLink()
- */
-Link newLink()
-{
- return (Link)calloc(1,sizeof(struct _Link));
-}
-
-/*
- * freeLink()
- */
-void freeLink(Link l)
-{
- if (l->latency_trace)
- free(l->latency_trace);
- if (l->bandwidth_trace)
- free(l->bandwidth_trace);
- free(l);
- return;
-}
-
-/*
- * newGrid()
- */
-Grid newGrid()
-{
- return (Grid)calloc(1,sizeof(struct _Grid));
-}
-
-/*
- * freeGrid()
- */
-void freeGrid(Grid g)
-{
- int i;
- for (i=0;i<g->nb_hosts;i++)
- freeHost(g->hosts[i]);
- if (g->hosts)
- free(g->hosts);
- for (i=0;i<g->nb_links;i++)
- freeLink(g->links[i]);
- if (g->links)
- free(g->links);
- if (g->connections) {
- for (i=0;i<g->nb_hosts;i++) {
- if (g->connections[i]) {
- free(g->connections[i]);
- }
- }
- free(g->connections);
- }
- free(g);
- return;
-}
-
-
-/** **
- ** PARSING **
- ** **/
-
-static int createConnectionMatrix(Grid grid);
-static int parseLine(Grid,char*);
-static int parseLinkCountLine(Grid,char*);
-static int parseHostCountLine(Grid,char*);
-static int parseLinkLine(Grid,char*);
-static int parseHostLine(Grid,char*);
-
-/*
- * parseGridFile()
- */
-Grid parseGridFile(char *filename)
-{
- Grid new;
- int i;
-
- new = newGrid();
-
- new->nb_host = SD_workstation_get_number();
-
-
- new->nb_link = SD_link_get_number();
-
- FILE *f;
- char line[4084];
- int count=0;
- char *tmp;
-
- Grid new;
-
- /* open Grid description file */
- if (!(f=fopen(filename,"r"))) {
- fprintf(stderr,"Impossible to open file '%s'\n",filename);
- return NULL;
- }
-
- /* Allocate memory for the Grid */
- new=newGrid();
-
- /* go through the lines in the files */
- while(fgets(line,4084,f)) {
- count++;
- if (line[0]=='#') /* comment line */
- continue;
- if (line[0]=='\n') /* empty line */
- continue;
- tmp=strdup(line); /* strdupoing seesm to make it work */
- if (parseLine(new,tmp) == -1) {
- fprintf(stderr,"Error in Grid description file at line %d\n",count);
- fclose(f);
- return NULL;
- }
- free(tmp);
- }
- fclose(f);
-
- /* Create the connection matrix */
- createConnectionMatrix(new);
-
- return new;
-}
-
-/*
- * parseLine()
- */
-static int parseLine(Grid grid, char *line)
-{
- char *ptr;
- /* does the line start with a keyword ? */
- ptr=strchr(line,' ');
- if (ptr==NULL) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- } else{
- *ptr='\0';
- }
- /* process the different key words */
- if (!strncmp(line,"LINK_COUNT",strlen("LINK_COUNT")))
- return parseLinkCountLine(grid,ptr+1);
- if (!strncmp(line,"LINK",strlen("LINK")))
- return parseLinkLine(grid,ptr+1);
- if (!strncmp(line,"HOST_COUNT",strlen("HOST_COUNT")))
- return parseHostCountLine(grid,ptr+1);
- if (!strncmp(line,"HOST",strlen("HOST")))
- return parseHostLine(grid,ptr+1);
-
- fprintf(stderr,"Unknown keyword %s\n",line);
- return -1;
-}
-
-/*
- * parseHostCountLine()
- *
- * HOST_COUNT <number>
- */
-int parseHostCountLine(Grid grid, char *line)
-{
- int i,count;
-
- /* HOST_COUNT should be called only once */
- if (grid->nb_hosts != 0) {
- fprintf(stderr,"Error: Only one Host Count specification allowed\n");
- return -1;
- }
-
- /* get the count */
- count=atoi(line);
- /* check that count >0 */
- if (count == 0) {
- fprintf(stderr,"Error: invalid Host count\n");
- return -1;
- }
- /* allocate the grid->hosts array */
- grid->nb_hosts=count;
- grid->hosts=(Host *)calloc(grid->nb_hosts,sizeof(Host));
-
- /* allocate the connection matrix */
- grid->connections=(Link ***)calloc(grid->nb_hosts,sizeof(Link**));
- for (i=0;i<grid->nb_hosts;i++) {
- grid->connections[i]=(Link **)calloc(grid->nb_hosts,sizeof(Link*));
- }
- return 0;
-}
-
-/*
- * parseLinkCountLine()
- *
- * LINK_COUNT <number>
- */
-int parseLinkCountLine(Grid grid, char *line)
-{
- int count;
-
- /* LINK_COUNT should be called only once */
- if (grid->nb_links != 0) {
- fprintf(stderr,"Error: Only one Link Count specification allowed\n");
- return -1;
- }
-
- /* get the count */
- count=atoi(line);
- if (count == 0) {
- fprintf(stderr,"Error: invalid Link count\n");
- return -1;
- }
- /* allocate the grid->links array */
- grid->nb_links=count;
- grid->links=(Link *)calloc(grid->nb_links,sizeof(Link));
-
- return 0;
-}
-
-/*
- * parseHostLine()
- *
- * HOST <index> <rel_speed> <cpu_file>
- */
-int parseHostLine(Grid grid, char *line)
-{
- char *ptr;
- Host host;
- char *s_indexlist,*s_cpu_file,*s_rel_speed,*s_mode;
- int *hostIndexList=NULL;
- int nb_hostOnLine, i, min,max;
- double rel_speed;
-
- /* HOST_COUNT must be called before HOST */
- if (grid->nb_hosts == 0) {
- fprintf(stderr,"Error: Host Count must be specified before Hosts\n");
- return -1;
- }
-
- /* Get index List*/
- ptr=strchr(line,' ');
- if (!ptr) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- }
- s_indexlist=line;
- *ptr='\0';
- line=ptr+1;
-
- /* Get rel_speed */
- ptr=strchr(line,' ');
- if (!ptr) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- }
- s_rel_speed=line;
- *ptr='\0';
- line=ptr+1;
-
- /* Get cpu_file */
- ptr=strchr(line,' ');
- if (!ptr) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- }
- s_cpu_file=line;
- *ptr='\0';
- line=ptr+1;
-
- /* get mode */
- ptr=strchr(line,'\n');
- if (!ptr) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- }
- s_mode=line;
- *ptr='\0';
-
- /* Process strings */
- ptr = strchr(s_indexlist,'-');
- min = atoi(s_indexlist);
- max = atoi(ptr+1);
- nb_hostOnLine = max-min+1;
- hostIndexList=(int*)calloc(max-min+1,sizeof(int));
- for (i=0;i<max-min+1;i++){
- hostIndexList[i]=min+i;
- }
-
- rel_speed=atof(s_rel_speed);
-
- /* Creating the hosts */
- for (i=0;i<nb_hostOnLine;i++){
- host = newHost();
- host->global_index = min+i;
- host->rel_speed = rel_speed;
- if (!host->global_index) {
- host->cluster=0;
- } else if (host->rel_speed !=
- grid->hosts[host->global_index-1]->rel_speed) {
- host->cluster = grid->hosts[host->global_index-1]->cluster +1;
- } else {
- host->cluster = grid->hosts[host->global_index-1]->cluster;
- }
-
- host->cpu_trace = strdup(s_cpu_file);
- if (!strcmp(s_mode,"IN_ORDER")) {
- host->mode = SG_SEQUENTIAL_IN_ORDER;
- } else if (!strcmp(s_mode,"OUT_OF_ORDER")) {
- host->mode = SG_SEQUENTIAL_OUT_OF_ORDER;
- } else if (!strcmp(s_mode,"TIME_SLICED")) {
- host->mode = SG_TIME_SLICED;
- } else {
- fprintf(stderr,"Error: invalid mode specification '%s'\n",s_mode);
- return -1;
- }
- /* Is the host beyond the index */
- if (host->global_index >= grid->nb_hosts) {
- fprintf(stderr,"Error: More hosts than the host count\n");
- return -1;
- }
-
- /* Have we seen that host before ? */
- if (grid->hosts[host->global_index] != NULL) {
- fprintf(stderr,"Error: Two hosts share index %d\n",
- host->global_index);
- return -1;
- }
- /* Add the host to the grid->hosts array */
- grid->hosts[host->global_index]=host;
- }
- return 1;
-}
-
-/*
- * parseLinkLine()
- *
- * LINK <index> <lat_file> <band_file>
- */
-int parseLinkLine(Grid grid, char *line)
-{
- char *ptr;
- Link link;
- char buffer[16];
-
- char *s_indexlist,*s_lat_file,*s_band_file,*s_mode;
- int *linkIndexList=NULL;
- int nb_linkOnLine, i, min,max;
-
- /* LINK_COUNT must be called before LINK */
- if (grid->nb_links == 0) {
- fprintf(stderr,"Error: Link Count must be specified before Links\n");
- return -1;
- }
-
- /* Get index */
- ptr=strchr(line,' ');
- if (!ptr) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- }
- s_indexlist=line;
- *ptr='\0';
- line=ptr+1;
-
-
- /* Get lat_file */
- ptr=strchr(line,' ');
- if (!ptr) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- }
- s_lat_file=line;
- *ptr='\0';
- line=ptr+1;
-
- /* Get band_file */
- ptr=strchr(line,' ');
- if (!ptr) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- }
- s_band_file=line;
- *ptr='\0';
- line=ptr+1;
-
- /* get mode */
- ptr=strchr(line,'\n');
- if (!ptr) {
- fprintf(stderr,"Syntax error\n");
- return -1;
- }
- s_mode=line;
- *ptr='\0';
-
- /* Process strings */
- ptr = strchr(s_indexlist,'-');
- min = atoi(s_indexlist);
- if (ptr) {
- max = atoi(ptr+1);
- } else {
- max=min;
- }
- nb_linkOnLine = max-min+1;
- linkIndexList=(int*)calloc(max-min+1,sizeof(int));
- for (i=0;i<max-min+1;i++){
- linkIndexList[i]=min+i;
- }
-
- /* Creating the link */
- for (i=0;i<nb_linkOnLine;i++){
- link = newLink();
- link->global_index = min+i;
- link->latency_trace=strdup(s_lat_file);
- link->bandwidth_trace=strdup(s_band_file);
- if (!strcmp(s_mode,"IN_ORDER")) {
- link->mode = SG_SEQUENTIAL_IN_ORDER;
- } else if (!strcmp(s_mode,"OUT_OF_ORDER")) {
- link->mode = SG_SEQUENTIAL_OUT_OF_ORDER;
- } else if (!strcmp(s_mode,"TIME_SLICED")) {
- link->mode = SG_TIME_SLICED;
- } else if (!strcmp(s_mode,"FAT_PIPE")){
- link->mode = SG_FAT_PIPE;
- } else {
- fprintf(stderr,"Error: invalid mode specification '%s'\n",s_mode);
- return -1;
- }
- sprintf(buffer,"link%d",min+i);
-
- /* Is the node beyond the index */
- if (link->global_index >= grid->nb_links) {
- fprintf(stderr,"Error: More links than the link count\n");
- return -1;
- }
-
-
- /* Have we seen that link before ? */
- if (grid->links[link->global_index] != NULL) {
- fprintf(stderr,"Error: Two links share index %d\n",
- link->global_index);
- return -1;
- }
- /* Add the link to the grid->links array */
- grid->links[link->global_index]=link;
- }
- return 1;
-}
-
-static int createConnectionMatrix(Grid grid){
- int i,j,nb_clusters;
- for (i=0;i<grid->nb_hosts;i++){
- for(j=0;j<grid->nb_hosts;j++){
- if (i==j) {
- grid->connections[i][j]=(Link*)calloc(1, sizeof(Link));
- grid->connections[i][j][0]=newLink();
- (grid->connections[i][j][0])->global_index=-1;
- }else{
- /* Intra cluster connection */
- if (grid->hosts[i]->cluster == grid->hosts[j]->cluster) {
- grid->connections[i][j]=(Link*)calloc(3, sizeof(Link));
- grid->connections[i][j][0]= grid->links[i];
- grid->connections[i][j][1]=
- grid->links[grid->nb_hosts+grid->hosts[i]->cluster];
- grid->connections[i][j][2]= grid->links[j];
- } else { /* Inter cluster connection */
- grid->connections[i][j]=(Link*)calloc(7, sizeof(Link));
-
- nb_clusters = grid->hosts[grid->nb_hosts-1]->cluster+1;
-
- /* Src host */
- grid->connections[i][j][0]= grid->links[i];
- /* Src switch */
- grid->connections[i][j][1]=
- grid->links[grid->nb_hosts+grid->hosts[i]->cluster];
- /* Src gateway */
- grid->connections[i][j][2]=
- grid->links[grid->nb_hosts+grid->hosts[i]->cluster+nb_clusters];
- /* Backbone */
- grid->connections[i][j][3]=
- grid->links[grid->nb_links-1];
- /* Dest gateway */
- grid->connections[i][j][4]=
- grid->links[grid->nb_hosts+grid->hosts[j]->cluster+nb_clusters];
- /* Dest switch */
- grid->connections[i][j][5]=
- grid->links[grid->nb_hosts+grid->hosts[j]->cluster];
- /* Dest host */
- grid->connections[i][j][6]= grid->links[j];
-
- }
- }
- }
- }
- return 1;
-}
-
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "mixtesim_prototypes.h"
-#include "list_scheduling.h"
-
-#include "simdag/simdag.h"
-#include "xbt/log.h"
-
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mixtesim_heft, mixtesim,
- "Logging specific to Mixtesim (heft)");
-
-/* static function prototypes */
-
-static Node *computeNodeList(DAG dag);
-static int rankUCompareNode(const void *n1, const void *n2);
-static int scheduleList(DAG dag, Node *L);
-static void scheduleNode(Node node);
-
-static double computeAverageLinkSpeed();
-static double computeAverageLinkLatency();
-static double computeAverageExecutionTime(Node node);
-
-static void assignMeanCost(Node node);
-static double computeAndAssignRankU(Node node);
-
-
-static double computeEarliestStartTime(Node node, SD_workstation_t host);
-static double computeEarliestFinishTime(Node node, SD_workstation_t host);
-static void scheduleNodeOnHost(Node node, SD_workstation_t host);
-
-
-/*
- * HEFT(): Implementation of HEFT
- */
-int HEFT(DAG dag)
-{
- Node *L=NULL;
-
- /* Compute mean cost for each node */
- assignMeanCost(dag->root);
-
- /* Compute Rank_u for each node */
- computeAndAssignRankU(dag->root);
-
- /* Compute the list for the schedule */
- if ((L = computeNodeList(dag)) == NULL)
- return -1;
-
- /* Schedule */
- if (scheduleList(dag,L) == -1)
- return -1;
-
- /* Analyze */
-/* if (analyzeSchedule (grid,dag,L) == -1) */
-/* return -1; */
-
- /* Implement the Simgrid schedule */
- implementSimgridSchedule(dag,L);
-
- if (L)
- free (L);
-
- return 0;
-}
-
-static Node *computeNodeList(DAG dag)
-{
- int i;
- int nb_comp_nodes=0;
- Node *L=NULL;
-
- for (i=0;i<dag->nb_nodes;i++) {
- if (dag->nodes[i]->type != NODE_COMPUTATION)
- continue;
- L = (Node *)realloc(L,(nb_comp_nodes+1)*sizeof(Node));
- L[nb_comp_nodes] = dag->nodes[i];
- nb_comp_nodes++;
- }
-
- /* sort L by rank_u */
- qsort(L,nb_comp_nodes,sizeof(Node),rankUCompareNode);
-
- /* NULL-terminate the list */
- L = (Node *)realloc(L,(nb_comp_nodes+1)*sizeof(Node));
- L[nb_comp_nodes]=NULL;
-
- return L;
-}
-
-/*
- * rankUCompareNode()
- */
-static int rankUCompareNode(const void *n1, const void *n2)
-{
- double rank_u1, rank_u2;
-
- rank_u1 = NODE_ATTR((*((Node *)n1)))->rank_u;
- rank_u2 = NODE_ATTR((*((Node *)n2)))->rank_u;
-
- if (rank_u1 > rank_u2)
- return -1;
- else if (rank_u1 == rank_u2)
- return 0;
- else
- return 1;
-}
-
-/*
- * scheduleList()
- */
-static int scheduleList(DAG dag, Node *L)
-{
- int i=0;
- Node node;
-
- /* Schedules the nodes in the order of list L */
- while ((node=L[i++])) {
- scheduleNode(node);
- }
- return 0;
-}
-
-/*
- * scheduleNode()
- * pick a host
- */
-static void scheduleNode(Node node)
-{
- int i;
- SD_workstation_t host;
- SD_workstation_t best_host;
- double EFT;
- double min_EFT=-1.0;
- int nb_hosts = SD_workstation_get_number();
- const SD_workstation_t *hosts = SD_workstation_get_list();
-
- /* pick the best host */
- for (i=0;i<nb_hosts;i++) {
- host = hosts[i];
- /* compute the start_time on that host */
- EFT = computeEarliestFinishTime(node, host);
-/* fprintf(stderr,"EFT %s on %s = %f\n",node->sg_task->name, */
-/* host->sg_host->name, EFT); */
-
- /* is it the best one ? */
- if ((min_EFT == -1.0)||
- (EFT < min_EFT)) {
- min_EFT = EFT;
- best_host = host;
- }
- }
-
- scheduleNodeOnHost(node, best_host);
-
- return;
-}
-
-/*
- * computeAverageLinkSpeed()
- */
-static double computeAverageLinkSpeed()
-{
- int i;
- double bandwidth, ave;
- int nb_links = SD_link_get_number();
- const SD_link_t *links = SD_link_get_list();
-
- ave=0.0;
- for (i=0;i<nb_links;i++) {
- bandwidth = SD_link_get_current_bandwidth(links[i]);
- ave += bandwidth;
- }
- return (ave / nb_links);
-}
-
-/*
- * computeAverageLinkLatency()
- */
-static double computeAverageLinkLatency()
-{
- int i;
- double latency, ave;
- int nb_links = SD_link_get_number();
- const SD_link_t *links = SD_link_get_list();
-
- ave=0.0;
- for (i=0;i<nb_links;i++) {
- latency = SD_link_get_current_latency(links[i]);
- ave += latency;
- }
- return (ave / nb_links);
-}
-
-/*
- *computeAverageExecutionTime()
- */
-static double computeAverageExecutionTime(Node node)
-{
- int i;
- double exec_time, ave;
- int nb_hosts = SD_workstation_get_number();
- const SD_workstation_t *hosts = SD_workstation_get_list();
- double communication_amount = 0.0;
-
- ave=0.0;
- for (i=0;i<nb_hosts;i++) {
- exec_time =
- SD_task_get_execution_time(node->sd_task, 1, &hosts[i],
- &node->cost, &communication_amount, -1.0);
-
- ave += exec_time;
- }
-
- return (ave / nb_hosts);
-}
-
-/*
- * computeAverageCommunicationTime()
- */
-static double computeAverageCommunicationTime(Node node)
-{
- return (computeAverageLinkLatency() +
- (node->cost / computeAverageLinkSpeed()));
-}
-
-/*
- * computeEarliestFinishTime()
- */
-static double computeEarliestFinishTime(Node node, SD_workstation_t host)
-{
- double executionTime, EST;
- double communication_amount = 0.0;
-
- EST = computeEarliestStartTime(node, host);
- executionTime =
- SD_task_get_execution_time(node->sd_task, 1, &host, &node->cost,
- &communication_amount, -1.0);
-
- return executionTime + EST;
-}
-
-/*
- * computeEarliestStartTime()
- */
-static double computeEarliestStartTime(Node node, SD_workstation_t host)
-{
- double earliest_start_time=0.0;
- int i;
- double host_available = HOST_ATTR(host)->first_available;
- double data_available;
- double transfer_time;
- double last_data_available;
- Node parent,grand_parent;
- SD_workstation_t grand_parent_host;
-/* SD_link_t link; */
-
- if (node->nb_parents != 0) {
- /* compute last_data_available */
- last_data_available=-1.0;
- for (i=0;i<node->nb_parents;i++) {
- parent = node->parents[i];
-
- /* No transfers to schedule */
- if (parent->type == NODE_ROOT) {
- data_available=0.0;
- break;
- }
- /* normal case */
- if (parent->type == NODE_TRANSFER) {
- if (parent->nb_parents > 1) {
- fprintf(stderr,"Warning: transfer has 2 parents\n");
- }
- grand_parent = parent->parents[0];
- grand_parent_host = NODE_ATTR(grand_parent)->host;
- transfer_time =
- SD_route_get_communication_time(grand_parent_host, host, parent->cost);
-
-/* link = SD_workstation_route_get_list(grand_parent_host, host)[0]; */
-
-/* if (link->global_index == -1) { */
-/* /\* it is the local link so transfer_time = 0 *\/ */
-/* transfer_time = 0.0; */
-/* } else { */
-/* transfer_time = SG_getLinkLatency(link->sg_link, */
-/* NODE_ATTR(grand_parent)->finish) + */
-/* parent->cost/SG_getLinkBandwidth(link->sg_link, */
-/* NODE_ATTR(grand_parent)->finish); */
-/* } */
- data_available = NODE_ATTR(grand_parent)->finish + transfer_time;
- }
-
- /* no transfer */
- if (parent->type == NODE_COMPUTATION) {
- data_available = NODE_ATTR(parent)->finish;
- }
-
- if (last_data_available < data_available)
- last_data_available = data_available;
- }
-
- /* return the MAX "*/
- earliest_start_time = MAX(host_available,last_data_available);
-
- }
- return earliest_start_time;
-}
-
-
-/*
- * computeAndAssignRankU()
- */
-static double computeAndAssignRankU(Node node)
-{
- int i;
- double my_rank_u = 0.0, max_rank_u, current_child_rank_u;
- Node child,grand_child;
-
- my_rank_u = NODE_ATTR(node)->mean_cost;
- max_rank_u = -1.0;
-
- for (i=0;i<node->nb_children;i++) {
- child = node->children[i];
-
- if (node->type == NODE_ROOT)
- {
- my_rank_u = computeAndAssignRankU(child);
- }
-
- if (child->type == NODE_TRANSFER) { /* normal case */
- if (child->nb_children > 1) {
- fprintf(stderr,"Warning: transfer has 2 children\n");
- }
- grand_child = child->children[0];
- current_child_rank_u = NODE_ATTR(child)->mean_cost +
- computeAndAssignRankU(grand_child);
- if (max_rank_u < current_child_rank_u)
- max_rank_u = current_child_rank_u;
- }
- else /* child is the end node */
- max_rank_u = 0.0;
-
- }
-
- my_rank_u += max_rank_u;
-
- NODE_ATTR(node)->rank_u = my_rank_u;
- return my_rank_u ;
-}
-
-/*
- * assignMeanCost()
- */
-static void assignMeanCost(Node node)
-{
- int i;
-
- for (i=0;i<node->nb_children;i++) {
- if (node->children[i]->type == NODE_COMPUTATION)
- NODE_ATTR(node->children[i])->mean_cost =
- computeAverageExecutionTime(node->children[i]);
- else
- NODE_ATTR(node->children[i])->mean_cost =
- computeAverageCommunicationTime(node->children[i]);
- assignMeanCost(node->children[i]);
- }
- return;
-}
-
-
-/*
- * scheduleNodeOnHost()
- */
-static void scheduleNodeOnHost(Node node, SD_workstation_t host)
-{
- int i;
- double data_available, transfer_time, last_data_available;
-/* SD_link_t link; */
- Node parent, grand_parent;
- SD_workstation_t grand_parent_host;
- double communication_amount = 0.0;
-
- INFO2("Affecting node '%s' to host '%s'", SD_task_get_name(node->sd_task),
- SD_workstation_get_name(host));
-
- last_data_available=-1.0;
- for (i=0;i<node->nb_parents;i++) {
- parent = node->parents[i];
-
- if (parent->type == NODE_ROOT) {/* No transfers to schedule */
- data_available=0.0;
- break;
- }
-
- if (parent->type == NODE_TRANSFER) { /* normal case */
- if (parent->nb_parents > 1) {
- fprintf(stderr,"Warning: transfer has 2 parents\n");
- }
- grand_parent = parent->parents[0];
- grand_parent_host = NODE_ATTR(grand_parent)->host;
- transfer_time =
- SD_route_get_communication_time(grand_parent_host, host, parent->cost);
-
-/* link = SD_workstation_route_get_list(grand_parent_host, host)[0]; */
-
-/* if (link->global_index == -1) { */
-/* /\* it is the local link so transfer_time = 0 *\/ */
-/* transfer_time = 0.0; */
-/* } else { */
-/* transfer_time = SG_getLinkLatency(link->sg_link, */
-/* NODE_ATTR(grand_parent)->finish) + */
-/* parent->cost/SG_getLinkBandwidth(link->sg_link, */
-/* NODE_ATTR(grand_parent)->finish); */
-/* } */
-
- data_available = NODE_ATTR(grand_parent)->finish + transfer_time;
- }
-
- /* no transfer */
- if (parent->type == NODE_COMPUTATION) {
- data_available = NODE_ATTR(parent)->finish;
- }
-
- if (last_data_available < data_available)
- last_data_available = data_available;
- }
-
- /* node attributes */
- NODE_ATTR(node)->start=MAX(last_data_available,
- HOST_ATTR(host)->first_available);
- NODE_ATTR(node)->finish=NODE_ATTR(node)->start +
- SD_task_get_execution_time(node->sd_task, 1, &host, &node->cost,
- &communication_amount, -1.0);
-/* SG_getPrediction(SG_PERFECT, 0.0, NULL,host->sg_host, */
-/* NODE_ATTR(node)->start,node->cost); */
-
- NODE_ATTR(node)->host = host;
- NODE_ATTR(node)->state = LIST_SCHEDULING_SCHEDULED;
-
- /* host attributes */
- HOST_ATTR(host)->first_available = NODE_ATTR(node)->finish;
-
- return;
-}
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "mixtesim_prototypes.h"
-#include "list_scheduling.h"
-
-#include "simdag/simdag.h"
-#include "xbt/log.h"
-
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mixtesim_list_scheduling, mixtesim,
- "Logging specific to Mixtesim (list scheduling)");
-
-/*
- * freeHostAttributes()
- */
-void freeHostAttributes()
-{
- int i;
- int nb_hosts = SD_workstation_get_number();
- const SD_workstation_t *hosts = SD_workstation_get_list();
-
- for (i=0;i<nb_hosts;i++) {
- free(SD_workstation_get_data(hosts[i]));
- SD_workstation_set_data(hosts[i], NULL);
- }
- return;
-}
-
-/*
- * allocateHostAttributes()
- */
-void allocateHostAttributes()
-{
- int i;
- int nb_hosts = SD_workstation_get_number();
- const SD_workstation_t *hosts = SD_workstation_get_list();
- void *data;
-
- for (i=0;i<nb_hosts;i++) {
- data = calloc(1,sizeof(struct _HostAttribute));
- SD_workstation_set_data(hosts[i], data);
- }
- return;
-}
-
-/*
- * freeNodeAttributes()
- */
-void freeNodeAttributes(DAG dag)
-{
- int i;
-
- for (i=0;i<dag->nb_nodes;i++) {
- if (dag->nodes[i]->metadata) {
- free(dag->nodes[i]->metadata);
- }
- }
- return;
-}
-
-/*
- * allocateNodeAttributes()
- */
-void allocateNodeAttributes(DAG dag)
-{
- int i;
-
- for (i=0;i<dag->nb_nodes;i++) {
- dag->nodes[i]->metadata =
- (NodeAttribute)calloc(1,sizeof(struct _NodeAttribute));
- if (dag->nodes[i]->type == NODE_COMPUTATION)
- NODE_ATTR(dag->nodes[i])->state = LIST_SCHEDULING_NOT_SCHEDULED;
- }
- return;
-}
-
-/*
- * implementSimgridSchedule()
- */
-void implementSimgridSchedule(DAG dag, Node *list)
-{
- int j,k;
- Node node;
- Node grand_parent;
- SD_workstation_t grand_parent_host;
- SD_workstation_t host;
-/* Link link; */
-/* SD_link_t *route;*/
-
- const double no_cost[] = {0.0, 0.0};
- const double small_cost = 1.0; /* doesn't work with 0.0 */
- e_SD_task_state_t state;
- SD_workstation_t host_list[] = {NULL, NULL};
- double communication_amount[] = {0.0, 0.0,
- 0.0, 0.0};
-
- /* Schedule Root */
- if (SD_task_get_state(dag->root->sd_task) == SD_NOT_SCHEDULED) {
- DEBUG1("Dag root cost = %f", dag->root->cost);
- DEBUG1("Scheduling root task '%s'", SD_task_get_name(dag->root->sd_task));
- SD_task_schedule(dag->root->sd_task, 1, SD_workstation_get_list(),
- &small_cost, no_cost, -1.0);
- DEBUG2("Task '%s' state: %d", SD_task_get_name(dag->root->sd_task), SD_task_get_state(dag->root->sd_task));
- }
-
- /* Schedule the computation */
- for (j=0;list[j];j++) {
- node=list[j];
-
- /* schedule the task */
- DEBUG1("Scheduling computation task '%s'", SD_task_get_name(node->sd_task));
- SD_task_schedule(node->sd_task, 1, &NODE_ATTR(node)->host,
- &node->cost, no_cost, -1.0);
- DEBUG2("Task '%s' state: %d", SD_task_get_name(node->sd_task), SD_task_get_state(node->sd_task));
-
- /* schedule the parent transfer */
- for (k=0;k<node->nb_parents;k++) {
- if (node->parents[k]->type == NODE_ROOT)
- break;
- /* no transfer */
- if (node->parents[k]->type == NODE_COMPUTATION)
- continue;
- /* normal case */
- if (node->parents[k]->type == NODE_TRANSFER) {
- state = SD_task_get_state(node->parents[k]->sd_task);
- if (state != SD_RUNNING && state != SD_DONE) {
- grand_parent=node->parents[k]->parents[0];
- grand_parent_host=NODE_ATTR(grand_parent)->host;
- host=NODE_ATTR(node)->host;
-
- if (host != grand_parent_host) {
- host_list[0] = grand_parent_host;
- host_list[1] = host;
- communication_amount[1] = node->parents[k]->cost;
- DEBUG1("Scheduling transfer task '%s'",
- SD_task_get_name(node->parents[k]->sd_task));
- SD_task_schedule(node->parents[k]->sd_task, 2, host_list,
- no_cost, communication_amount, -1.0);
- DEBUG2("Task '%s' state: %d",
- SD_task_get_name(node->parents[k]->sd_task),
- SD_task_get_state(node->parents[k]->sd_task));
- } else {
- SD_task_schedule(node->parents[k]->sd_task, 1, host_list,
- no_cost, communication_amount, -1.0);
-/* SD_task_schedule(node->parents[k]->sd_task, 1, &host, */
-/* no_cost, &(node->parents[k]->cost), -1.0); */
- }
-/* host_list[0] = grand_parent_host; */
-/* host_list[1] = host; */
-/* communication_amount[1] = node->parents[k]->cost; */
-/* DEBUG1("Scheduling transfer task '%s'", SD_task_get_name(node->parents[k]->sd_task)); */
-/* SD_task_schedule(node->parents[k]->sd_task, 2, host_list, */
-/* no_cost, communication_amount, -1.0); */
-/* DEBUG2("Task '%s' state: %d", SD_task_get_name(node->parents[k]->sd_task), */
-/* SD_task_get_state(node->parents[k]->sd_task)); */
-
-/* /\* if (!route) { *\/ */
-/* /\* if (SG_scheduleTaskOnResource(node->parents[k]->sg_task, *\/ */
-/* /\* local_link->sg_link) *\/ */
-/* /\* == -1) { *\/ */
-/* /\* fprintf(stderr,"Task '%s' already in state %d\n", *\/ */
-/* /\* node->parents[k]->sg_task->name, *\/ */
-/* /\* node->parents[k]->sg_task->state); *\/ */
-/* /\* } *\/ */
-/* /\* } else { *\/ */
-/* /\* if (SG_scheduleTaskOnResource(node->parents[k]->sg_task, *\/ */
-/* /\* route) *\/ */
-/* /\* == -1) { *\/ */
-/* /\* fprintf(stderr,"Task '%s' already in state %d\n", *\/ */
-/* /\* node->parents[k]->sg_task->name, *\/ */
-/* /\* node->parents[k]->sg_task->state); *\/ */
-/* /\* } *\/ */
-/* /\* } *\/ */
- }
- }
- }
- }
-
- /* Schedule End */
-/* SG_scheduleTaskOnResource(dag->end->sg_task,local_link->sg_link); */
- SD_task_schedule(dag->end->sd_task, 1, SD_workstation_get_list(),
- &small_cost, no_cost, -1.0);
-
-
- return;
-}
-
-
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <time.h>
-#include <string.h>
-
-#include "mixtesim_prototypes.h"
-#include "list_scheduling.h"
-
-#include "simdag/simdag.h"
-#include "xbt/log.h"
-
-XBT_LOG_NEW_DEFAULT_CATEGORY(mixtesim,
- "Logging specific to this SimDag example");
-
-/* static int createSimgridResources(); */
-static int createSimgridTasks();
-static void freeSimgridTasks();
-
-DAG dag;
-/*extern Link local_link;*/
-
-int main(int argc, char **argv) {
-
- char *platform_file;
- SD_task_t *changed_tasks;
- int i;
-
-/* xbt_log_control_set("sd.thres=debug"); */
-/* xbt_log_control_set("sd_kernel.thres=debug"); */
-/* xbt_log_control_set("surf.thres=debug"); */
-/* xbt_log_control_set("mixtesim.thres=debug"); */
-
-
- if (argc < 3) {
- printf("Usage: %s xml_platform_file dagfile \n", argv[0]);
- printf("example: %s gridfile.xml dagfile\n", argv[0]);
- exit(1);
- }
-
- /* initialisation of SD */
- SD_init(&argc, argv);
-
- /* creation of the environment */
- platform_file = argv[1];
- SD_create_environment(platform_file);
-
- /*Parse DAG file */
- dag = parseDAGFile(argv[2]);
-
-
- allocateNodeAttributes(dag);
- allocateHostAttributes();
-
- /* create Simgrid objects */
- createSimgridObjects();
-
- HEFT(dag);
-
- /* not recommanded with big DAGs! */
- /* printDAG(dag); */
-
- changed_tasks = SD_simulate(-1.0);
- INFO0("Tasks whose state has changed:");
- i = 0;
- while(changed_tasks[i] != NULL) {
- switch (SD_task_get_state(changed_tasks[i])) {
- case SD_SCHEDULED:
- INFO1("%s is scheduled.", SD_task_get_name(changed_tasks[i]));
- break;
- case SD_READY:
- INFO1("%s is ready.", SD_task_get_name(changed_tasks[i]));
- break;
- case SD_RUNNING:
- INFO1("%s is running.", SD_task_get_name(changed_tasks[i]));
- break;
- case SD_DONE:
- INFO1("%s is done.", SD_task_get_name(changed_tasks[i]));
- break;
- case SD_FAILED:
- INFO1("%s is failed.", SD_task_get_name(changed_tasks[i]));
- break;
- default:
- INFO1("Unknown status for %s", SD_task_get_name(changed_tasks[i]));
- break;
- }
- i++;
- }
- free(changed_tasks);
- INFO1("Total: %d", i);
-
- /* clear some memory */
- freeNodeAttributes(dag);
- freeHostAttributes();
- freeSimgridTasks();
- freeDAG(dag);
-
- /* reset SimDag */
- SD_exit();
-
- return 0;
-}
-
-/*
- * createSimgridObjects()
- */
-int createSimgridObjects()
-{
- /* Create resources */
-/* if (createSimgridResources() == -1) */
-/* return -1; */
-
- /* Create tasks */
- if (createSimgridTasks() == -1)
- return -1;
-
- return 0;
-}
-
-/*
- * createSimgridResources()
- */
-/* static int createSimgridResources() */
-/* { */
-/* int i,j; */
-/* char buffer[32]; */
-/* SG_Resource *sg_TCPlinks; */
-/* SG_Resource fast_link; */
-
-/* /\* The almost infinetely fast TCP link *\/ */
-/* fast_link = SG_newTCPLink("infinetly_fast_TCPlink", */
-/* NULL, */
-/* 0.0, EPSILON, NULL, */
-/* 0.0, 1000.0, */
-/* SG_TCP_SHARED,NULL); */
-
-/* sg_TCPlinks = (SG_Resource*) calloc (2, sizeof(SG_Resource)); */
-/* sg_TCPlinks[0] = fast_link; */
-/* sg_TCPlinks[1] = NULL; */
-
-/* /\* And the almost infinetely fast TCP route *\/ */
-/* local_link = newLink(); */
-/* local_link->sg_link = */
-/* SG_newTCPRoute ("infinitely_fast_route", sg_TCPlinks, NULL); */
-/* free(sg_TCPlinks); */
-
-/* /\* Create hosts *\/ */
-/* for (i=0;i<grid->nb_hosts;i++) { */
-/* if (createSimgridHost(grid->hosts[i]) == -1) */
-/* return -1; */
-/* } */
-
-/* /\* Create TCP links *\/ */
-/* for (i=0;i<grid->nb_links;i++) { */
-/* if (createSimgridLink(grid->links[i]) == -1) */
-/* return -1; */
-/* } */
-
-/* /\* Create TCP routes *\/ */
-/* grid->routes=(SG_Resource**)calloc(grid->nb_hosts,sizeof(SG_Resource*)); */
-
-/* for (i=0;i<grid->nb_hosts;i++) { */
-/* grid->routes[i]=(SG_Resource *)calloc(grid->nb_hosts,sizeof(SG_Resource)); */
-/* for (j=0;j<grid->nb_hosts;j++) { */
-/* sprintf(buffer,"route#%d-%d",i,j); */
-/* if (i!=j) { */
-/* if (grid->hosts[i]->cluster == grid->hosts[j]->cluster) { */
-/* /\* Intra cluster route *\/ */
-/* /\* src - switch - dest*\/ */
-/* sg_TCPlinks = (SG_Resource*) calloc (4, sizeof(SG_Resource)); */
-/* sg_TCPlinks[0] = grid->connections[i][j][0]->sg_link; */
-/* sg_TCPlinks[1] = grid->connections[i][j][1]->sg_link; */
-/* sg_TCPlinks[2] = grid->connections[i][j][2]->sg_link; */
-/* sg_TCPlinks[3] = NULL; */
-/* } else { */
-/* /\* Inter cluster route *\/ */
-/* /\* src - switch - gateway - backbone - gateway - switch - dest*\/ */
-/* sg_TCPlinks = (SG_Resource*) calloc (8, sizeof(SG_Resource)); */
-/* sg_TCPlinks[0] = grid->connections[i][j][0]->sg_link; */
-/* sg_TCPlinks[1] = grid->connections[i][j][1]->sg_link; */
-/* sg_TCPlinks[2] = grid->connections[i][j][2]->sg_link; */
-/* sg_TCPlinks[3] = grid->connections[i][j][3]->sg_link; */
-/* sg_TCPlinks[4] = grid->connections[i][j][4]->sg_link; */
-/* sg_TCPlinks[5] = grid->connections[i][j][5]->sg_link; */
-/* sg_TCPlinks[6] = grid->connections[i][j][6]->sg_link; */
-/* sg_TCPlinks[7] = NULL; */
-/* } */
-/* grid->routes[i][j] = SG_newTCPRoute (buffer, sg_TCPlinks, NULL); */
-/* free(sg_TCPlinks); */
-/* } else { */
-/* /\*Self communication => no route *\/ */
-/* grid->routes[i][j] = NULL; */
-/* } */
-/* } */
-/* } */
-/* return 0; */
-/* } */
-
-/* static int createSimgridHost(Host h) */
-/* { */
-/* char buffer[32]; */
-/* char *filename; */
-/* double offset; */
-/* double value; */
-
-/* sprintf(buffer,"host#%d",h->global_index); */
-
-/* if (parseTraceSpec(h->cpu_trace,&filename,&offset,&value) == -1) { */
-/* fprintf(stderr,"Syntax error: host#%d\n",h->global_index); */
-/* return -1; */
-/* } */
-
-/* h->sg_host = SG_newHost(buffer,h->rel_speed, */
-/* h->mode, filename,offset,value, */
-/* NULL, NULL, 0, h); */
-/* free(filename); */
-
-/* return 0; */
-/* } */
-
-/* /\* */
-/* * createSimgridLink() */
-/* * */
-/* *\/ */
-/* static int createSimgridLink(Link l) */
-/* { */
-/* char buffer[32]; */
-/* char *filename1,*filename2; */
-/* double offset1,offset2; */
-/* double value1,value2; */
-
-/* sprintf(buffer,"link#%d",l->global_index); */
-
-/* if ((parseTraceSpec(l->latency_trace,&filename1,&offset1,&value1) == -1) || */
-/* (parseTraceSpec(l->bandwidth_trace,&filename2,&offset2,&value2) == -1)) { */
-/* fprintf(stderr,"Syntax error: link#%d\n",l->global_index); */
-/* return -1; */
-/* } */
-
-
-/* if (l->mode == SG_TIME_SLICED) { */
-/* l->sg_link=SG_newTCPLink (buffer, */
-/* filename1, offset1, value1, */
-/* filename2, offset2, value2, */
-/* SG_TCP_SHARED,NULL); */
-/* } */
-
-/* if (l->mode == SG_FAT_PIPE) { */
-/* l->sg_link=SG_newTCPLink (buffer, */
-/* filename1, offset1, value1, */
-/* filename2, offset2, value2, */
-/* SG_TCP_BACKBONE,NULL); */
-/* } */
-
-/* free(filename1); */
-/* free(filename2); */
-
-/* return 0; */
-/* } */
-
-/*
- * createSimgridTasks()
- *
- */
-static int createSimgridTasks()
-{
- Node node;
- char buffer[32];
- int i,j;
-
- /* Creating the tasks */
- for (i=0;i<dag->nb_nodes;i++) {
- node = dag->nodes[i];
- sprintf(buffer,"node#%d",node->global_index);
- node->sd_task = SD_task_create(buffer, node, 1.0);
- }
-
- /* Set the dependencies */
- for (i=0;i<dag->nb_nodes;i++) {
- node = dag->nodes[i];
- for (j=0;j<node->nb_parents;j++) {
- SD_task_dependency_add(NULL, NULL, node->parents[j]->sd_task, node->sd_task);
- }
- }
- return 0;
-}
-
-
-/*
- * freeSimgridTasks()
- *
- */
-static void freeSimgridTasks()
-{
- int i;
- for (i=0;i<dag->nb_nodes;i++) {
- SD_task_destroy(dag->nodes[i]->sd_task);
- }
-}
-
-/*
- * parseTraceSpec()
- */
-/* static int parseTraceSpec(char* spec,char**filename, */
-/* double *offset, double *value) */
-/* { */
-/* char *tmp; */
-
-/* tmp = strchr(spec,':'); */
-/* if (!tmp) { */
-/* fprintf(stderr,"Parse error: missing ':' in trace specification\n"); */
-/* return -1; */
-/* } */
-
-/* *filename=NULL; */
-/* *offset=0.0; */
-/* *value=0.0; */
-
-/* if (tmp == spec) { /\* FIXED *\/ */
-/* if (!*(tmp+1)) { */
-/* fprintf(stderr,"Parse error: invalid value specification\n"); */
-/* return -1; */
-/* } */
-/* *value = atof(tmp+1); */
-/* if (*value < 0.0) { */
-/* fprintf(stderr,"Error: invalid value\n"); */
-/* return -1; */
-/* } */
-/* return 0; */
-/* } */
-
-/* /\* TRACE *\/ */
-/* *tmp='\0'; */
-/* *filename=strdup(spec); */
-/* if (!*(tmp+1)) { */
-/* fprintf(stderr,"Parse error: invalid offset specification\n"); */
-/* return -1; */
-/* } */
-/* *offset = atof(tmp+1); */
-/* if (*offset < 0.0) { */
-/* fprintf(stderr,"Error: invalid offset\n"); */
-/* return -1; */
-/* } */
-
-/* return 0; */
-/* } */