¿Debo deshabilitar HyperThreading para ejecutar simulaciones en paralelo?

Mi computadora tiene un procesador quadcore i7. Estoy estudiando la paralelización de simulaciones científicas. ¿Cómo impacta el hyperthreading en las interpretaciones paralelas? Sé que nunca debería usar más de 4 procesos de trabajo para obtener rendimientos de descenso. Pero, ¿debería desactivar también el hyperthreading? ¿Tiene un impacto en las actuaciones paralelas?

preguntado el 09 de marzo de 12 a las 15:03

4 Respuestas

En mi experiencia, al ejecutar códigos de inversión y modelado electromagnético, la respuesta es sí, debe deshabilitar el hiperproceso. Pero este no es el tipo de pregunta que está bien respondida por las anécdotas de otras personas (ni siquiera la mía, por fascinantes y verdaderas que sean).

Usted es el estudiante, este es definitivamente un tema que vale la pena dedicarle tiempo para llegar a sus propias conclusiones. Hay tantos factores involucrados que mi experiencia al ejecutar mis códigos en mis plataformas es casi inútil para ti.

respondido 09 mar '12, 15:03

En Linux, si tiene 4 subprocesos ocupados en un i7, colocará cada uno en un núcleo diferente. Siempre que la otra mitad del núcleo esté inactiva, el rendimiento debería ser el mismo. Si está ejecutando otro programa, es discutible si es mejor tener hyperthreading para ejecutar los programas adicionales o el cambio de contexto. (Sospecho que menos cambios de contexto es mejor)

Un error común es asumir que si usa 8 subprocesos en lugar de 4, será dos veces más rápido. Podría ser solo un poco más rápido (en cuyo caso podría valer la pena) o un poco más lento (en cuyo caso limite su programa a 4 subprocesos). He encontrado ejemplos en los que usar el doble de subprocesos fue un poco más rápido. En mi humilde opinión, todo es cuestión de probarlo para encontrar el número óptimo y usar esa cantidad.

La única vez que puedo ver que necesita apagar HT es cuando no tiene control sobre cómo se comporta su aplicación y el uso de 4 subprocesos es más rápido.

respondido 12 mar '12, 14:03

Usted declara:

Sé que nunca debería usar más de 4 procesos de trabajo para obtener rendimientos de descenso.

¡Esto no es necesariamente cierto! Aquí hay un ejemplo de lo que encontré ejecutándose en un i7-3820 con HT habilitado. Todo el código que estaba ejecutando era C ++. Considere que tengo 8 programas separados (aunque idénticos) que necesito ejecutar. He probado las dos formas siguientes de ejecutar estos códigos:

  1. Ejecute solo 4 subprocesos separados a la vez, simultáneamente. Cuando estos 4 se completen, ejecute los siguientes 4 subprocesos (4 x 2 = 8 en total).
  2. Ejecute los 8 como subprocesos separados simultáneamente (8 x 1 = 8 en total).

Como puede ver, estos dos escenarios logran lo mismo. Sin embargo, lo que he encontrado es que los tiempos de ejecución son:

  1. 1 hora para cada juego de 4 hilos; por un total de 2 horas para completar los 8.
  2. 1.5 horas para el juego de 8 hilos.

Lo que encuentra es que un solo hilo terminará más rápido para el caso n. ° 1, pero el n. ° 2 general brinda un mejor rendimiento ya que TODO su trabajo se completa en menos tiempo. Descubrí que los aumentos típicos en el rendimiento son de ~ 25% con HT habilitado.

Como es evidente, hay escenarios en los que ejecutar 8 subprocesos es más rápido que 4.

contestado el 09 de mayo de 13 a las 15:05

HyperTreading es la implementación de Intel de Multi-Threading simultáneo (SMT). En general, SMT casi siempre es beneficioso (es por eso que generalmente está habilitado), a menos que su aplicación esté vinculada a la CPU. Si está seguro de que su aplicación está vinculada a la CPU, desactive SMT. De lo contrario (su aplicación está vinculada a IO o no puede saturar completamente los núcleos), déjela habilitada.

respondido 11 mar '12, 18:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.