¿Necesita hiperprocesamiento? Hyperthreading: ¿qué es? ¿Cómo habilitar Hyper-Threading? ¿Cuándo se utiliza mejor esta tecnología?

¿Necesita hiperprocesamiento? Hyperthreading: ¿qué es? ¿Cómo habilitar Hyper-Threading? ¿Cuándo se utiliza mejor esta tecnología?

26.12.2021

Uno de los elementos más importantes en el posicionamiento del procesador Intel dentro de los gobernantes, está la tecnología Hiper subprocesamiento. O mejor dicho, su ausencia en el procesador, o la presencia. ¿De qué es responsable esta tecnología? Hiperprocesamiento de Intel, es una tecnología para el uso eficiente de los recursos del núcleo del procesador (CPU), que permite el procesamiento simultáneo de múltiples subprocesos por núcleo.

Tratemos de dar un ejemplo de un sistema similar de la vida. Imagine un puesto fronterizo con control de todos los automóviles, muchos funcionarios de aduanas y un carril para automóviles. Se acumula un atasco, el proceso se ralentiza por sí mismo, incluso independientemente de la velocidad de los empleados. Y dado que solo hay un carril, la mitad de los empleados simplemente están aburridos. Y luego, de repente, se abre otro carril para vehículos y los automóviles comienzan a subir en dos corrientes. La velocidad del trabajo aumenta, los empleados gratuitos comienzan a trabajar y el atasco de tráfico de quienes desean cruzar la frontera se vuelve mucho menor. Como resultado, sin aumentar el tamaño de las aduanas y el número de empleados, aumentó el rendimiento y la eficiencia de un puesto.

Incluso el núcleo del procesador más potente debe recibir información sin demora para procesarla rápidamente. Tan pronto como se forma un "tapón" de datos en la entrada, el procesador comienza a estar inactivo, esperando que se procese esta o aquella información.

Para evitar esto, allá por 2002, apareció una tecnología Hiper subprocesamiento, que imitó la apariencia del segundo núcleo en el sistema, por lo que el llenado de las capacidades del núcleo se produjo más rápidamente.

Como ha demostrado la práctica, pocas personas saben cómo funciona realmente la tecnología. Hiperprocesamiento de Intel. La mayoría está segura de que solo tienen algunos núcleos virtuales adicionales en su procesador. Pero, de hecho, la cantidad de núcleos no cambia, es la cantidad de subprocesos lo que cambia, y esto es fundamental. Es solo que cada núcleo tiene un canal adicional para la información de entrada y salida. A continuación se muestra un video de cómo funciona realmente.

¿Cómo funciona la tecnología HT y de dónde provienen las transmisiones adicionales? De hecho, todo es bastante simple. Para implementar esta tecnología, se agrega un controlador y un conjunto de registros a cada núcleo. Así, tan pronto como el flujo de datos supera el ancho de banda de un canal, se conecta el segundo canal. Por lo tanto, se elimina el tiempo de inactividad de los bloques de procesador no utilizados.

En la era de los procesadores de un solo núcleo (Intel Pentium 4), la tecnología HT se convirtió en un salvavidas para aquellos que no podían comprar un procesador más caro (Pentium D). Pero hoy en día se conocen casos de degradación del rendimiento cuando se activa HT. ¿Por qué está pasando esto? Todo es bastante simple. Para la paralelización de datos y el procesamiento correcto del proceso, también desaparece parte de la potencia del procesador. Y en cuanto hay suficientes núcleos físicos para procesar información sin bloques inactivos, el rendimiento se reduce ligeramente debido a los recursos seleccionados por la tecnología HT. Por lo tanto, la peor opción para que Hyper-Threading funcione no es la falta de aumento del rendimiento, sino su disminución. Pero en la práctica esto sucede muy raramente.

Con el lanzamiento de la línea ocho mil de la familia de procesadores Intel Core, esta pregunta se ha vuelto especialmente relevante: ¿es necesario Hiper subprocesamiento¿en general? Después de todo, incluso los procesadores Core i5 tienen seis núcleos completos. Si no hablamos de aplicaciones profesionales para procesamiento de gráficos, renderizado, etc., existe la posibilidad de que seis núcleos físicos sean suficientes para todas las aplicaciones y juegos de oficina. Por tanto, si inicialmente se creía que la tecnología HT suma hasta un 30% al rendimiento del procesador, ahora esto no es un axioma, y ​​todo dependerá de tu estilo de trabajo con una computadora y un conjunto de utilidades utilizadas.

Por supuesto, el texto estaría incompleto sin la prueba. Por lo tanto, tomaremos los procesadores que tenemos Intel Core i7 8700K y 7700K, y comprobar en varios juegos y aplicaciones el rendimiento de los procesadores con activado Hiper subprocesamiento y desactivado. Como resultado de las pruebas, quedará claro en qué aplicaciones los núcleos virtuales agregan rendimiento y en cuáles pasan desapercibidos.

El popular 3DMark no responde muy bien al aumento de núcleos e hilos. Hay crecimiento, pero es insignificante.

En varios tipos de cálculos y procesamientos, los núcleos y los subprocesos siempre han prevalecido. Aquí Hyper-Threading es simplemente necesario, aumenta enormemente el rendimiento.

En los juegos, la situación es más simple. En la mayoría de los casos, aumentar el número de subprocesos no funciona; 4 núcleos físicos son suficientes para los juegos y, en la mayoría de los casos, incluso menos. La única excepción fue GTA5, que respondió muy bien al cierre de NT y agregó un 7% de rendimiento, y solo en un procesador 8700K de seis núcleos. La desactivación de subprocesos múltiples en el 7700K no tuvo ningún efecto. Volvimos a ejecutar los puntos de referencia varias veces y los resultados no cambiaron. Pero esto es más bien una excepción a la regla. Todos los juegos que probamos se contentan fácilmente con cuatro núcleos.

