He estado aprendiendo un poco sobre el paralelismo en los últimos días, y me encontré con el ejemplo this.¿Por qué la versión paralela fue más lenta que la versión secuencial en este ejemplo?
lo puse de lado a lado con una secuencia de bucle de la siguiente manera:
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);
}
Me sorprendió ver que el método NOPARALLEL terminó modo mucho más rápido que el ejemplo dado en paralelo en el sitio.
Tengo una PC i5.
Realmente pensé que el método Paralelo terminaría más rápido.
¿Hay una explicación razonable para esto? ¿Tal vez malentendí algo?
¿Puede confirmar que la versión paralela funcionó con varios núcleos? ¿Y qué ocurre cuando aumenta el número de iteraciones (mayor "Rango")? – chrisaycock
Asumiendo que la versión paralela se ejecutó en múltiples núcleos, simplemente puede mostrar cuánto puede tener la sincronización de subprocesos ... especialmente en una pieza trivial de código. – Oded
Parafraseando a Mark Twain; * "Hay mentiras, malditas mentiras, estadísticas y puntos de referencia ..." * –