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); }
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)); }