granularity_model.r 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. max <- 30
  2. sizelist <- seq(64, max*1024, 64);
  3. #schedlist <- c("greedy", "prio", "dm", "random", "no-prio", "ws");
  4. #schedlist <- c("greedy", "prio", "dm", "random");
  5. #grainlist <- c(256, 512, 1024)
  6. grainlist <- c(512, 1024)
  7. gflops <- function (x, size)
  8. {
  9. 2*size*size*size/(3000000*x);
  10. }
  11. parse <- function (size, grain)
  12. {
  13. filename = paste("timing/granularity", grain, size, sep=".");
  14. if (file.exists(filename))
  15. {
  16. ret <- scan(filename);
  17. return(ret);
  18. }
  19. return (NA);
  20. }
  21. handle_size <- function (size, grain)
  22. {
  23. parsed <- parse(size, grain);
  24. if (is.na(parsed))
  25. {
  26. return (NA);
  27. }
  28. gflops <- gflops(parsed, size);
  29. return(gflops);
  30. }
  31. handle_grain <- function(grain)
  32. {
  33. gflopstab <- NULL;
  34. sizetab <- NULL;
  35. for (size in sizelist) {
  36. list <- handle_size(size, grain);
  37. if (!is.na(list))
  38. {
  39. gflopstab <- c(gflopstab, list);
  40. sizetab <- c(sizetab, array(size, c(length(list))));
  41. }
  42. }
  43. return(
  44. data.frame(gflops=gflopstab, size=sizetab, grain=array(grain, c(length(gflopstab)) ))
  45. );
  46. }
  47. handle_grain_mean <- function(grain)
  48. {
  49. meantab <- NULL;
  50. sizetab <- NULL;
  51. for (size in sizelist) {
  52. list <- mean(handle_size(size, grain));
  53. if (!is.na(list))
  54. {
  55. meantab <- c(meantab, list);
  56. sizetab <- c(sizetab, array(size, c(length(list))));
  57. }
  58. }
  59. return(
  60. data.frame(gflops=meantab, size=sizetab, grain=array(grain, c(length(meantab)) ))
  61. # meantab
  62. );
  63. }
  64. parse_nm <- function (size, grain)
  65. {
  66. filename = paste("timing/granularity.nomodel", grain, size, sep=".");
  67. if (file.exists(filename))
  68. {
  69. ret <- scan(filename);
  70. return(ret);
  71. }
  72. return (NA);
  73. }
  74. handle_size_nm <- function (size, grain)
  75. {
  76. parsed <- parse_nm(size, grain);
  77. if (is.na(parsed))
  78. {
  79. return (NA);
  80. }
  81. gflops <- gflops(parsed, size);
  82. return(gflops);
  83. }
  84. handle_grain_nm <- function(grain)
  85. {
  86. gflopstab <- NULL;
  87. sizetab <- NULL;
  88. for (size in sizelist) {
  89. list <- handle_size_nm(size, grain);
  90. if (!is.na(list))
  91. {
  92. gflopstab <- c(gflopstab, list);
  93. sizetab <- c(sizetab, array(size, c(length(list))));
  94. }
  95. }
  96. return(
  97. data.frame(gflops=gflopstab, size=sizetab, grain=array(grain, c(length(gflopstab)) ))
  98. );
  99. }
  100. handle_grain_mean_nm <- function(grain)
  101. {
  102. meantab <- NULL;
  103. sizetab <- NULL;
  104. for (size in sizelist) {
  105. list <- mean(handle_size_nm(size, grain));
  106. if (!is.na(list))
  107. {
  108. meantab <- c(meantab, list);
  109. sizetab <- c(sizetab, array(size, c(length(list))));
  110. }
  111. }
  112. return(
  113. data.frame(gflops=meantab, size=sizetab, grain=array(grain, c(length(meantab)) ))
  114. # meantab
  115. );
  116. }
  117. handle_grain_mean <- function(grain)
  118. {
  119. meantab <- NULL;
  120. sizetab <- NULL;
  121. for (size in sizelist) {
  122. list <- mean(handle_size(size, grain));
  123. if (!is.na(list))
  124. {
  125. meantab <- c(meantab, list);
  126. sizetab <- c(sizetab, array(size, c(length(list))));
  127. }
  128. }
  129. return(
  130. data.frame(gflops=meantab, size=sizetab, grain=array(grain, c(length(meantab)) ))
  131. # meantab
  132. );
  133. }
  134. trace_grain <- function(grain, color, style)
  135. {
  136. # points(handle_grain(grain)$size, handle_grain(grain)$gflops, col=color);
  137. pouet <- handle_grain_mean(grain);
  138. pouetgflops <- pouet$gflops;
  139. pouetsize <- pouet$size;
  140. lines(pouetsize, pouetgflops, col=color, legend.text=TRUE, type = "o", pch = style, lwd=2);
  141. pouet <- handle_grain_mean_nm(grain);
  142. pouetgflops <- pouet$gflops;
  143. pouetsize <- pouet$size;
  144. lines(pouetsize, pouetgflops, col=color, legend.text=TRUE, type = "o", pch = style, lwd=1);
  145. }
  146. display_grain <- function()
  147. {
  148. xlist <- range(sizelist);
  149. ylist <- range(c(0,100));
  150. plot.new();
  151. plot.window(xlist, ylist, log="");
  152. i <- 0;
  153. colarray <- c("magenta", "blue", "peru", "green3", "navy", "red", "green2", "black", "orange");
  154. for (grain in grainlist) {
  155. trace_grain(grain, colarray[i+1], -1);
  156. i <- i + 1;
  157. }
  158. #axis(1, at=seq(0, max*1024, 1024), log="x")
  159. axis(1)
  160. axis(2, at=seq(0, 100, 10), tck=1)
  161. # axis(4, at=seq(0, 100, 10))
  162. box(bty="u")
  163. labels <- c("256", "256 no model", "512", "512 no model", "1024", "1024 no model");
  164. legend("bottomright", inset=.05, title="Tile size", labels, lwd=2, lty=c(1, 1, 1, 1, 1, 1), pch=-1, col=c("magenta", "magenta", "blue", "blue", "peru", "peru"), bty="y", bg="white")
  165. mtext("matrix size", side=1, line=2, cex=1.6)
  166. mtext("GFlops", side=2, line=2, las=0, cex=1.6)
  167. title("Effect of granularity on the impact of scheduling");
  168. }
  169. display_grain()
  170. # boxplot(result, col=c("yellow", "red", "green"), xlab=sizelist);
  171. # plot(c(sizelist,sizelist,sizelist), c(result_greedy, result_prio, result_dm));
  172. # plot(sizelist, result_dm);
  173. # plot.new()
  174. # plot.window(range(c(sizelist,0) ), c(0, 6))