Creo que el documento que cita tiene una descripción bastante buena de lo que se considera una asignación de trabajo estática: a cada trabajador "se le asigna un rango de iteración fijo". Para 4 trabajadores, esto significaría que a la primera se le asignó iter
1: 250, la segunda iter
251: 500, ... o la 1: 4: 100 para la primera, 2: 4: 1000 para la segunda y así sucesivamente.
No dijo exactamente lo que observa, pero lo que describe es coherente con la distribución dinámica de carga de trabajo: Primero, los cuatro (ejemplo) trabajadores trabajan en uno iter
cada uno, el primero que termina trabaja en un quinto, el siguiente que está hecho (que bien puede ser lo mismo si tres de los primeros cuatro toman algo más de tiempo) funciona en un sexto, y así sucesivamente. Ahora bien, si sus valores atípicos son los números 20, 850 y 900 en el orden en que MATLAB elige procesar las iteraciones de bucle y cada uno toma 100 veces más, esto significa que las iteraciones 21 a 320 serán resueltas por tres de los cuatro trabajadores mientras que una ocupado con el vigésimo (por 320 se hará, ahora suponiendo una distribución más o menos uniforme del tiempo de cálculo no atípico). Sin embargo, el trabajador al que se le asignó la iteración número 850 continuará ejecutándose incluso después de que otro haya resuelto el n. ° 1000 y el mismo para el n. ° 900. De hecho, si hubo aproximadamente 1100 iteraciones, la que está trabajando en la # 900 debería terminarse aproximadamente en el momento en que las demás están.
[editado como la redacción original implicaba MATLAB todavía asignar las iteraciones del bucle parfor con el fin de 1 a 1000, que no debe ser asumida]
Así larga historia corta, a menos que encuentre una manera para procesar sus outliers primero (lo que por supuesto requiere que usted sepa a priori cuáles son los valores atípicos, y para encontrar una manera de hacer que MATLAB inicie el proceso de bucle paralelo), la distribución dinámica de carga de trabajo por sí sola no puede evitar el efecto que observa.
Adición: Creo, sin embargo, que su observación de que como "el bucle llega a su fin, el trabajador * s * que evalúan los valores atípicos siguen funcionando" parece implicar al menos una de las siguientes
- los valores extremos de alguna manera se encuentran entre las últimas iteraciones MATLAB empieza a procesar
- Usted tiene muchos trabajadores, en el orden de magnitud del número de iteraciones
- su estimación del número de valores atípicos (2-3) o su estimación de su penalización de tiempo de cálculo (factor 100) es demasiado baja