Uno de los elementos más importantes en el posicionamiento de los procesadores Intel dentro de las líneas es la tecnología Hyper-Threading. O mejor dicho, su ausencia en el procesador, o la presencia. ¿De qué es responsable esta tecnología? Intel Hyper-Threading es una tecnología para el uso eficiente de los recursos del núcleo del procesador (CPU), lo que permite procesar múltiples subprocesos simultáneamente por núcleo. Tratemos de dar un ejemplo de un sistema similar de la vida. Imagine un puesto fronterizo con control de todos los automóviles, muchos funcionarios de aduanas y un carril para automóviles. Se acumula un atasco, el proceso se ralentiza por sí mismo, incluso independientemente de la velocidad de los empleados. Y dado que solo hay un carril, la mitad de los empleados simplemente están aburridos. Y luego, de repente, se abre otro carril para vehículos y los automóviles comienzan a subir en dos corrientes. La velocidad del trabajo aumenta, los empleados gratuitos comienzan a trabajar y el atasco de tráfico de quienes desean cruzar la frontera se vuelve mucho menor. Como resultado, sin aumentar el tamaño de las aduanas y el número de empleados, aumentó el rendimiento y la eficiencia de un puesto. Incluso el núcleo del procesador más potente debe recibir información sin demora para procesarla rápidamente. Tan pronto como se forma un "tapón" de datos en la entrada, el procesador comienza a estar inactivo, esperando que se procese esta o aquella información. Para evitar esto, allá por 2002, apareció la tecnología Hyper-Threading, que imitaba la aparición de un segundo núcleo en el sistema, por lo que la capacidad del núcleo se llenaba más rápidamente. Como ha demostrado la práctica, pocas personas saben cómo funciona realmente la tecnología Intel Hyper-Threading. La mayoría está segura de que solo tienen algunos núcleos virtuales adicionales en su procesador. Pero, de hecho, la cantidad de núcleos no cambia, es la cantidad de subprocesos lo que cambia, y esto es fundamental. Es solo que cada núcleo tiene un canal adicional para la información de entrada y salida. A continuación se muestra un video de cómo funciona realmente. ¿Cómo funciona la tecnología HT y de dónde provienen las transmisiones adicionales? De hecho, todo es bastante simple. Para implementar esta tecnología, se agrega un controlador y un conjunto de registros a cada núcleo. Así, tan pronto como el flujo de datos supera el ancho de banda de un canal, se conecta el segundo canal. Por lo tanto, se elimina el tiempo de inactividad de los bloques de procesador no utilizados. En la era de los procesadores de un solo núcleo (Intel Pentium 4), la tecnología HT se convirtió en un salvavidas para aquellos que no podían comprar un procesador más caro (Pentium D). Pero hoy en día se conocen casos de degradación del rendimiento cuando se activa HT. ¿Por qué está pasando esto? Todo es bastante simple. Para la paralelización de datos y el procesamiento correcto del proceso, también desaparece parte de la potencia del procesador. Y en cuanto hay suficientes núcleos físicos para procesar información sin bloques inactivos, el rendimiento se reduce ligeramente debido a los recursos seleccionados por la tecnología HT. Por lo tanto, la peor opción para que Hyper-Threading funcione no es la falta de aumento del rendimiento, sino su disminución. Pero en la práctica esto sucede muy raramente. Con el lanzamiento de la línea ocho mil de la familia de procesadores Intel Core, esta pregunta se ha vuelto especialmente relevante: ¿se necesita Hyper-Threading? Después de todo, incluso los procesadores Core i5 tienen seis núcleos completos. Si no hablamos de aplicaciones profesionales para procesamiento de gráficos, renderizado, etc., existe la posibilidad de que seis núcleos físicos sean suficientes para todas las aplicaciones y juegos de oficina. Por tanto, si inicialmente se creía que la tecnología HT suma hasta un 30% al rendimiento del procesador, ahora esto no es un axioma, y ​​todo dependerá de tu estilo de trabajo con una computadora y un conjunto de utilidades utilizadas. Por supuesto, el texto sería...

Hubo un tiempo en que era necesario evaluar el rendimiento de la memoria en el contexto de la tecnología Hyper-threading. Llegamos a la conclusión de que su influencia no siempre es positiva. Cuando había una cantidad de tiempo libre, había un deseo de continuar la investigación y considerar los procesos en curso con una precisión de ciclos de máquina y bits, utilizando software de nuestro propio diseño.

Plataforma investigada

El objeto de los experimentos es una computadora portátil ASUS N750JK con un procesador Intel Core i7-4700HQ. La velocidad del reloj es de 2,4 GHz, impulsada por el modo Intel Turbo Boost hasta 3,4 GHz. Se instalaron 16 gigabytes de RAM DDR3-1600 (PC3-12800) que se ejecutan en modo de doble canal. Sistema operativo - Microsoft Windows 8.1 64 bits.

Fig.1 Configuración de la plataforma estudiada.

El procesador de la plataforma en estudio contiene 4 núcleos, que cuando se habilita la tecnología Hyper-Threading, brinda soporte de hardware para 8 hilos o procesadores lógicos. El firmware de la plataforma pasa esta información al sistema operativo a través de la tabla ACPI MADT (tabla de descripción de APIC múltiple). Dado que la plataforma contiene solo un controlador de RAM, no existe una SRAT (tabla de afinidad de recursos del sistema) que declare la proximidad de los núcleos del procesador a los controladores de memoria. Obviamente, la computadora portátil en estudio no es una plataforma NUMA, pero el sistema operativo, a los efectos de la unificación, la considera como un sistema NUMA con un dominio, como lo indica la línea NUMA Nodes = 1. El hecho de que es fundamental para nuestro experimentos es que el caché de datos de primer nivel tiene un tamaño de 32 kilobytes para cada uno de los cuatro núcleos. Dos procesadores lógicos que comparten el mismo núcleo comparten las cachés L1 y L2.

operación investigada

Investigaremos la dependencia de la velocidad de lectura del bloque de datos con su tamaño. Para ello, elegiremos el método más productivo, es decir, la lectura de operandos de 256 bits mediante la instrucción VMOVAPD AVX. En los gráficos, el eje X muestra el tamaño del bloque y el eje Y muestra la velocidad de lectura. En la vecindad del punto X, que corresponde al tamaño del caché de primer nivel, esperamos ver un punto de inflexión, ya que el rendimiento debería caer después de que el bloque procesado salga del caché. En nuestra prueba, en el caso de subprocesos múltiples, cada uno de los 16 subprocesos iniciados funciona con un rango de direcciones separado. Para controlar la tecnología Hyper-Threading dentro de una aplicación, cada subproceso utiliza la función API SetThreadAffinityMask, que establece una máscara en la que cada procesador lógico corresponde a un bit. Un solo valor del bit permite el uso del procesador especificado por el subproceso especificado, un valor cero lo prohíbe. Para 8 procesadores lógicos de la plataforma estudiada, la máscara 11111111b permite usar todos los procesadores (Hyper-Threading habilitado), la máscara 01010101b permite usar un procesador lógico en cada núcleo (Hyper-Threading deshabilitado).

En los gráficos se utilizan las siguientes abreviaturas:

MBPS (Megabytes por segundo)velocidad de lectura del bloque en megabytes por segundo;

CPI (relojes por instrucción)número de ciclos por instrucción;

TSC (contador de marca de tiempo)contador de ciclos del procesador.

Nota: Es posible que la velocidad del reloj del registro TSC no coincida con la velocidad del reloj del procesador cuando se ejecuta en modo Turbo Boost. Esto debe tenerse en cuenta a la hora de interpretar los resultados.

En el lado derecho de los gráficos se visualiza un volcado hexadecimal de las instrucciones que componen el cuerpo del ciclo de la operación objetivo realizada en cada uno de los hilos del programa, o sea, los primeros 128 bytes de este código.

Experiencia número 1. un hilo



Figura 2 Leyendo en un hilo

La velocidad máxima es de 213563 megabytes por segundo. El punto de inflexión se produce en un tamaño de bloque de unos 32 kilobytes.

Experiencia número 2. 16 subprocesos en 4 procesadores, Hyper-Threading deshabilitado



Fig. 3 Lectura en dieciséis hilos. El número de procesadores lógicos utilizados es de cuatro.

Hyper-threading está deshabilitado. La velocidad máxima es de 797598 megabytes por segundo. El punto de inflexión se produce en un tamaño de bloque de unos 32 kilobytes. Como era de esperar, en comparación con la lectura con un solo hilo, la velocidad aumentó aproximadamente 4 veces, en términos de la cantidad de núcleos de trabajo.

Experiencia número 3. 16 subprocesos en 8 procesadores, Hyper-Threading habilitado



