Necesito paralelizar un método que hace una comparación por pares exhaustiva de los elementos en una lista. La implementación en serie es sencilla:Nested Parallel.ForEach Loops en la misma lista?
foreach (var element1 in list)
foreach (var element2 in list)
foo(element1, element2);
En este caso, foo no modificará el estado de element1 o element2. Yo sé que no es seguro es simplemente hacer declaraciones Parallel.ForEach anidados:
Parallel.ForEach(list, delegate(A element1)
{
Parallel.ForEach(list, delegate(A element2)
{
foo(element1, element2);
});
});
¿Cuál puede ser la forma ideal para poner en práctica esta usando la biblioteca de tareas en paralelo?
No asuma que PFX creará tantos hilos ya que hay tareas paralelas, es más inteligente que eso. –
Por supuesto que no. Por defecto, crea tantos hilos como núcleos. Pero el problema es que después de cada iteración, perderá tiempo tratando de encontrar qué hilo debe ejecutar la siguiente iteración. –
no creo que está diciendo que no va a haber muchos hilos que, al igual que encolamos una tarea para cada llamada a la función va a tener mucho más espacio que los simplemente invocando el motor PFX para cada bucle externo. – Gabe