public MergeHCNodePQ(IMHComputeNode <T> root)
        {
            Queue <IMHComputeNode <T> > prevLevel = new Queue <IMHComputeNode <T> >();

            prevLevel.Enqueue(root);
            Queue <IMHComputeNode <T> > nextLevel = new Queue <IMHComputeNode <T> >();

            topologicalOrder_ = new ParallelStack <IMHComputeNode <T> >();
            flags_            = new Dictionary <IMHComputeNode <T>, Task>();

            // Topological ordering
            while (true)
            {
                foreach (IMHComputeNode <T> parent in prevLevel)
                {
                    foreach (IMHComputeNode <T> n in parent.GetChildren())
                    {
                        nextLevel.Enqueue(n);
                    }
                    topologicalOrder_.Put(parent);        // this is for topological order.
                    flags_[parent] = new Task(() => { }); // Empty task for waiting.
                }
                if (nextLevel.Count == 0)
                {
                    break;
                }
                prevLevel = nextLevel;
                nextLevel = new Queue <IMHComputeNode <T> >();
            }
        }
Esempio n. 2
0
        private void Form1_Load(object sender, EventArgs e)
        {
            label3.Text = "Dunno lol";
            label4.Text = ParallelArrays.MaximumArrayDimensions[0].ToString() + "x" + ParallelArrays.MaximumArrayDimensions[1].ToString();



            for (int mwidth = 10; mwidth < 4000; mwidth += 10)
            {
                float[] test = new float[mwidth];

                ParallelStack stk   = new ParallelStack();
                Stack <float> stack = new Stack <float>();

                System.Diagnostics.Stopwatch perf = new System.Diagnostics.Stopwatch();

                //GPU
                perf.Start();
                stk.PushN(test);
                stk.PopN(mwidth);
                perf.Stop();
                label10.Text   = perf.ElapsedMilliseconds.ToString();
                textBox2.Text += label10.Text + "\r\n";
                //

                perf.Reset();

                //CPU
                perf.Start();
                for (float i = 0.0f; i < 1000 * mwidth; i = i + 1.0f)
                {
                    stack.Push(i);
                }
                for (float i = 0.0f; i < 1000 * mwidth; i = i + 1.0f)
                {
                    stack.Pop();
                }
                perf.Stop();
                label6.Text    = perf.ElapsedMilliseconds.ToString();
                textBox1.Text += label6.Text + "\r\n";
                //

                Application.DoEvents();
            }
            int popopo = 45;
        }
Esempio n. 3
0
        public override void Invoke()
        {
            var buffer = new StringBuilder(42 * 1000);
            var maxThreadIdsToDisplay = (DisplayThreadIDsCountLimit.HasValue) ? DisplayThreadIDsCountLimit.Value : 4;
            var visitor = new TextRenderer(buffer, maxThreadIdsToDisplay);
            var ps      = ParallelStack.Build(Runtime);

            WriteLine("");
            foreach (var stack in ps.Stacks)
            {
                WriteLine("________________________________________________");
                stack.Render(visitor);
                WriteLine(buffer.ToString());
                WriteLine("");
                WriteLine("");
                WriteLine("");
            }

            WriteLine($"==> {ps.ThreadIds.Count} threads with {ps.Stacks.Count} roots{Environment.NewLine}");
        }
        private static void OnParallelStacks(ClrRuntime runtime, string args)
        {
            var ps = ParallelStack.Build(runtime);

            if (ps == null)
            {
                return;
            }

            // display parallel stacks
            Console.WriteLine();
            foreach (var stack in ps.Stacks)
            {
                Console.Write("________________________________________________");
                stack.WriteToConsole(useDml: true);
                Console.WriteLine();
                Console.WriteLine();
                Console.WriteLine();
            }

            Console.WriteLine($"==> {ps.ThreadIds.Count} threads with {ps.Stacks.Count} roots{Environment.NewLine}");
        }
 public abstract void EnterRender(ParallelStack stacks);