Figura 4 Lectura en dieciséis hilos. El número de procesadores lógicos utilizados es de ocho.

Hyper-threading habilitado. La velocidad máxima de 800722 megabytes por segundo, como resultado de la inclusión de Hyper-Threading, casi no aumentó. El gran inconveniente es que el punto de inflexión se produce en un tamaño de bloque de unos 16 kilobytes. La habilitación de Hyper-Threading aumentó ligeramente la velocidad máxima, pero ahora la caída de la velocidad se produce a la mitad del tamaño del bloque, unos 16 kilobytes, por lo que la velocidad media se ha reducido significativamente. Esto no es sorprendente, cada núcleo tiene su propio caché L1, mientras que los procesadores lógicos del mismo núcleo lo comparten.

conclusiones

La operación investigada escala bastante bien en un procesador multinúcleo. Las razones son que cada uno de los núcleos contiene su propia memoria caché de primer y segundo nivel, el tamaño del bloque de destino es comparable al tamaño de la memoria caché y cada uno de los subprocesos funciona con su propio rango de direcciones. Con fines académicos, creamos tales condiciones en una prueba sintética, y nos dimos cuenta de que las aplicaciones reales suelen estar lejos de la optimización ideal. Pero la inclusión de Hyper-Threading, incluso en estas condiciones, tuvo un efecto negativo, con un ligero aumento en la velocidad máxima, hay una pérdida significativa en la velocidad de procesamiento de bloques, cuyo tamaño está en el rango de 16 a 32 kilobytes. 20 de enero de 2015 a las 19:43

Más sobre Hyper-Threading

  • pruebas de sistemas de TI,
  • Programación

Hubo un tiempo en que era necesario evaluar el rendimiento de la memoria en el contexto de la tecnología Hyper-threading. Llegamos a la conclusión de que su influencia no siempre es positiva. Cuando había una cantidad de tiempo libre, había un deseo de continuar la investigación y considerar los procesos en curso con una precisión de ciclos de máquina y bits, utilizando software de nuestro propio diseño.

Plataforma investigada

El objeto de los experimentos es una computadora portátil ASUS N750JK con un procesador Intel Core i7-4700HQ. La velocidad del reloj es de 2,4 GHz, impulsada por el modo Intel Turbo Boost hasta 3,4 GHz. Se instalaron 16 gigabytes de RAM DDR3-1600 (PC3-12800) que se ejecutan en modo de doble canal. Sistema operativo - Microsoft Windows 8.1 64 bits.

Fig.1 Configuración de la plataforma estudiada.

El procesador de la plataforma en estudio contiene 4 núcleos, que cuando se habilita la tecnología Hyper-Threading, brinda soporte de hardware para 8 hilos o procesadores lógicos. El firmware de la plataforma pasa esta información al sistema operativo a través de la tabla ACPI MADT (tabla de descripción de APIC múltiple). Dado que la plataforma contiene solo un controlador de RAM, no existe una SRAT (tabla de afinidad de recursos del sistema) que declare la proximidad de los núcleos del procesador a los controladores de memoria. Obviamente, la computadora portátil en estudio no es una plataforma NUMA, pero el sistema operativo, a los efectos de la unificación, la considera como un sistema NUMA con un dominio, como lo indica la línea NUMA Nodes = 1. El hecho de que es fundamental para nuestro experimentos es que el caché de datos de primer nivel tiene un tamaño de 32 kilobytes para cada uno de los cuatro núcleos. Dos procesadores lógicos que comparten el mismo núcleo comparten las cachés L1 y L2.

operación investigada

Investigaremos la dependencia de la velocidad de lectura del bloque de datos con su tamaño. Para ello, elegiremos el método más productivo, es decir, la lectura de operandos de 256 bits mediante la instrucción VMOVAPD AVX. En los gráficos, el eje X muestra el tamaño del bloque y el eje Y muestra la velocidad de lectura. En la vecindad del punto X, que corresponde al tamaño del caché de primer nivel, esperamos ver un punto de inflexión, ya que el rendimiento debería caer después de que el bloque procesado salga del caché. En nuestra prueba, en el caso de subprocesos múltiples, cada uno de los 16 subprocesos iniciados funciona con un rango de direcciones separado. Para controlar la tecnología Hyper-Threading dentro de una aplicación, cada subproceso utiliza la función API SetThreadAffinityMask, que establece una máscara en la que cada procesador lógico corresponde a un bit. Un solo valor del bit permite el uso del procesador especificado por el subproceso especificado, un valor cero lo prohíbe. Para 8 procesadores lógicos de la plataforma estudiada, la máscara 11111111b permite usar todos los procesadores (Hyper-Threading habilitado), la máscara 01010101b permite usar un procesador lógico en cada núcleo (Hyper-Threading deshabilitado).

En los gráficos se utilizan las siguientes abreviaturas:

MBPS (Megabytes por segundo)velocidad de lectura del bloque en megabytes por segundo;

CPI (relojes por instrucción)número de ciclos por instrucción;

TSC (contador de marca de tiempo)contador de ciclos del procesador.

Nota: Es posible que la velocidad del reloj del registro TSC no coincida con la velocidad del reloj del procesador cuando se ejecuta en modo Turbo Boost. Esto debe tenerse en cuenta a la hora de interpretar los resultados.

En el lado derecho de los gráficos se visualiza un volcado hexadecimal de las instrucciones que componen el cuerpo del ciclo de la operación objetivo realizada en cada uno de los hilos del programa, o sea, los primeros 128 bytes de este código.

Experiencia número 1. un hilo



Figura 2 Leyendo en un hilo

La velocidad máxima es de 213563 megabytes por segundo. El punto de inflexión se produce en un tamaño de bloque de unos 32 kilobytes.

Experiencia número 2. 16 subprocesos en 4 procesadores, Hyper-Threading deshabilitado



Fig. 3 Lectura en dieciséis hilos. El número de procesadores lógicos utilizados es de cuatro.

Hyper-threading está deshabilitado. La velocidad máxima es de 797598 megabytes por segundo. El punto de inflexión se produce en un tamaño de bloque de unos 32 kilobytes. Como era de esperar, en comparación con la lectura con un solo hilo, la velocidad aumentó aproximadamente 4 veces, en términos de la cantidad de núcleos de trabajo.

Experiencia número 3. 16 subprocesos en 8 procesadores, Hyper-Threading habilitado



Figura 4 Lectura en dieciséis hilos. El número de procesadores lógicos utilizados es de ocho.

Hyper-threading habilitado. La velocidad máxima de 800722 megabytes por segundo, como resultado de la inclusión de Hyper-Threading, casi no aumentó. El gran inconveniente es que el punto de inflexión se produce en un tamaño de bloque de unos 16 kilobytes. La habilitación de Hyper-Threading aumentó ligeramente la velocidad máxima, pero ahora la caída de la velocidad se produce a la mitad del tamaño del bloque, unos 16 kilobytes, por lo que la velocidad media se ha reducido significativamente. Esto no es sorprendente, cada núcleo tiene su propio caché L1, mientras que los procesadores lógicos del mismo núcleo lo comparten.

conclusiones

