Pregunta

Utilizo una simulación escrita en python/numpy/cython.Como necesito promediar muchas ejecuciones de simulación, utilizo el módulo de multiprocesamiento para ejecutar todas las ejecuciones de simulación individuales en lotes.

En la oficina tengo una estación de trabajo i7-920 con HT.En casa tengo un i5-560 sin.Pensé que podría ejecutar el doble de instancias de simulación en cada lote en la oficina y reducir mi tiempo de ejecución a la mitad.Sorprendentemente, el tiempo de ejecución de cada instancia individual se duplicó en comparación con el tiempo que lleva en la estación de trabajo de mi casa.Es decir, ejecutar 3 instancias de simulación en paralelo en casa tomaría, digamos, 8 minutos, mientras que ejecutar 6 instancias en la oficina tomaría aproximadamente 15 minutos.Usando 'cat /proc/cpuinfo' verifiqué 'hermanos' = 8 y 'núcleos de CPU' = 4, por lo que HT está habilitado.

No conozco ninguna ley de "conservación del tiempo de ejecución total" (aunque desde el punto de vista científico podría ser bastante interesante :)), y mencionar a alguien aquí podría arrojar algo de luz sobre este enigma.

¿Fue útil?

Solución

Quizás los cambios de contexto produzcan más gastos generales, causados ​​por 6 masivamente procesos de cálculo y sólo 4 núcleos reales.Si los procesos compiten por los recursos de la CPU, pueden utilizar cachés de CPU ineficientes.

Si solo habilita 4 en lugar de 6 núcleos, ¿cuál es el resultado?

Otros consejos

La hiperthreading puede ser buena para algunos tipos de carga de trabajo. Los cálculos numéricos intensos no son uno de estos: cuando desea hacer algunos números que se desactivan mejor, apagar su hipertrimidad. Lo que la hiperthreading le da a uno es el "cambio de contexto gratuito" entre las tareas, pero la CPU tiene solo muchas unidades de ejecución.

En este caso, puede empeorar las cosas, porque el sistema operativo no puede saber qué procesos se están ejecutando en núcleos separados (donde obtendrían un rendimiento completo), y cuáles están en el mismo núcleo, solo en diferentes "HyperThreads".

(En realidad, apuesto a que el kernel de Linux puede proporcionar una manera para que uno tenga un buen control sobre eso, pero el módulo de multiprocesamiento de Python solo iniciará procesos extra que utilizarán la asignación de recursos predeterminada).

Entreño: apague HT si puede, al menos harás el uso completo de los 4 núcleos.

Los otros le han dado una idea del problema, solo quiero contribuir vinculando este artículo que explica un poco más sobre cómo funciona HT y cuáles son las implicaciones para el rendimiento de un programa multiproceso: http://software.intel.com/en-us/articles/performance-insights-to-intel-hyper-threading-technology/

Con mi estación de trabajo HP (16 núcleos/CPU, el uso de la hiper-subprocesos llega a 32 procesadores), girando hiper-subproyes en Python incluso roto cuando ejecuto la simulación numérica, el código de error es 0x000005 esto me sorprendió mucho tiempo hasta que me puse ht ht ht ht ht ht ht ht ht ht ht ht ht ht ht ht ht ht ht ht ht ht. ¡Off, y la simulación funciona bien! Tal vez podrías verificar y comparar el tiempo de ejecución de tanto HT está encendido como desactivado

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top