public override void Run(ModelLoaderInterface loader) { parallelMode = ParallelMode.RealTime; Factory.SysLog.RegisterRealTime("RealTime", GetDefaultLogConfig()); // This creates the config if not exists. Factory.SysLog.RegisterHistorical("Historical", HistoricalStarter.GetDefaultLogConfig()); // This creates the config if not exists. Factory.SysLog.ReconfigureForRealTime(); base.Run(loader); }
public override void Run(ModelLoaderInterface loader) { Factory.Parallel.SetMode(parallelMode); Factory.SysLog.RegisterHistorical("Optimize", HistoricalStarter.GetDefaultLogConfig()); try { if (loader.OptimizeOutput == null) { Directory.CreateDirectory(Path.GetDirectoryName(FileName)); File.Delete(FileName); } } catch (Exception ex) { log.Error("Error while creating directory and deleting '" + FileName + "'.", ex); return; } this.loader = loader; this.loader.QuietMode = true; startMillis = Factory.TickCount; engineIterations = new List <TickEngine>(); loader.OnInitialize(ProjectProperties); totalTasks = 0; foreach (var num in RecursiveOptimize(0)) { totalTasks++; } tasksRemaining = totalTasks; int tasksPerEngine = CalculateTasksPerEngine(totalTasks); int totalEngineCount = totalTasks / tasksPerEngine; int iterations = Math.Max(1, totalTasks / maxParallelPasses); int leftOverPasses = Math.Max(0, totalTasks - (maxParallelPasses * iterations)); if (totalTasks % maxParallelPasses > 0) { log.Notice("Planning " + iterations + " iterations with " + maxParallelPasses + " passes plus 1 pass with " + leftOverPasses + " iterations."); totalEngineCount++; } else { log.Notice("Planning " + iterations + " iterations with " + maxParallelPasses + " passes each."); } var engines = new Stack <TickEngine>(); for (int i = 0; i < totalEngineCount; i++) { engines.Push(SetupEngine(true, "Iteration" + (i + 1))); } ModelInterface topModel = new Portfolio(); passCount = 0; foreach (var num in RecursiveOptimize(0)) { ModelInterface model = ProcessLoader(loader, passCount); topModel.Chain.Dependencies.Add(model.Chain); passCount++; if (passCount % tasksPerEngine == 0) { var engine = engines.Pop(); engine.Model = topModel; engine.QueueTask(); engineIterations.Add(engine); topModel = new Portfolio(); if (engineIterations.Count >= Environment.ProcessorCount) { ProcessIteration(); } } } if (topModel.Chain.Dependencies.Count > 0) { var engine = ProcessHistorical(topModel, true, "Iteration" + (engineIterations.Count + 1)); engine.QueueTask(); engineIterations.Add(engine); } if (engineIterations.Count > 0) { ProcessIteration(); } long elapsedMillis = Factory.TickCount - startMillis; log.Notice("Finished optimizing in " + elapsedMillis + "ms."); }