La operación investigada escala bastante bien en un procesador multinúcleo. Las razones son que cada uno de los núcleos contiene su propia memoria caché de primer y segundo nivel, el tamaño del bloque de destino es comparable al tamaño de la memoria caché y cada uno de los subprocesos funciona con su propio rango de direcciones. Con fines académicos, creamos tales condiciones en una prueba sintética, y nos dimos cuenta de que las aplicaciones reales suelen estar lejos de la optimización ideal. Pero la inclusión de Hyper-Threading, incluso en estas condiciones, tuvo un efecto negativo, con un ligero aumento en la velocidad máxima, hay una pérdida significativa en la velocidad de procesamiento de bloques, cuyo tamaño está en el rango de 16 a 32 kilobytes.

Si revisó detenidamente el contenido de la configuración del BIOS, es posible que haya notado la opción de tecnología CPU Hyper Threading allí. Y quizás se preguntaron qué es Hyper Threading (Super-threading o hyper-threading, el nombre oficial es Hyper Threading Technology, HTT), y por qué se necesita esta opción.

Hyper Threading es una tecnología relativamente nueva desarrollada por Intel para procesadores de arquitectura Pentium. Como ha demostrado la práctica, el uso de la tecnología Hyper Threading ha permitido en muchos casos aumentar el rendimiento de la CPU en aproximadamente un 20-30%.

Aquí debe recordar cómo funciona generalmente la unidad central de procesamiento de una computadora. Tan pronto como enciende la computadora y ejecuta un programa en ella, la CPU comienza a leer las instrucciones contenidas en ella, escritas en el llamado código de máquina. Lee cada instrucción a su vez y las ejecuta una por una.

Sin embargo, muchos programas tienen varios procesos de software ejecutándose simultáneamente. Además, los sistemas operativos modernos permiten al usuario tener varios programas ejecutándose a la vez. Y no solo permitir: de hecho, la situación en la que se ejecuta un solo proceso en el sistema operativo es completamente impensable hoy en día. Por lo tanto, los procesadores desarrollados con tecnologías más antiguas tenían un rendimiento deficiente en los casos en que era necesario procesar varios procesos simultáneos a la vez.

Por supuesto, para solucionar este problema, puede incluir varios procesadores en el sistema a la vez, o procesadores que utilicen varios núcleos físicos de computación. Pero tal mejora resulta costosa, técnicamente compleja y no siempre efectiva desde un punto de vista práctico.

Historial de desarrollo

Por lo tanto, se decidió crear una tecnología que permitiera procesar varios procesos en un núcleo físico. Al mismo tiempo, para los programas, el asunto se verá como si hubiera varios núcleos de procesador en el sistema a la vez.

La compatibilidad con la tecnología Hyper Threading apareció por primera vez en los procesadores en 2002. Se trataba de procesadores de la familia Pentium 4 y procesadores de servidor Xeon con velocidades de reloj superiores a 2 GHz. Inicialmente, la tecnología tenía el nombre en código Jackson, pero luego su nombre cambió a Hyper Threading, que es más comprensible para el público en general, que se puede traducir aproximadamente como "superthreading".

Al mismo tiempo, según Intel, la superficie de un chip de procesador compatible con Hyper Threading ha aumentado en comparación con el modelo anterior que no lo admite, solo un 5 %, al tiempo que aumenta el rendimiento en un promedio de un 20 %.

A pesar de que la tecnología en su conjunto ha demostrado ser buena, sin embargo, por varias razones, Intel decidió deshabilitar la tecnología Hyper Threading en los procesadores de la familia Core 2 que reemplazó a los Pentium 4. Hyper Threading, sin embargo, reapareció más tarde. en las arquitecturas de procesador de Sandy Bridge, Ivy Bridge y Haswell, siendo sustancialmente rediseñadas en ellas.

La esencia de la tecnología.

Comprender Hyper Threading es importante porque es una de las características clave de los procesadores Intel.

A pesar de todos los éxitos que han logrado los procesadores, tienen un inconveniente importante: solo pueden ejecutar una instrucción a la vez. Supongamos que tiene aplicaciones como editor de texto, navegador y Skype ejecutándose al mismo tiempo. Desde el punto de vista del usuario, este entorno de software puede llamarse multitarea, sin embargo, desde el punto de vista del procesador, esto está lejos de ser el caso. El núcleo del procesador aún ejecutará una instrucción durante un cierto período de tiempo. En este caso, la tarea del procesador incluye la distribución de recursos de tiempo del procesador entre aplicaciones individuales. Debido a que esta ejecución secuencial de instrucciones es extremadamente rápida, no lo nota. Y te parece que no hay demora.

Pero todavía hay un retraso. El retraso aparece debido a la forma en que el procesador recibe los datos de cada uno de los programas. Cada flujo de datos debe llegar en un momento determinado y ser procesado individualmente por el procesador. La tecnología Hyper Threading hace posible que cada núcleo de procesador programe el procesamiento de datos y asigne recursos simultáneamente para dos subprocesos.

Cabe señalar que en el núcleo de los procesadores modernos hay varias unidades de ejecución a la vez, cada una de las cuales está diseñada para realizar una operación específica en los datos. Al mismo tiempo, algunos de estos dispositivos ejecutivos pueden estar inactivos durante el procesamiento de datos de un subproceso.

Para comprender esta situación, podemos hacer una analogía con los trabajadores que trabajan en el taller de ensamblaje en el transportador y procesan diferentes tipos de piezas. Cada trabajador está equipado con una herramienta específica diseñada para realizar una tarea. Sin embargo, si las piezas llegan en la secuencia incorrecta, entonces hay retrasos, porque algunos de los trabajadores están esperando su turno para comenzar a trabajar. Hyper Threading se puede comparar con una cinta transportadora adicional que se colocó en el taller para que los trabajadores que antes estaban inactivos pudieran realizar sus tareas independientemente de los demás. El taller todavía está solo, pero las piezas se procesan de manera más rápida y eficiente, por lo que se reduce el tiempo de inactividad. Por lo tanto, Hyper Threading hizo posible incluir en el trabajo aquellos dispositivos ejecutivos del procesador que estaban inactivos mientras ejecutaban instrucciones de un hilo.

Tan pronto como encienda una computadora con un procesador de doble núcleo que admita Hyper Threading y abra el Administrador de tareas de Windows (Administrador de tareas) en la pestaña Rendimiento (Rendimiento), encontrará cuatro gráficos en él. Pero esto no significa que en realidad tenga 4 núcleos de procesador.

Esto se debe a que Windows cree que cada núcleo tiene dos procesadores lógicos. El término "procesador lógico" suena divertido, pero significa un procesador que no existe físicamente. Windows puede enviar flujos de datos a cada procesador lógico, pero solo un núcleo está haciendo el trabajo. Por lo tanto, un solo núcleo con tecnología Hyper Threading es significativamente diferente de los núcleos físicos separados.

La tecnología Hyper Threading requiere soporte del siguiente hardware y software:

  • UPC
  • conjunto de chips de la placa base
  • Sistema operativo

Beneficios de la tecnología

Ahora considere la siguiente pregunta: ¿cuánto aumenta el rendimiento de la computadora con la tecnología Hyper Threading? En tareas cotidianas como navegar por Internet y escribir, los beneficios de la tecnología no son tan evidentes. Sin embargo, tenga en cuenta que los procesadores actuales son tan potentes que las tareas diarias rara vez usan el procesador a su máxima capacidad. Además, mucho también depende de cómo esté escrito el software. Puede tener varios programas ejecutándose a la vez, sin embargo, al observar el gráfico de carga, verá que solo se utiliza un procesador lógico por núcleo. Esto se debe a que el software no admite la distribución de procesos entre núcleos.

