public static void MPIKaratsubaMaster(Polynomial polynomial1, Polynomial polynomial2)
        {
            DateTime start = DateTime.Now;

            Polynomial result = new Polynomial(polynomial1.Degree * 2);

            if (Communicator.world.Size == 1)
            {
                result = PolynomialOperations.AsynchronousKaratsubaMultiply(polynomial1, polynomial2);
            }
            else
            {
                Communicator.world.Send <int>(0, 1, 0);
                Communicator.world.Send <int[]>(polynomial1.Coefficients, 1, 0);
                Communicator.world.Send <int[]>(polynomial2.Coefficients, 1, 0);
                if (Communicator.world.Size == 2)
                {
                    Communicator.world.Send <int[]>(new int[0], 1, 0);
                }
                else
                {
                    Communicator.world.Send <int[]>(Enumerable.Range(2, Communicator.world.Size - 2).ToArray(), 1, 0);
                }

                int[] coefs = Communicator.world.Receive <int[]>(1, 0);
                result.Coefficients = coefs;
            }

            double time = (DateTime.Now - start).Milliseconds;

            Console.WriteLine("MPI  Karatsuba: " + result.ToString() + "\n" + "TIME: " + time.ToString() + " milliseconds");
        }
        public static void MPIMultiplicationWorker()
        {
            //Console.WriteLine("Child");
            Polynomial polynomial1 = Communicator.world.Receive <Polynomial>(0, 0);
            Polynomial polynomial2 = Communicator.world.Receive <Polynomial>(0, 0);

            int begin = Communicator.world.Receive <int>(0, 0);
            int end   = Communicator.world.Receive <int>(0, 0);

            Polynomial result = PolynomialOperations.MPIMultiply(polynomial1, polynomial2, begin, end);

            Communicator.world.Send(result, 0, 0);
        }
 public static void MPIKaratsubaWorker()
 {
     PolynomialOperations.MPIKaratsubaMultiply();
 }