Ho imparato un po 'di parallelismo negli ultimi giorni e ho trovato l'esempio this.Perché la versione parallela è stata più lenta della versione sequenziale in questo esempio?
lo metto un lato all'altro con un sequenziale per ciclo come questo:
private static void NoParallelTest()
{
int[] nums = Enumerable.Range(0, 1000000).ToArray();
long total = 0;
var watch = Stopwatch.StartNew();
for (int i = 0; i < nums.Length; i++)
{
total += nums[i];
}
Console.WriteLine("NoParallel");
Console.WriteLine(watch.ElapsedMilliseconds);
Console.WriteLine("The total is {0}", total);
}
Sono stato sorpreso di vedere che il metodo NOPARALLEL finito modo modo più veloce rispetto all'esempio parallelo data sul sito.
Ho un PC i5.
Ho davvero pensato che il metodo Parallelo sarebbe finito più velocemente.
Esiste una spiegazione ragionevole per questo? Forse ho frainteso qualcosa?
Può confermare che la versione parallela in realtà riceve più core? E cosa succede quando aumenti il numero di iterazioni (più grande 'Range')? – chrisaycock
Supponendo che la versione parallela sia stata eseguita su più core, può semplicemente mostrare quanta sincronizzazione di thread overhead può avere ... specialmente in una piccola parte di codice. – Oded
Per parafrasare Mark Twain; * "Ci sono bugie, maledette bugie, statistiche e benchmark ..." * –