예제 #1
0
        public static int[] FindAllPrimesUnder(int n)
        {
            if (n <= 1024)
            {
                throw new Exception("Input too small to compuate in parallel.");
            }
            ComputeNode rootNode    = new ComputeNode(2, n);
            var         listOftasks = new Queue <Task <SortedSet <int> > >();

            rootNode.AddAllLeafTasks(listOftasks);

            Console.WriteLine($"List of Tasks count: {listOftasks.Count}");

            var taskRunner = new BagBasedTaskRunner <SortedSet <int> >(listOftasks);

            taskRunner.RunParallel();

            List <int> primes = new List <int>();

            foreach (SortedSet <int> batch in taskRunner.results_)
            {
                foreach (int prime in batch)
                {
                    primes.Add(prime);
                }
            }
            primes.Sort();

            return(primes.ToArray());
        }
예제 #2
0
 /// <summary>
 ///     Branch all the way until base tasks
 ///     * Branching must be symmetrical.
 /// </summary>
 protected void Branch()
 {
     if (_end - _start >= ComputeNode.BaseTaskSize)
     {
         int mid = (_start + _end) / 2;
         _left  = new ComputeNode(_start, mid);
         _right = new ComputeNode(mid, _end);
     }
     // Base task, leaf node, do nothing.
 }
예제 #3
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            int n = 0b1_00000_00000_00000_00000_00000_00000;

            int[]         primes = ComputeNode.FindAllPrimesUnder(n);
            StringBuilder sb     = new StringBuilder();

            foreach (int I in primes)
            {
                sb.Append($"{I},");
            }


            using (StreamWriter sw = new StreamWriter("Prime Number.txt"))
            {
                sw.Write(sb.ToString());
            }

            Console.WriteLine(sb.ToString());
        }