示例#1
0
        private static LongParallelWork.WorkResult RunPiTask(int parallelFactor, int piDigits, int numberOfRepetitions)
        {
            // Tempo ideal de cada batch, em segundos
            const double batchTime = 1;

            // Tamanho (inicial) de cada batch
            const int batchSize = 10;

            LongParallelWork.WorkResult workDone = LongParallelWork.DoWork(
                i => PiCalculation.GetPi(piDigits), numberOfRepetitions, parallelFactor, batchTime, batchSize,
                (i, ts) =>
            {
                Console.WriteLine("    Progresso: {0:HH:mm:ss} - Feito {1:N0} em {2:N1}s...", DateTime.Now, i,
                                  ts.TotalSeconds);
                if (Console.KeyAvailable)
                {
                    ConsoleKeyInfo ck = Console.ReadKey(true);
                    return(ck.Key != ConsoleKey.Escape);
                }
                return(true);
            },
                s => Console.WriteLine("    {0}", s));

            return(workDone);
        }
示例#2
0
        private static string Run(int piDigits, int numberOfRepetitions)
        {
            var executionTimesHard = new List <RunResult>();

            for (int i = 0; i < 5; ++i)
            {
                Console.WriteLine();
                Console.WriteLine("Iniciando para {0} digitos de Pi, {1} de 5...", piDigits, i + 1);
                for (int paralleFactor = 0; paralleFactor <= Environment.ProcessorCount * 1.5; ++paralleFactor)
                {
                    LongParallelWork.WorkResult workDone = RunPiTask(paralleFactor, piDigits, numberOfRepetitions);
                    if (workDone.Aborted)
                    {
                        return(string.Empty);
                    }
                    executionTimesHard.Add(new RunResult(paralleFactor, workDone.TimeTaken.TotalSeconds));
                    Console.WriteLine();
                }
            }
            List <RunResult> averaged = GetAverage(executionTimesHard).ToList();

            return(GetDiagnostic(averaged));
        }