コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        /// <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;
        }