private models.Run Iteration(string benchmark, int iteration, bool isDryRun) { var dryRun = isDryRun ? " dryrun" : ""; Logging.GetLogging().InfoFormat("Benchmarker | Benchmark{0} \"{1}\": start iteration {2}", dryRun, benchmark, iteration); GC.Collect(1); System.Threading.Thread.Sleep(5 * 1000); // cool down? var sw = Stopwatch.StartNew(); switch (benchmark) { case "bh": BH.Main(new string[] { "-b", "400", "-s", "200" }, Logging.GetLogging()); break; case "binarytree": BinaryTrees.Main(new string[] { "17" }, Logging.GetLogging()); break; case "bisort": BiSort.Main(new string[] { "-s", "1500000" }, Logging.GetLogging()); break; case "euler": Euler.Main(new string[] { }, Logging.GetLogging()); break; case "except": except.Main(new string[] { "500000" }, Logging.GetLogging()); break; case "gcbridge-links": GcBridge.Main(new string[] { benchmark }, Logging.GetLogging()); break; case "gcbridge-linkedfan": GcBridge.Main(new string[] { benchmark }, Logging.GetLogging()); break; case "gcbridge-inversefan": GcBridge.Main(new string[] { benchmark }, Logging.GetLogging()); break; case "gcbridge-deadlist": GcBridge.Main(new string[] { benchmark }, Logging.GetLogging()); break; case "gcbridge-selflinks": GcBridge.Main(new string[] { benchmark }, Logging.GetLogging()); break; case "gcbridge-spider": GcBridge.Main(new string[] { benchmark }, Logging.GetLogging()); break; case "gcbridge-doublefan-1000": GcBridge.Main(new string[] { benchmark }, Logging.GetLogging()); break; case "gcbridge-doublefan-4000": GcBridge.Main(new string[] { benchmark }, Logging.GetLogging()); break; case "grandetracer": RayTracer.Main(new string[] { }, Logging.GetLogging()); break; case "graph4": graph4.Node.Main(Logging.GetLogging()); break; case "graph8": graph8.Node.Main(Logging.GetLogging()); break; case "hash3": Hash3.Main(new string[] { "400000" }, Logging.GetLogging()); break; case "health": Health.Main(new string[] { "-l", "10", "-t", "16" }, Logging.GetLogging()); break; case "lists": Lists.Main(new string[] { "1000" }, Logging.GetLogging()); break; case "mandelbrot": Mandelbrot.Main(new string[] { "1500" }, Logging.GetLogging()); break; case "n-body": NBody.Main(new string[] { "400000" }, Logging.GetLogging()); break; case "objinst": Objinst.Main(new string[] { "4000000" }, Logging.GetLogging()); break; case "onelist": OneList.Main(); break; case "perimeter": Perimeter.Main(new string[] { "-l", "17" }, Logging.GetLogging()); break; case "raytracer2": RayTracer2.Main(new string[] { "120" }, Logging.GetLogging()); break; case "raytracer3": RayTracer3.Main(new string[] { "120" }, Logging.GetLogging()); break; case "scimark-fft": ScimarkEntrypoint.Main(new string[] { "fft" }, Logging.GetLogging()); break; case "scimark-sor": ScimarkEntrypoint.Main(new string[] { "sor" }, Logging.GetLogging()); break; case "scimark-mc": ScimarkEntrypoint.Main(new string[] { "mc" }, Logging.GetLogging()); break; case "scimark-mm": ScimarkEntrypoint.Main(new string[] { "mm" }, Logging.GetLogging()); break; case "scimark-lu": ScimarkEntrypoint.Main(new string[] { "lu" }, Logging.GetLogging()); break; case "specraytracer": MainCL.Main(new string[] { "200", "1250" }, Logging.GetLogging()); break; case "strcat": strcat.Main(new string[] { "40000000" }); break; default: throw new NotImplementedException(); } sw.Stop(); Logging.GetLogging().InfoFormat("Benchmarker | Benchmark{0} \"{1}\": finished iteration {2}, took {3}ms", dryRun, benchmark, iteration, sw.ElapsedMilliseconds); var run = new models.Run { Benchmark = new models.Benchmark { Name = benchmark } }; run.RunMetrics.Add( new models.RunMetric { Metric = models.RunMetric.MetricType.Time, Value = TimeSpan.FromMilliseconds(sw.ElapsedMilliseconds) } ); return(run); }