Sin embargo, en tareas más complejas, Hyper Threading puede ser más útil. Aplicaciones tales como programas de modelado 3D, juegos 3D, programas de codificación/descodificación de música o video y muchas aplicaciones científicas están escritas para aprovechar al máximo los subprocesos múltiples. Por lo tanto, puede experimentar los beneficios del rendimiento de una computadora con hiperprocesos mientras juega juegos complejos, escucha música o mira películas. Esto puede aumentar el rendimiento hasta en un 30 %, aunque puede haber situaciones en las que Hyper Threading no proporcione ninguna ventaja. A veces, en el caso de que ambos subprocesos carguen todos los dispositivos ejecutivos del procesador con las mismas tareas, puede incluso haber alguna degradación del rendimiento.

Volviendo a la presencia en la configuración del BIOS de la opción correspondiente que le permite configurar los parámetros de Hyper Threading, en la mayoría de los casos se recomienda habilitar esta función. Sin embargo, siempre puedes apagarlo si resulta que la computadora está funcionando con errores o incluso tiene menos rendimiento de lo que esperabas.

Conclusión

Dado que el aumento máximo de rendimiento al usar Hyper Threading es del 30%, no se puede decir que la tecnología sea equivalente a duplicar la cantidad de núcleos del procesador. Sin embargo, Hyper Threading es una opción útil y usted, como propietario de una computadora, no interferirá con ella. Su ventaja se nota especialmente, por ejemplo, cuando editas archivos multimedia o usas tu computadora como estación de trabajo para programas profesionales como Photoshop o Maya.

Escribimos que el uso de sistemas Xeon de un solo procesador no tiene sentido, ya que a un precio más alto su rendimiento será el mismo que el de un Pentium 4 de la misma frecuencia. Ahora, después de un examen más detallado, esta declaración probablemente tendrá que ser ligeramente modificada. La tecnología Hyper-Threading implementada en Intel Xeon con el núcleo Prestonia realmente funciona y produce un efecto bastante tangible. Aunque también hay muchas dudas a la hora de usarlo...

dar rendimiento

"Más rápido, aún más rápido...". La carrera por el rendimiento ha durado años y, a veces, es incluso difícil decir cuál de los componentes de la computadora está acelerando más rápido. Para esto, se están inventando más y más formas nuevas, y cuanto más, se invierte más mano de obra calificada y cerebros de alta calidad en este proceso similar a una avalancha.

Por supuesto, se necesita un aumento constante en el rendimiento. Como mínimo, es un negocio rentable, y siempre hay una buena forma de animar a los usuarios a actualizar la "CPU de superrendimiento" de ayer a la "aún más super..." de mañana. Por ejemplo, reconocimiento de voz simultáneo y traducción simultánea a otro idioma: ¿no es este el sueño de todos? O juegos inusualmente realistas de casi calidad de "cine" (que absorben completamente la atención y, a veces, conducen a cambios serios en la psique), ¿no es este el deseo de muchos jugadores, jóvenes y viejos?

Pero dejemos de lado los aspectos de marketing en este caso, centrándonos en los técnicos. Además, no todo es tan sombrío: hay tareas urgentes (aplicaciones de servidor, cálculos científicos, modelado, etc.) donde es realmente necesario un rendimiento cada vez mayor, en particular, de los procesadores centrales.

Entonces, ¿cuáles son las formas de aumentar su rendimiento?

Impulso de reloj. Es posible "adelgazar" aún más el proceso tecnológico y aumentar la frecuencia. Pero, como saben, esto no es fácil y está plagado de todo tipo de efectos secundarios, como problemas con la disipación de calor.

Aumento de los recursos del procesador- por ejemplo, aumentando el volumen de la memoria caché, agregando nuevos bloques (Unidades de Ejecución). Todo esto implica un aumento en la cantidad de transistores, la complejidad del procesador, un aumento en el área del cristal y, en consecuencia, en el costo.

Además, los dos métodos anteriores dan, por regla general, de ninguna manera un aumento lineal de la productividad. Esto es bien conocido en el ejemplo de Pentium 4: los errores en la predicción de bifurcaciones y las interrupciones provocan el reinicio de una tubería larga, lo que afecta en gran medida el rendimiento general.

multiprocesamiento. La instalación de varias CPU y la distribución del trabajo entre ellas suele ser bastante eficiente. Pero este enfoque no es muy barato: cada procesador adicional aumenta el costo del sistema, y ​​una placa base dual es mucho más cara que una normal (sin mencionar las placas base con soporte para cuatro o más CPU). Además, no todas las aplicaciones se benefician lo suficiente del multiprocesamiento como para justificar el costo.

Además del multiprocesamiento "puro", existen varias opciones "intermedias" que le permiten acelerar la ejecución de la aplicación:

Multiprocesamiento de chips (CMP)- dos núcleos de procesador están ubicados físicamente en el mismo chip, utilizando un caché común o separado. Naturalmente, el tamaño del cristal resulta ser bastante grande, y esto no puede sino afectar el costo. Tenga en cuenta que varias de estas CPU "dobles" también pueden funcionar en un sistema multiprocesador.

Multiproceso de intervalo de tiempo. El procesador cambia entre hilos de programa a intervalos fijos. Los gastos generales a veces pueden ser bastante elevados, especialmente si hay un proceso en espera.

Multiproceso de evento de encendido. Cambio de tareas cuando se producen pausas prolongadas, como "errores de caché" (caché misses), un gran número de los cuales son típicos de las aplicaciones de servidor. En este caso, se suspende un proceso que está esperando para cargar datos de una memoria relativamente lenta en la memoria caché, lo que libera recursos de la CPU para otros procesos. Sin embargo, Switch-on-Event Multithreading, como Time-Slice Multithreading, no siempre logra un uso óptimo de los recursos del procesador, en particular debido a errores en la predicción de saltos, dependencias de instrucciones, etc.

Subprocesos múltiples simultáneos. En este caso, los subprocesos del programa se ejecutan en el mismo procesador "simultáneamente", es decir, sin cambiar entre ellos. Los recursos de la CPU se distribuyen dinámicamente, según el principio "si no lo usas, dáselo a otra persona". Es este enfoque el que forma la base de la tecnología Intel Hyper-Threading, que ahora consideraremos.

Cómo funciona Hyper-Threading

Como saben, el "paradigma informático" actual implica la computación de subprocesos múltiples. Esto se aplica no solo a los servidores, donde este concepto existe inicialmente, sino también a las estaciones de trabajo y los sistemas de escritorio. Los hilos pueden pertenecer a las mismas o diferentes aplicaciones, pero casi siempre hay más de un hilo activo (para ver esto, basta con abrir el Administrador de tareas en Windows 2000/XP y activar la visualización del número de hilos). Al mismo tiempo, un procesador convencional solo puede ejecutar uno de los subprocesos a la vez y se ve obligado a cambiar constantemente entre ellos.

