Ejemplo n.º 1
0
        public async Task FindExperiments()
        {
            ExperimentDefinition def1 = ExperimentDefinition.Create("LinearEquationSolver.exe", ExperimentDefinition.LocalDiskContainerUri, "benchmarks_2", "csv", "{0} 1", TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(0), "default", category: "IdentitySquare");
            ExperimentDefinition def2 = ExperimentDefinition.Create("LinearEquationSolver.exe", ExperimentDefinition.LocalDiskContainerUri, "benchmarks_2", "csv", "{0} 2", TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(0), "default", category: "IdentitySquare");

            ExperimentManager manager = NewManager();

            var e1 = await manager.StartExperiment(def1);

            var e2 = await manager.StartExperiment(def1);

            var e4 = await manager.StartExperiment(def2);

            var r1 = await Task.WhenAll(manager.GetResults(e1));

            var r2 = await Task.WhenAll(manager.GetResults(e2));

            var r4 = await Task.WhenAll(manager.GetResults(e4));

            var loaded = (await manager.FindExperiments()).ToArray();

            Assert.AreEqual(3, loaded.Length, "Number of found experiments (same manager)");

            var manager2 = OpenManager(manager);
            var loaded2  = (await manager2.FindExperiments()).ToArray();

            Assert.AreEqual(3, loaded2.Length, "Number of found experiments (reloaded)");

            var loaded3 = (await manager2.FindExperiments(new ExperimentManager.ExperimentFilter {
                ParametersEquals = "{0} 2"
            })).ToArray();

            Assert.AreEqual(1, loaded3.Length, "Number of found experiments (reloaded, filtered)");
        }
Ejemplo n.º 2
0
        private async void RefreshItemsAsync()
        {
            var handle = ui.StartIndicateLongOperation("Loading table of experiments...");

            try
            {
                var exp = await Task.Run(() => manager.FindExperiments());

                allExperiments = exp.Select(e => new ExperimentStatusViewModel(e, manager, ui)).ToArray();
                Items          = FilterExperiments(allExperiments, keyword);
            }
            catch (Exception ex)
            {
                ui.ShowError(ex, "Failed to load experiments list");
            }
            finally
            {
                ui.StopIndicateLongOperation(handle);
            }

            List <ExperimentStatusViewModel> items = new List <ExperimentStatusViewModel>();

            try
            {
                var now = DateTime.Now;
                foreach (var vm in allExperiments)
                {
                    if (now.Subtract(vm.Submitted).TotalDays > 7)
                    {
                        break;
                    }
                    vm.JobStatus = ExperimentExecutionStateVM.Loading;
                    items.Add(vm);
                }

                var states = await Task.Run(() => manager.GetExperimentJobState(items.Select(item => item.ID)));

                int n = Math.Min(states.Length, items.Count);
                for (int i = 0; i < n; i++)
                {
                    items[i].JobStatus = (ExperimentExecutionStateVM)states[i];
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine("Failed to get status of jobs: " + ex);
                foreach (var item in items)
                {
                    item.JobStatus = null;
                }
            }
        }
Ejemplo n.º 3
0
        static async Task Run(ExperimentManager manager, ExperimentDefinition definition)
        {
            int id = await manager.StartExperiment(definition);

            var results = manager.GetResults(id);
            var filter  = new ExperimentManager.ExperimentFilter
            {
                BenchmarkContainerEquals = definition.BenchmarkDirectory,
                CategoryEquals           = definition.Category,
                ExecutableEquals         = definition.Executable,
                ParametersEquals         = definition.Parameters
            };
            var history = (await manager.FindExperiments(filter)).Where(q => q.ID != id).ToArray();
            Dictionary <string, BenchmarkResult> lastBenchmarks = new Dictionary <string, BenchmarkResult>();

            if (history.Length != 0)
            {
                var lastResults = await manager.GetResults(history.Max(e => e.ID));

                foreach (var b in lastResults.Benchmarks)
                {
                    lastBenchmarks[b.BenchmarkFileName] = b;
                }
            }

            var print = results.ContinueWith(task =>
            {
                if (task.IsFaulted)
                {
                    PrintError(String.Format("Failed to complete benchmarks {0}", task.Exception.Message));
                    return;
                }
                BenchmarkResult[] benchmarks = task.Result.Benchmarks;
                foreach (var benchmark in benchmarks)
                {
                    BenchmarkResult lastBenchmark = null;
                    lastBenchmarks.TryGetValue(benchmark.BenchmarkFileName, out lastBenchmark);
                    if (lastBenchmark != null && lastBenchmark.Status != Measurement.ResultStatus.Success)
                    {
                        lastBenchmark = null;
                    }
                    PrintBenchmark(benchmark, lastBenchmark);
                }
            });
            await print;
        }