]> AND Private Git Repository - loba-papers.git/blob - loba-besteffort/data/script.r
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Add .dir-locals.el.
[loba-papers.git] / loba-besteffort / data / script.r
1 ## Usage: launch R, and then: source("script.r")
2
3 ## save, and chane default options
4 osp <- options("scipen")
5 options(scipen=3)
6
7 ## load dataset (variable is "ds")
8 load("data.rda")
9
10 ## extract data for plain algorithms, in real mode
11 #ds.base <- subset(ds, Mode == "R" & grepl("[lt]_plain", Algo))
12
13 ## extract data for one experiment
14 #xx <- subset(ds,
15 #             Mode == "R" & Distrib == 1 & Ratio == "1:1" &
16 #             Platform == "cluster" & Size == 16 & Topo == "line")
17
18
19
20 draw <- function(dset = ds,
21                  draw_mode = "R",
22                  draw_distrib = 1,
23                  draw_ratio = "1:1",
24                  draw_platform = "cluster",
25                  draw_topo = "hcube") {
26
27   ## extract desired data
28   dset <- subset(dset,
29                  Mode == draw_mode & Distrib == draw_distrib &
30                  Ratio == draw_ratio &
31                  Platform == draw_platform & Topo == draw_topo)
32
33   ## reorder lines (first "plain", then "bookkeeping")
34   dset <- rbind(subset(dset, grepl("plain", Algo)),
35                 subset(dset, grepl("bookkeeping", Algo)))
36   dset <- dset[order(dset$Size), ]
37
38   ## finally, add an "Index" attribute(, for further processing
39   dset <- cbind(dset, Index=seq(1, length(dset$Size))) # FIXME
40
41   #print(dset)
42
43   ## save the graphical parameters
44   p <- par(no.readonly=TRUE)
45
46   par(mar=c(13, 4, 4, 4) + 0.1,         # change margins
47       mgp=c(11, 1, 0))
48
49   par(las=3)                           # always draw labels vertically
50
51   ## compute the time range: 0..max+20%
52   time_range <- c(0, range(dset$Conv_max)[2] * 1.2)
53
54   ## first draw the bars
55   barplot(dset$Conv_max, axes=FALSE, col="red",
56           names=dset$Algo,
57           ylim=time_range)
58   barplot(dset$Conv_avg, axes=FALSE, col="green",
59           add=TRUE)
60   barplot(dset$Idle_avg, axes=FALSE, col="blue",
61           add=TRUE)
62
63   ## draw the time axis on the left
64   axis(2, labels=TRUE)
65   mtext("Simulated time (s)", side=2, line=2.5)
66
67   title(xlab="Algorithms")
68
69   ## compute the data range
70   x_data_range <- c(0.6, length(dset$Algo) + 0.4)
71   data_range <- c(0, range(dset$Data_amnt)[2] * 1.04)
72
73   ## draw the data amnt line graphs
74   for (alg in unique(dset$Algo)) {
75     print(alg);
76     dset.da <- subset(dset, Algo == alg)
77     ## start a new graph, but drawn on the same device
78     par(new=TRUE)
79     plot(dset.da$Index, dset.da$Data_amnt, axes=FALSE, xlab="", type="b",
80          xlim=x_data_range,
81          yaxs="i", ylim=data_range)
82   }
83
84   ## draw the data amnt axis on the right
85   axis(4, labels=TRUE)
86   mtext("Data amount (relative)", side=4, line=2.5)
87
88   ## finally, set title
89   t <- paste0(dset$Mode[1], dset$Distrib[1], " / ",
90               dset$Ratio[1], " / ",
91               dset$Platform[1], " / ",
92               dset$Topo[1])
93   title(main=t)
94
95   ## restore the graphical parameters
96   par(p)
97
98   return(dset)
99 }
100
101 draw2 <- function(dset = ds,
102                  draw_mode = "R",
103                  draw_distrib = 1,
104                  draw_ratio = "1:1",
105                  draw_platform = "cluster",
106                  draw_topo = "hcube") {
107
108   ## extract desired data
109   dset <- subset(dset,
110                  Algo != "makhoul_bookkeeping" & #HIDE#
111                  Mode == draw_mode & Distrib == draw_distrib &
112                  Ratio == draw_ratio &
113                  Platform == draw_platform & Topo == draw_topo)
114
115   ## reorder lines (first "plain", then "bookkeeping")
116   dset <- rbind(subset(dset, grepl("plain", Algo)),
117                 subset(dset, grepl("bookkeeping", Algo)))
118   dset <- dset[order(dset$Size), ]
119
120   ## keep only useful data
121   dset.long <- data.frame(Algo=dset$Algo, Size=dset$Size,
122                           Idle_avg=dset$Idle_avg,
123                           Conv_avg=dset$Conv_avg,
124                           Conv_max=dset$Conv_max)
125
126   ## reshape data -> wide
127   dset.wide <- reshape(dset.long, direction="wide",
128                        idvar="Algo", timevar="Size")
129
130   ## rename rows
131   names <- dset.wide$Algo
132 #HIDE#  names <- sub("makhoul_plain",             "a: Bertsekas and Tsitsiklis, plain", names)
133   names <- sub("makhoul_plain",             "a: Bertsekas and Tsitsiklis", names)
134   names <- sub("besteffort_plain",          "b: best effort, plain", names)
135   names <- sub("besteffort-k2_plain",       "c: best effort, k=2, plain", names)
136   names <- sub("besteffort-k4_plain",       "d: best effort, k=4, plain", names)
137 #HIDE#  names <- sub("makhoul_bookkeeping",       "e: Bertsekas and Tsitsiklis, virtual", names)
138 #HIDE#  names <- sub("besteffort_bookkeeping",    "f: best effort, virtual", names)
139 #HIDE#  names <- sub("besteffort-k2_bookkeeping", "g: best effort, k=2, virtual", names)
140 #HIDE#  names <- sub("besteffort-k4_bookkeeping", "h: best effort, k=4, virtual", names)
141   names <- sub("besteffort_bookkeeping",    "e: best effort, virtual", names)
142   names <- sub("besteffort-k2_bookkeeping", "f: best effort, k=2, virtual", names)
143   names <- sub("besteffort-k4_bookkeeping", "g: best effort, k=4, virtual", names)
144   rownames(dset.wide) <- names
145   #colnames(dset.wide) <- sub("^[^.]*\\.", "", colnames(dset.wide))
146
147   ## remove first column (aka "Algo")
148   dset.mat <- as.matrix(dset.wide[-1])
149   nc <- nrow(dset.mat)
150
151   dset.plot <- dset.mat[, c(FALSE,FALSE,TRUE)]
152   barplot(dset.plot, beside=TRUE,
153           axisnames=FALSE,
154 #          names.arg=sub("^[^.]*\\.", "", colnames(dset.plot)),
155           col=gray.colors(nc)
156 #          col=rainbow(nc, s=.5)
157           )
158
159   dset.plot <- dset.mat[, c(FALSE,TRUE,FALSE)]
160   barplot(dset.plot, beside=TRUE,
161           axes=FALSE, axisnames=FALSE, add=TRUE,
162           legend.text=TRUE,
163           args.legend=list(x="topleft", inset=c(.02,0), x.intersp=0.5, title="Algorithms"),
164           col=gray.colors(nc)
165 #          col=rainbow(nc)
166           )
167
168   dset.plot <- dset.mat[, c(TRUE,FALSE,FALSE)]
169   barplot(dset.plot, beside=TRUE,
170           axes=FALSE, axisnames=FALSE, add=TRUE,
171           col="white"
172 #          col=gray.colors(nc)
173 #          col=rainbow(nc, v=.5)
174           )
175
176   ## finally, set titles
177   c <- ncol(dset.plot) - 1
178   for (l in 0:6) {
179     t <- intToUtf8(utf8ToInt("a") + l)
180     for (a in 1.5 + l + 8 * 0:c)
181       mtext(t, side=1, at=a)
182   }
183   a=4.5
184   for (s in sub("^[^.]*\\.", "", colnames(dset.plot))) {
185     mtext(s, side=1, line=1.5, at=a)
186     a <- a + 8
187   }
188   t <- paste0(
189 #HIDE#              dset$Mode[1],
190 #HIDE#              dset$Distrib[1], " / ",
191               dset$Ratio[1], " / ",
192 #HIDE#              dset$Platform[1], " / ",
193               dset$Topo[1])
194   t <- sub("hcube", "hypercube", t)
195   title(xlab="Platform size",
196         ylab="Simulated time (s)",
197         main=t)
198
199 }
200
201 if (FALSE) {
202
203   if (TRUE) {
204     draw2(draw_distrib="1")
205     draw2(draw_distrib="N")
206   } else {
207     msg <- function(text, wait = TRUE) {
208       if (wait)
209         readline("Press <Enter> to continue\n")
210       message(text)
211     }
212
213     msg("First test, with algorithms \"plain\"...", wait = FALSE);
214     draw(subset(ds, grepl("[lt]_plain", Algo)), draw_distrib="N")
215
216     msg("... with draw2()...")
217     draw2(subset(ds, grepl("[lt]_plain", Algo)), draw_distrib="N")
218
219     msg("Second test, with algorithms \"bookkeeping\"...");
220     draw(subset(ds, grepl("[lt]_bookkeeping", Algo)), draw_distrib="N")
221
222     msg("... with draw2()...")
223     draw2(subset(ds, grepl("[lt]_bookkeeping", Algo)), draw_distrib="N")
224
225     msg("Third test, with all algorithms...");
226     draw(draw_distrib="N")
227
228     msg("... with draw2()...")
229     draw2(draw_distrib="N")
230   }
231
232 } else {
233
234   pdf.options(colormodel="grey")
235   system("mkdir -pv graphs")
236   for (m in c("R", "I")) {
237     for (d in c("1", "N")) {
238       for (r in c("10:1", "1:1", "1:10")) {
239         for (t in c("line", "torus", "hcube")) {
240           for (p in c("grid", "cluster")) {
241             message(sprintf(">>> Drawing: %s%s / %s / %s / %s", m, d, r, p, t))
242           filename <- sprintf("graphs/%s%s-%s-%s-%s.pdf", m, d, r, p, t)
243             pdf(file=filename)
244             draw2(#subset(ds, grepl("[lt]_plain", Algo)),
245                   draw_mode=m, draw_distrib=d, draw_ratio=r,
246                   draw_topo=t, draw_platform=p)
247             dev.off()
248             embedFonts(file=filename, options="-dPDFSETTINGS=/prepress")
249           }
250         }
251       }
252     }
253   }
254
255   ## restore default options
256   options(scipen=osp)
257 }