Por primera vez, la tecnología Hyper-Threading se implementó en el procesador Intel Xeon MP (Foster MP), en el que se estaba "ejecutando". Recuerde que Xeon MP, presentado oficialmente en IDF Spring 2002, utiliza un núcleo Pentium 4 Willamette, contiene 256 KB de caché L2 y 512 KB/1 MB de caché L3, y admite configuraciones de 4 procesadores. La compatibilidad con Hyper-Threading también está presente en el procesador Intel Xeon para estaciones de trabajo (núcleo Prestonia, caché L2 de 512 KB), que ingresó al mercado un poco antes que el Xeon MP. Nuestros lectores ya están familiarizados con las configuraciones de doble procesador en Intel Xeon, por lo que consideraremos las posibilidades de Hyper-Threading utilizando estas CPU como ejemplo, tanto teórica como prácticamente. Sea como fuere, el "simple" Xeon es más mundano y digerible que el Xeon MP en sistemas de 4 procesadores...

El principio de funcionamiento de Hyper-Threading se basa en el hecho de que en un momento dado solo se utiliza una parte de los recursos del procesador al ejecutar el código del programa. Los recursos no utilizados también se pueden cargar con trabajo; por ejemplo, se puede usar una aplicación más (u otro subproceso de la misma aplicación) para la ejecución en paralelo. En un procesador Intel Xeon físico, se forman dos procesadores lógicos (LP - Procesador lógico), que comparten los recursos informáticos de la CPU. El sistema operativo y las aplicaciones "ven" exactamente dos CPU y pueden distribuir el trabajo entre ellas, como en el caso de un sistema completo de dos procesadores.

Uno de los objetivos de implementar Hyper-Threading es permitir que solo un subproceso activo se ejecute a la misma velocidad que en una CPU normal. Para hacer esto, el procesador tiene dos modos principales de operación: Single-Task (ST) y Multi-Task (MT). En el modo ST, solo un procesador lógico está activo y utiliza los recursos disponibles sin dividir (modos ST0 y ST1); el otro LP es detenido por el comando HALT. Cuando aparece un segundo subproceso de programa, el procesador lógico inactivo se activa (a través de una interrupción) y la CPU física se pone en modo MT. Detener los LP no utilizados con el comando HALT es responsabilidad del sistema operativo, que es responsable en última instancia de la misma ejecución rápida de un subproceso que en el caso sin Hyper-Threading.

Para cada uno de los dos LP, se almacena el llamado Estado de arquitectura (AS), que incluye el estado de los registros de varios tipos: propósito general, control, APIC y servicio. Cada LP tiene su propio APIC (controlador de interrupciones) y un conjunto de registros, para su correcto funcionamiento con lo que se introduce el concepto de Register Alias ​​Table (RAT), que rastrea la correspondencia entre ocho registros de propósito general IA-32 y 128 registros físicos de la CPU (una RAT para cada LP).

Cuando se ejecutan dos subprocesos, se admiten dos conjuntos correspondientes de punteros de instrucción siguiente. La mayoría de las instrucciones se toman del Trace Cache (TC), donde se almacenan en forma decodificada, y los dos LP activos acceden al TC a su vez, cada reloj. Al mismo tiempo, cuando solo un LP está activo, obtiene acceso exclusivo al TC sin intercalar en los relojes. De manera similar, se produce el acceso a la ROM de Microcode. Los bloques ITLB (Instruction Translation Look-aside Buffer), que se activan en ausencia de las instrucciones necesarias en el caché de instrucciones, se duplican y entregan instrucciones cada uno para su propio hilo. El bloque de decodificación de instrucciones IA-32 Instruction Decode se comparte y, en el caso de que se requiera la decodificación de instrucciones para ambos flujos, los sirve uno por uno (nuevamente, cada ciclo). Los bloques Uop Queue y Allocator se dividen en dos, con la mitad de los elementos asignados para cada LP. Los programadores de 5 piezas procesan colas de comandos decodificados (Uops) a pesar de pertenecer a LP0 / LP1 y comandos directos para ser ejecutados por las Unidades de Ejecución necesarias, dependiendo de la preparación para la ejecución del primero y la disponibilidad del segundo. Las cachés de todos los niveles (L1/L2 para Xeon, así como L3 para Xeon MP) se comparten completamente entre dos LP; sin embargo, para garantizar la integridad de los datos, las entradas en DTLB (Búfer de búsqueda de traducción de datos) se proporcionan con descriptores en el forma de ID de procesador lógico.

Por lo tanto, las instrucciones de ambas CPU lógicas se pueden ejecutar simultáneamente en los recursos de un procesador físico, que se dividen en cuatro clases:

  • duplicado (Duplicado);
  • totalmente compartido (Fully Shared);
  • con descriptores de elementos (Entrada Etiquetada);
  • dividido dinámicamente (particionado) dependiendo del modo de operación de ST0/ST1 o MT.

Sin embargo, la mayoría de las aplicaciones que se aceleran en sistemas multiprocesador también se pueden acelerar en una CPU con Hyper-Threading habilitado sin modificaciones. Pero también hay problemas: por ejemplo, si un proceso está en un ciclo de espera, puede consumir todos los recursos de la CPU física, impidiendo que funcione el segundo LP. Por lo tanto, el rendimiento al usar Hyper-Threading a veces puede caer (hasta un 20%). Para evitar esto, Intel recomienda utilizar la instrucción PAUSE en lugar de bucles de espera vacíos (introducidos en IA-32 a partir de Pentium 4). También se está trabajando seriamente en la optimización automática y semiautomática del código durante la compilación; por ejemplo, los compiladores de la serie Intel OpenMP C ++ / Fortran Compilers () han logrado un progreso significativo en este sentido.

Otro objetivo de la primera implementación de Hyper-Threading, según Intel, era minimizar el crecimiento en la cantidad de transistores, el área de la matriz y el consumo de energía, al mismo tiempo que aumentaba significativamente el rendimiento. La primera parte de este compromiso ya se ha cumplido: la adición de la compatibilidad con Hyper-Threading al Xeon/Xeon MP aumentó el área de matriz y el consumo de energía en menos del 5 %. Lo que pasó con la segunda parte (actuación), aún tenemos que comprobarlo.

parte práctica

Por razones obvias, no probamos sistemas de servidor de 4 procesadores en Xeon MP con Hyper-Threading habilitado. En primer lugar, es bastante laborioso. Y en segundo lugar, si nos decidimos por tal hazaña, todavía es ahora, menos de un mes después del anuncio oficial, es absolutamente irreal obtener este costoso equipo. Por ello, se decidió ceñirnos al mismo sistema con dos Intel Xeon de 2,2 GHz, sobre los que se realizaron las primeras pruebas de estos procesadores (ver el enlace al principio del artículo). El sistema se basó en una placa base Supermicro P4DC6+ (chipset Intel i860), contenía 512 MB de RDRAM, una tarjeta de video basada en GeForce3 (64 MB DDR, controladores Detonator 21.85), un disco duro Western Digital WD300BB y 6X DVD-ROM; Como sistema operativo se utilizó Windows 2000 Professional SP2.

Primero, algunas impresiones generales. Al instalar un Xeon con un núcleo Prestonia, el BIOS muestra un mensaje sobre la presencia de dos CPU al iniciar el sistema; si se instalan dos procesadores, el usuario ve un mensaje sobre cuatro CPU. El sistema operativo normalmente reconoce "ambos procesadores", pero solo si se cumplen dos condiciones.

