static Task <double> RunReference(string[] args) { //TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out); //Debug.Listeners.Add(tr1); #if DEBUG string workerDir = @"C:\temp\azworker-tmp"; #else string workerDir = Path.Combine(Environment.GetEnvironmentVariable(SharedDirEnvVariableName), Environment.GetEnvironmentVariable(JobIdEnvVariableName)); #endif string normalFilePath = Path.Combine(workerDir, PerformanceCoefficientFileName); string refJsonPath = Path.Combine(workerDir, "reference.json"); if (!File.Exists(refJsonPath)) { //no reference experiment Trace.WriteLine("Reference.json not found, assuming normal 1.0."); File.WriteAllText(normalFilePath, "1.0"); return(Task.FromResult(1.0)); } var exp = ParseReferenceExperiment(refJsonPath); var pathForBenchmarks = Path.Combine(workerDir, "refdata", "data"); var execPath = Path.Combine(workerDir, "refdata", exp.Definition.Executable); Domain domain = ResolveDomain(exp.Definition.DomainName); string[] benchmarks = Directory.EnumerateFiles(pathForBenchmarks).Select(fn => Path.Combine(pathForBenchmarks, fn)).ToArray(); Trace.WriteLine(string.Format("Found {0} benchmarks in folder {1}", benchmarks.Length, pathForBenchmarks)); BenchmarkResult[] results = new BenchmarkResult[benchmarks.Length]; for (int i = 0; i < benchmarks.Length; ++i) { Trace.WriteLine(string.Format("Processing reference file {0}", benchmarks[i])); results[i] = LocalExperimentRunner.RunBenchmark( -1, execPath, exp.Definition.Parameters, "ref", benchmarks[i], exp.Repetitions, exp.Definition.BenchmarkTimeout, exp.Definition.MemoryLimitMB, null, null, domain, 1.0); } var totalRuntime = results.Sum(r => r.NormalizedCPUTime); if (totalRuntime <= 0.0) { totalRuntime = 0.1; } double normal = exp.ReferenceValue / totalRuntime; Console.WriteLine("Reference data: " + normal.ToString()); File.WriteAllText(normalFilePath, normal.ToString()); return(Task.FromResult(normal)); }