Exemple #1
0
        static void TestSendReceive(Communicator communicator, string[] args)
        {
            Console.WriteLine($"I am alive! Rank {communicator.Rank}");

            if (communicator.Rank == 0)
            {
                //Read data
                Jacoby jacoby = EquationReader.ReadJacoby(args[0], args[1], double.Parse(args[2]));

                //Send data
                for (int workerIndex = 1; workerIndex < communicator.Size; workerIndex++)
                {
                    communicator.Send(jacoby, workerIndex, (int)JacobyMessageType.JacobyMessage);
                }
            }
            else
            {
                var jacoby = communicator.Receive <Jacoby>(0, (int)JacobyMessageType.JacobyMessage);
                var result = jacoby.SolveSingleThread();
                foreach (var val in result)
                {
                    Console.WriteLine($"I, worker of rank {communicator.Rank} calculate {val}");
                }
            }
        }
Exemple #2
0
        static void DoParallelJacoby(string[] args)
        {
            MPI.Environment.Run(ref args, communicator =>
            {
                Console.WriteLine($"{communicator.Rank} birthday!");

                var isMaster = communicator.Rank == 0;

                if (isMaster)
                {
                    double[] result = null;

                    using (var performanceCounter = new PerformanceCounter("Master. Total duration: "))
                    {
                        Jacoby jacoby = null;

                        using (var perfRead = new PerformanceCounter("Master. Jacoby reading time: "))
                        {
                            jacoby = EquationReader.ReadJacoby(args[0], args[1], double.Parse(args[2]));
                        }

                        using (var perfWork = new PerformanceCounter("Master. Work duration: "))
                        {
                            result = jacoby.MPIHead(communicator);
                            //double[] result = jacoby.SolveSingleThreadDebug(2);
                        }
                    }

                    if (result == null)
                    {
                        throw new Exception("Result is null");
                    }

                    EquationWriter.Write(result, args[3]);
                }
                else
                {
                    using (var perfCounter = new PerformanceCounter($"Worker {communicator.Rank} total lifetime: "))
                    {
                        Jacoby.MPIWorker(communicator);
                    }
                }
            });
        }