Primero, en la configuración de CMOS, las últimas versiones de BIOS de las placas Supermicro P4DCxx ahora tienen el elemento Habilitar Hyper-Threading, sin el cual el sistema operativo solo reconocerá los procesadores físicos. En segundo lugar, ACPI se usa para decirle al sistema operativo que hay procesadores lógicos adicionales. Por lo tanto, para habilitar Hyper-Threading, la opción ACPI debe estar habilitada en la configuración de CMOS, y HAL (Capa de abstracción de hardware) con compatibilidad con ACPI también debe estar instalada para el propio sistema operativo. Afortunadamente, en Windows 2000 cambiar HAL de PC estándar (o MPS Uni-/Multiprocessor PC) a ACPI Uni-/Multiprocessor PC es fácil, cambiando el "controlador de la computadora" en el administrador de dispositivos. Al mismo tiempo, para Windows XP, la única forma legal de migrar a ACPI HAL es reinstalar el sistema sobre la instalación existente.

Pero ahora todos los preparativos están hechos, y nuestro Windows 2000 Pro ya cree firmemente que funciona en un sistema de dos procesadores (aunque en realidad solo hay un procesador instalado). Ahora, como de costumbre, es el momento de decidir los objetivos de las pruebas. Entonces queremos:

  • Evaluar el impacto de Hyper-Threading en el rendimiento de aplicaciones de varias clases.
  • Compare este efecto con el efecto de instalar un segundo procesador.
  • Compruebe cómo se asignan "justamente" los recursos al procesador lógico activo cuando el segundo LP está inactivo.

Para evaluar el rendimiento, tomamos un conjunto de aplicaciones ya familiares para los lectores, que se utilizaron para probar los sistemas de estaciones de trabajo. Comencemos, quizás, desde el final y verifiquemos la "igualdad" de las CPU lógicas. Todo es extremadamente simple: primero ejecutamos pruebas en un procesador con Hyper-Threading deshabilitado y luego repetimos el proceso con Hyper-Threading habilitado y usando solo una de las dos CPU lógicas (usando el Administrador de tareas). Dado que en este caso solo nos interesan los valores relativos, los resultados de todas las pruebas se reducen a la forma "más es mejor" y se normalizan (los indicadores de un sistema de un solo procesador sin Hyper-Threading se toman como una unidad).

Bueno, como puedes ver, las promesas de Intel se cumplen aquí: con solo un hilo activo, el rendimiento de cada uno de los dos LP es exactamente igual al rendimiento de una CPU física sin Hyper-Threading. El LP inactivo (tanto LP0 como LP1) en realidad se suspende y los recursos compartidos, en la medida en que se puede juzgar por los resultados obtenidos, se transfieren completamente al uso del LP activo.

Por lo tanto, sacamos la primera conclusión: dos procesadores lógicos en realidad tienen los mismos derechos, y habilitar Hyper-Threading "no interfiere" con el funcionamiento de un subproceso (que no es malo en sí mismo). Ahora veamos si esta inclusión "ayuda", y si es así, ¿dónde y cómo?

representación. Los resultados de cuatro pruebas en los paquetes de modelado 3D 3D Studio MAX 4.26, Lightwave 7b y A|W Maya 4.0.1 se combinan en un diagrama debido a su similitud.

En los cuatro casos (para Lightwave - dos escenas diferentes), la carga de la CPU en presencia de un procesador con Hyper-Threading deshabilitado se mantiene casi constantemente al 100%. Sin embargo, cuando Hyper-Threading está habilitado, el cálculo de las escenas se acelera (como resultado, incluso bromeamos sobre el uso de la CPU por encima del 100 %). En tres pruebas, podemos ver un aumento del rendimiento de Hyper-Threading del 14 al 18%; por un lado, no mucho en comparación con la segunda CPU, pero por otro lado, bastante bueno, considerando el efecto "gratuito" de este efecto. En una de las dos pruebas con Lightwave, la ganancia de rendimiento es casi nula (aparentemente, afecta la especificidad de esta aplicación llena de rarezas). Pero no hay ningún resultado negativo en ninguna parte, y un aumento notable en los otros tres casos es alentador. Y esto a pesar del hecho de que los procesos de renderizado en paralelo hacen un trabajo similar y, por supuesto, no pueden usar los recursos de la CPU física al mismo tiempo de la mejor manera.

Codificación de Photoshop y MP3. El códec GOGO-no-coda 2.39c es uno de los pocos que admite SMP y muestra un aumento del rendimiento del 34 % con el procesador dual. Al mismo tiempo, el efecto de Hyper-Threading en este caso es cero (no consideramos que una diferencia del 3% sea significativa). Pero en la prueba con Photoshop 6.0.1 (un script que consta de un gran conjunto de comandos y filtros), se puede ver una ralentización cuando se activa Hyper-Threading, aunque la segunda CPU física añade un 12% de rendimiento en este caso. Este, de hecho, es el primer caso en el que Hyper-Threading provoca una caída en el rendimiento...

OpenGL profesional. Hace tiempo que se sabe que SPEC ViewPerf y muchas otras aplicaciones OpenGL a menudo se ralentizan en los sistemas SMP.

OpenGL y doble procesador: por qué no son amigos

Muchas veces en los artículos llamamos la atención de los lectores sobre el hecho de que las plataformas de dos procesadores rara vez muestran una ventaja significativa sobre las de un solo procesador cuando se realizan pruebas profesionales de OpenGL. Y además, hay casos en los que instalar un segundo procesador, por el contrario, empeora el rendimiento del sistema al renderizar escenas tridimensionales dinámicas.

Naturalmente, no solo notamos esta rareza. Algunos evaluadores simplemente eludieron este hecho en silencio, por ejemplo, proporcionando resultados de comparación de SPEC ViewPerf solo para configuraciones de dos procesadores, evitando así las explicaciones "¿por qué un sistema de dos procesadores es más lento?". Otros hicieron todo tipo de suposiciones fantasiosas sobre la coherencia de la memoria caché, la necesidad de mantenerla, la sobrecarga resultante, etc. Y por alguna razón, nadie se sorprendió de que, por ejemplo, los procesadores estuvieran impacientes por controlar la coherencia con precisión en el renderizado OpenGL con ventanas (en su esencia "computacional", no es muy diferente de cualquier otra tarea computacional).

De hecho, la explicación, en nuestra opinión, es mucho más sencilla. Como sabe, una aplicación puede ejecutarse más rápido en dos procesadores que en uno si:

  • hay más de dos o más subprocesos de programa que se ejecutan simultáneamente (subprocesos);
  • estos subprocesos no interfieren con la ejecución de los demás; por ejemplo, no compiten por un recurso compartido, como una unidad externa o una interfaz de red.

Ahora, echemos un vistazo simplificado a cómo se ve el renderizado OpenGL, realizado por dos subprocesos. Si una aplicación, "viendo" dos procesadores, crea dos subprocesos de renderizado OpenGL, entonces para cada uno de ellos, de acuerdo con las reglas de OpenGL, se crea su propio contexto gl. En consecuencia, cada subproceso representa su propio contexto gl. Pero el problema es que para la ventana en la que se muestra la imagen, solo un contexto gl puede estar activo en cualquier momento. En consecuencia, los subprocesos en este caso simplemente "uno por uno" envían la imagen generada a la ventana, haciendo que su contexto sea alternativamente actual. No hace falta decir que este "intercalado de contexto" puede ser muy costoso en términos de gastos generales.

