Si se permite que el segundo núcleo virtual contribuya cuando el primero estaría bloqueado, es mejor que no , por lo que obtendrá (al menos) un poco más de trabajo.
La pregunta es: ¿cuándo tener dos hilos diferentes hace que uno funcione peor? La predicción de rama y las dependencias entre instrucciones no cambiarán. Esperando el acceso a la memoria ahora ... los dos hilos compiten por el acceso a la memoria, tanto en la utilización de caché como en el ancho de banda.
Si tiene algunas CPU funcionando con HT y otras no, ¿eso también significa que asignará hilos específicos a un tipo u otro? Creo que no: sus programas ejecutarán sus hilos en núcleos virtuales aleatorios. Entonces, ¿cómo ayuda dividir la configuración? Como cada CPU tiene su propia memoria caché, el único efecto se debe al ancho de banda de la memoria y la carga de la coherencia de la memoria caché.
En general, llega a un punto en el que tener algo más que podría estar haciendo es más costoso que dejar que algunas unidades de ejecución de la CPU estén inactivas. Esto no depende de la cantidad de subprocesos directamente, sino de lo que están haciendo los subprocesos y la arquitectura de memoria detallada y los matices de rendimiento de los diversos componentes.
No hay una respuesta simple. Incluso con un programa específico en mente, la máquina puede diferir de la de las personas que relatan sus propias experiencias.
Tienes que probarlo tú mismo y medir lo que es más rápido, con ese trabajo específico en esa máquina exacta. E incluso entonces, puede cambiar con las actualizaciones de software y el cambio de uso con el tiempo.
Echa un vistazo al volumen 3 de la obra magna de Anger . Si observa detenidamente algún procesador específico, puede encontrar recursos limitantes entre los muchos pasos necesarios para ejecutar el código. Debe encontrar un caso en el que el exceso de compromiso haga que se ejecute más lentamente, en lugar de no tomar más trabajo. En general, eso significaría algún tipo de almacenamiento en caché; y donde el recurso se comparte entre subprocesos.
¿Qué significa el medidor de CPU: informa todo el tiempo que no ha pasado ejecutando el subproceso inactivo. Ambos hilos lógicos asignados a un núcleo no estarán inactivos aunque el trabajo real realizado en uno de ellos pueda ser pequeño. El tiempo dedicado a la tubería se atascó durante algunos ciclos hasta que los resultados estén listos, se recupere la memoria, las operaciones atómicas estén cercadas, etc. Del mismo modo, no causa que el hilo se archive como "no listo", por lo que no estará inactivo, y el tiempo todavía se muestra como en uso. Esperar en RAM no se mostrará como inactivo. Solo algo como E / S bloqueará el hilo y detendrá el tiempo de carga hacia él. Un mutex de sistema operativo en general lo hará, pero con el surgimiento de sistemas multinúcleo ya no es algo seguro, ya que un "spinlock" no hará que el hilo vuelva a la plataforma.
Por lo tanto, un medidor de CPU del 100% no significa que todo funcione sin problemas, si la CPU a menudo está atascada esperando memoria. Un número menor de núcleos lógicos que muestren el 90% bien podría estar haciendo más trabajo, ya que termina la reducción de números y ahora está esperando en el disco.
Así que no te preocupes por el medidor de CPU. Mire el progreso real realizado, solo .