/// <summary> /// Creates the execution plan. /// </summary> /// <param name="project">The whole project from which the standard execution plan will be built.</param> /// <param name="initNodes">Ordered list of new nodes from which the initialization plan will be built.</param> /// <returns>The created execution plan.</returns> public MyExecutionPlan CreateExecutionPlan(MyProject project, IEnumerable <MyWorkingNode> initNodes = null) { MyExecutionPlan executionPlan = new MyExecutionPlan(); IMyOrderingAlgorithm ordering = new MyHierarchicalOrdering(); ordering.EvaluateOrder(project.Network); var initBlocks = new List <IMyExecutable>(); if (initNodes != null) { initBlocks.AddRange(initNodes.Select(node => CreateNodeExecutionPlan(node, true))); } executionPlan.InitStepPlan = new MyExecutionBlock(initBlocks.ToArray()) { Name = "Initialization" }; executionPlan.StandardStepPlan = new MyExecutionBlock( CreateNodeExecutionPlan(project.World, false), CreateNodeExecutionPlan(project.Network, false)) { Name = "Simulation" }; return(executionPlan); }
public void Schedule(MyProject project) { MyExecutionPlan singleCoreExecutionPlan = ExecutionPlanner.CreateExecutionPlan(project); ExecutionPlan = PartitioningStrategy.Divide(singleCoreExecutionPlan); //TODO: remove this and replace with proper project traversal to find nodes with no tasks! ExtractPartitioningFromExecutionPlan(); }
/// <summary> /// Performs partitioning /// </summary> /// <param name="executionPlan">Generic execution plan</param> /// <returns>Execution plans for all GPUs</returns> public MyExecutionPlan[] Divide(MyExecutionPlan executionPlan) { MyExecutionBlock.IteratorAction setGpuAction = delegate(IMyExecutable e) { if (e is MyTask) { (e as MyTask).GenericOwner.GPU = selected; } }; executionPlan.InitStepPlan.Iterate(true, setGpuAction); executionPlan.StandardStepPlan.Iterate(true, setGpuAction); MyExecutionPlan[] partitioning = new MyExecutionPlan[numOfPieces]; for (int i = 0; i < numOfPieces; i++) { if (i == selected) { partitioning[i] = executionPlan; } else { partitioning[i] = new MyExecutionPlan() { InitStepPlan = new MyExecutionBlock() { Name = executionPlan.InitStepPlan.Name }, StandardStepPlan = new MyExecutionBlock() { Name = executionPlan.StandardStepPlan.Name } }; } } for (int i = 0; i < numOfPieces; i++) { partitioning[i].InitStepPlan.Name += " (GPU " + i + ")"; partitioning[i].StandardStepPlan.Name += " (GPU " + i + ")"; } return(partitioning); }
public MyExecutionPlan CreateExecutionPlan(MyProject project) { MyExecutionPlan executionPlan = new MyExecutionPlan(); IMyOrderingAlgorithm ordering = new MyHierarchicalOrdering(); ordering.EvaluateOrder(project.Network); executionPlan.InitStepPlan = new MyExecutionBlock( CreateNodeExecutionPlan(project.World, true), CreateNodeExecutionPlan(project.Network, true)); executionPlan.InitStepPlan.Name = "Initialization"; executionPlan.StandardStepPlan = new MyExecutionBlock( CreateNodeExecutionPlan(project.World, false), CreateNodeExecutionPlan(project.Network, false)); executionPlan.StandardStepPlan.Name = "Simulation"; return(executionPlan); }
public MyExecutionPlan CreateExecutionPlan(MyProject project) { MyExecutionPlan executionPlan = new MyExecutionPlan(); IMyOrderingAlgorithm ordering = new MyHierarchicalOrdering(); ordering.EvaluateOrder(project.Network); executionPlan.InitStepPlan = new MyExecutionBlock( CreateNodeExecutionPlan(project.World, true), CreateNodeExecutionPlan(project.Network, true)); executionPlan.InitStepPlan.Name = "Initialization"; executionPlan.StandardStepPlan = new MyExecutionBlock( CreateNodeExecutionPlan(project.World, false), CreateNodeExecutionPlan(project.Network, false)); executionPlan.StandardStepPlan.Name = "Simulation"; return executionPlan; }
/// <summary> /// Creates the execution plan. /// </summary> /// <param name="project">The whole project from which the standard execution plan will be built.</param> /// <param name="initNodes">Ordered list of new nodes from which the initialization plan will be built.</param> /// <returns>The created execution plan.</returns> public MyExecutionPlan CreateExecutionPlan(MyProject project, IEnumerable<MyWorkingNode> initNodes = null) { MyExecutionPlan executionPlan = new MyExecutionPlan(); IMyOrderingAlgorithm ordering = new MyHierarchicalOrdering(); ordering.EvaluateOrder(project.Network); var initBlocks = new List<IMyExecutable>(); if (initNodes != null) initBlocks.AddRange(initNodes.Select(node => CreateNodeExecutionPlan(node, true))); executionPlan.InitStepPlan = new MyExecutionBlock(initBlocks.ToArray()); executionPlan.InitStepPlan.Name = "Initialization"; executionPlan.StandardStepPlan = new MyExecutionBlock( CreateNodeExecutionPlan(project.World, false), CreateNodeExecutionPlan(project.Network, false)); executionPlan.StandardStepPlan.Name = "Simulation"; return executionPlan; }