Además, como ejemplo, daremos gráficos del uso de dos CPU en varias aplicaciones que muestran escenas OpenGL. Todas las mediciones se realizaron sobre una plataforma con la siguiente configuración:

  • uno o dos Intel Xeon de 2,2 GHz (Hyper-Threading desactivado);
  • 512 MB de RAM;
  • Placa base Supermicro P4DC6+;
  • Tarjeta de video ASUS V8200 Deluxe (NVidia GeForce3, 64 MB DDR SDRAM, controladores Detonator 21.85);
  • Windows 2000 Profesional SP2;
  • modo de video 1280x1024x32 bpp, 85 Hz, Vsync deshabilitado.

Azul y rojo son gráficos de carga de CPU 0 y CPU 1, respectivamente. La línea del medio es el gráfico de uso de CPU final. Los tres gráficos corresponden a dos escenas de 3D Studio MAX 4.26 y parte de la prueba SPEC ViewPerf (AWadvs-04).


Uso de CPU: Animation 3D Studio MAX 4.26 - Anibal (con manipuladores).max


Uso de CPU: Animación 3D Studio MAX 4.26 - Rabbit.max


Uso de la CPU: SPEC ViewPerf 6.1.2 - AWadvs-04

El mismo patrón se repite en muchas otras aplicaciones que usan OpenGL. Dos procesadores no se molestan en trabajar en absoluto, y el uso total de la CPU está en el nivel de 50-60%. Al mismo tiempo, para un sistema de un solo procesador, en todos estos casos, el uso de la CPU se mantiene con confianza al nivel del 100 %.

Así que no sorprende que muchas aplicaciones OpenGL no sean mucho más rápidas en sistemas duales. Pues el hecho de que a veces incluso ralenticen tiene, en nuestra opinión, una explicación completamente lógica.

Podemos afirmar que con dos CPU lógicas, la caída del rendimiento es aún más significativa, lo cual es bastante comprensible: dos procesadores lógicos interfieren entre sí de la misma forma que dos físicos. Pero su rendimiento general, por supuesto, resulta ser menor en este caso, por lo que cuando Hyper-Threading está habilitado, disminuye incluso más que cuando se ejecutan dos CPU físicas. El resultado es predecible y la conclusión es simple: Hyper-Threading, como SMP "real", a veces está contraindicado para OpenGL.

aplicaciones CAD. La conclusión anterior está confirmada por los resultados de dos pruebas CAD: SPECapc para SolidEdge V10 y SPECapc para SolidWorks. El rendimiento gráfico de estas pruebas para Hyper-Threading es similar (aunque el resultado es ligeramente superior en el caso de un sistema SMP para SolidEdge V10). Pero los resultados de las pruebas CPU_Score que cargan el procesador te hacen pensar: 5-10 % de aumento de SMP y 14-19 % de ralentización de Hyper-Threading.

Pero al final del día, Intel reconoce honestamente el potencial de degradación del rendimiento con Hyper-Threading en algunos casos, por ejemplo, cuando se usan bucles de espera vacíos. Solo podemos suponer que esta es la razón (un examen detallado del código de SolidEdge y SolidWorks está más allá del alcance de este artículo). Después de todo, todos conocen el conservadurismo de los desarrolladores de aplicaciones CAD que prefieren una confiabilidad comprobada y no tienen prisa por reescribir el código teniendo en cuenta las nuevas tendencias en programación.

Resumiendo, o "Atención, la pregunta correcta"

Hyper-Threading funciona, no hay duda al respecto. Por supuesto, la tecnología no es universal: hay aplicaciones para las que Hyper-Threading "se vuelve malo", y en el caso de la expansión de esta tecnología, sería conveniente modificarlas. ¿Pero no le pasó lo mismo a MMX y SSE y le sigue pasando a SSE2?..

Sin embargo, esto plantea la cuestión de la aplicabilidad de esta tecnología a nuestras realidades. Inmediatamente descartaremos la opción de un sistema de un solo procesador en Xeon con Hyper-Threading (o lo consideraremos solo como temporal, antes de comprar un segundo procesador): incluso un aumento del rendimiento del 30% no justifica el precio en ningún caso. manera - entonces es mejor comprar un Pentium 4 normal. El número de CPU restantes es de dos o más.

Ahora imaginemos que estamos comprando un sistema Xeon de dos procesadores (por ejemplo, con Windows 2000/XP Professional). Hay dos CPU instaladas, Hyper-Threading está habilitado, el BIOS encuentra hasta cuatro procesadores lógicos, ahora despeguemos... Deténgase. Pero, ¿cuántos procesadores verá nuestro sistema operativo? Así es, dos. Solo dos, porque simplemente no está diseñado para un número mayor. Estos serán dos procesadores físicos, es decir, todo funcionará exactamente igual que con Hyper-Threading deshabilitado: no más lento (dos CPU lógicas "adicionales" simplemente se detendrán), pero no más rápido (verificado por pruebas adicionales, los resultados no se citan para su obviedad). Hmmm, no es muy divertido...

¿Lo que queda? Bueno, no instale Advanced Server o .NET Server en nuestra estación de trabajo, ¿de verdad? No, el sistema se instalará, reconocerá los cuatro procesadores lógicos y funcionará. Eso es solo el sistema operativo del servidor que se ve en la estación de trabajo, por decirlo suavemente, un poco extraño (sin mencionar los aspectos financieros). El único caso razonable es cuando nuestro sistema Xeon de dos procesadores actuará como un servidor (al menos algunos constructores no dudan en lanzar servidores en procesadores Xeon para estaciones de trabajo). Pero para las estaciones de trabajo duales con los sistemas operativos correspondientes, la aplicabilidad de Hyper-Threading sigue en duda. Intel ahora aboga activamente por la concesión de licencias de SO en función de la cantidad de CPU no lógicas, sino físicas. Las discusiones aún están en curso y, en general, mucho depende de si vemos un sistema operativo de estación de trabajo con soporte para cuatro procesadores.

Bueno, con los servidores, todo sale muy simple. Por ejemplo, un servidor avanzado de Windows 2000 instalado en un sistema Xeon de dos sockets con Hyper-Threading habilitado verá cuatro procesadores lógicos y funcionará sin problemas en él. Para evaluar lo que Hyper-Threading aporta a los sistemas de servidor, presentamos los resultados de Intel Microprocessor Software Labs para sistemas de dos procesadores en Xeon MP y varias aplicaciones de servidor de Microsoft.

Un aumento de rendimiento del 20-30% para un servidor de dos procesadores "gratis" es más que tentador (especialmente en comparación con la compra de un sistema "real" de 4 procesadores).

Entonces resulta que, por el momento, la aplicabilidad práctica de Hyper-Threading solo es posible en servidores. El problema con las estaciones de trabajo depende de la solución con la licencia del sistema operativo. Aunque una aplicación más de Hyper-Threading es bastante real, si los procesadores de escritorio obtienen soporte para esta tecnología. Por ejemplo (imaginemos) ¿qué tiene de malo un sistema Pentium 4 con soporte Hyper-Threading, en el que está instalado Windows 2000/XP Professional con soporte SMP? - desde servidores hasta sistemas de escritorio y móviles.



© 2022 skypenguin.ru - Consejos para el cuidado de mascotas