Ich habe ein wenig über Parallelität in den letzten Tagen gelernt, und ich bin auf this Beispiel gestoßen.Warum war die parallele Version in diesem Beispiel langsamer als die sequenzielle Version?
Ich habe es Seite mit einem sequentiellen for-Schleife wie folgt Seite:
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);
}
Ich war überrascht zu sehen, dass die NOPARALLEL Verfahren abgeschlossen Weise viel schneller als das parallel Beispiel an der Stelle gegeben.
Ich habe einen i5 PC.
Ich dachte wirklich, dass die Parallel-Methode schneller beenden würde.
Gibt es eine vernünftige Erklärung dafür? Vielleicht habe ich etwas falsch verstanden?
Können Sie bestätigen, dass die parallele Version lief tatsächlich auf mehreren Kernen? Und was passiert, wenn Sie die Anzahl der Iterationen erhöhen (größere 'Range')? – chrisaycock
Unter der Annahme, dass die parallele Version auf mehreren Kernen ausgeführt wurde, kann es Ihnen einfach zeigen, wie viel Overhead-Thread-Synchronisierung haben kann ... besonders in einem trivialen Stück Code. – Oded
Um Mark Twain zu paraphrasieren; * "Es gibt Lügen, verdammte Lügen, Statistiken und Benchmarks ..." * –