HTML abierto en una nueva pestaña. Cómo hacer clic en un botón para abrir una página en una nueva pestaña. La comunicación entre Windows es bidireccional.

  • Tutorial

En este artículo intentaré describir la terminología utilizada para describir sistemas capaces de ejecutar varios programas en paralelo, es decir, multinúcleo, multiprocesador, multiproceso. Diferentes tipos de paralelismo en la CPU IA-32 aparecieron en diferentes tiempos y en un orden algo inconsistente. Es bastante fácil confundirse en todo esto, especialmente teniendo en cuenta que los sistemas operativos ocultan cuidadosamente los detalles de las aplicaciones menos sofisticadas.

El propósito del artículo es mostrar que, a pesar de toda la diversidad posibles configuraciones En los sistemas multiprocesador, multinúcleo y multiproceso para los programas que se ejecutan en ellos, se crean oportunidades tanto para la abstracción (ignorando las diferencias) como para tener en cuenta los detalles (la capacidad de descubrir la configuración mediante programación).

Advertencia sobre los signos ®, ™ en el artículo

Mi comentario explica por qué los empleados de la empresa deberían utilizar avisos de derechos de autor en las comunicaciones públicas. En este artículo tuve que usarlos con bastante frecuencia.

UPC

Por supuesto, el término más antiguo, más utilizado y controvertido es "procesador".

En el mundo moderno, un procesador es algo que compramos en una hermosa caja minorista o en un paquete OEM no tan bueno. Una entidad indivisible insertada en un zócalo de la placa base. Incluso si no hay conector y no se puede quitar, es decir, si está bien soldado, es un solo chip.

Los sistemas móviles (teléfonos, tabletas, computadoras portátiles) y la mayoría de las computadoras de escritorio tienen un procesador. Las estaciones de trabajo y los servidores a veces cuentan con dos o más procesadores en una sola placa base.

Admitir múltiples CPU en un solo sistema requiere numerosos cambios de diseño. Como mínimo, es necesario asegurar su conexión física (prever varios sockets en la placa base), resolver problemas de identificación del procesador (ver más adelante en este artículo, así como mi nota anterior), coordinar los accesos a la memoria e interrumpir la entrega (el El controlador de interrupciones debe poder enrutar interrupciones para varios procesadores) y, por supuesto, soporte del sistema operativo. Desafortunadamente, no pude encontrar una mención documental de la creación del primer sistema multiprocesador con procesadores Intel, pero Wikipedia afirma que Sequent Computer Systems ya los suministró en 1987, utilizando procesadores Intel 80386. El soporte para múltiples chips en un sistema se está generalizando. comenzando con Intel® Pentium.

Si hay varios procesadores, cada uno de ellos tiene su propio conector en la placa. Cada uno de ellos tiene copias completas independientes de todos los recursos, como registros, dispositivos de ejecución, cachés. Comparten una memoria común: la RAM. La memoria se puede conectar con ellos de varias maneras y nada triviales, pero esta es una historia aparte que escapa al alcance de este artículo. Lo importante es que, en cualquier caso, se debe crear para los programas ejecutables la ilusión de una memoria compartida homogénea y accesible desde todos los procesadores incluidos en el sistema.


¡Listo para despegar! Placa de escritorio Intel® D5400XS

Centro

Históricamente, los núcleos múltiples en Intel IA-32 aparecieron más tarde que Intel® HyperThreading, pero en la jerarquía lógica viene a continuación.

Parecería que si un sistema tiene más procesadores, entonces su rendimiento es mayor (en tareas que pueden utilizar todos los recursos). Sin embargo, si el costo de la comunicación entre ellos es demasiado alto, todos los beneficios del paralelismo se ven anulados por los largos retrasos en la transferencia de datos comunes. Esto es exactamente lo que se observa en sistemas multiprocesador Ah, tanto física como lógicamente están muy lejos el uno del otro. Para una comunicación eficaz en tales condiciones, es necesario idear buses especializados, como Intel® QuickPath Interconnect. Por supuesto, todo esto no reduce el consumo de energía, el tamaño y el precio de la solución final. Una alta integración de componentes debería ayudar: los circuitos que ejecutan partes de un programa en paralelo deben acercarse entre sí, preferiblemente en un chip. En otras palabras, un procesador debería organizar varios núcleos, idénticos entre sí en todo, pero trabajando de forma independiente.

Los primeros procesadores Intel IA-32 multinúcleo se introdujeron en 2005. Desde entonces, el número promedio de núcleos en servidores, computadoras de escritorio y ahora plataformas móviles está creciendo constantemente.

A diferencia de dos procesadores de un solo núcleo en el mismo sistema que solo comparten memoria, dos núcleos también pueden compartir cachés y otros recursos relacionados con la memoria. La mayoría de las veces, los cachés del primer nivel permanecen privados (cada núcleo tiene el suyo propio), mientras que el segundo y tercer nivel pueden ser compartidos o separados. Esta organización del sistema le permite reducir los retrasos en la entrega de datos entre núcleos vecinos, especialmente si están trabajando en una tarea común.


Micrografía de un procesador Intel de cuatro núcleos con nombre en clave Nehalem. Se asignan núcleos separados, un caché común de tercer nivel, así como enlaces QPI a otros procesadores y un controlador de memoria común.

hiperhilo

Hasta aproximadamente 2002, la única forma de conseguir un sistema IA-32 capaz de ejecutar dos o más programas en paralelo era utilizar sistemas multiprocesador. El Intel® Pentium® 4, así como la línea Xeon con nombre en código Foster (Netburst), introdujo una nueva tecnología, hyperthreads o hyperthreads, Intel® HyperThreading (en adelante HT).

No hay nada nuevo bajo el sol. HT es caso especial lo que en la literatura se llama multihilo simultáneo (SMT). A diferencia de los núcleos "reales", que son copias completas e independientes, en el caso de HT, solo una parte de los nodos internos, principalmente responsables de almacenar el estado arquitectónico (registros), están duplicados en un procesador. Los nodos ejecutivos responsables de organizar y procesar los datos siguen siendo singulares y en un momento dado son utilizados como máximo por uno de los hilos. Al igual que los núcleos, los hiperprocesos comparten cachés, pero el nivel depende del sistema específico.

No intentaré explicar todos los pros y los contras de los diseños SMT en general y de los diseños HT en particular. El lector interesado puede encontrar una discusión bastante detallada sobre la tecnología en muchas fuentes y, por supuesto, en Wikipedia. Sin embargo, señalaré lo siguiente punto importante, explicando los límites actuales en la cantidad de hiperprocesos en la producción del mundo real.

Restricciones de hilo
¿En qué casos se justifica la presencia de núcleos múltiples "injustos" en forma de HT? Si un subproceso de aplicación no puede cargar todos los nodos de ejecución dentro del kernel, entonces se pueden "prestar" a otro subproceso. Esto es típico de aplicaciones que tienen un cuello de botella no en el cálculo, sino en el acceso a los datos, es decir, que a menudo generan errores de caché y tienen que esperar a que los datos se entreguen desde la memoria. Durante este tiempo, el núcleo sin HT se verá obligado a permanecer inactivo. La presencia de HT le permite cambiar rápidamente los nodos de ejecución libres a otro estado arquitectónico (ya que está duplicado) y ejecutar sus instrucciones. Este es un caso especial de una técnica llamada ocultación de latencia, cuando una operación larga, durante la cual recursos útiles inactivo, disfrazado ejecución paralela otras tareas. Si la aplicación ya tiene un alto grado de utilización de los recursos del kernel, la presencia de hiperprocesos no permitirá la aceleración; aquí se necesitan kernels "honestos".

Escenarios típicos para escritorio y aplicaciones de servidor, diseñados para arquitecturas de máquinas de uso general, tienen potencial para el paralelismo implementado mediante HT. Sin embargo, este potencial se está agotando rápidamente. Quizás por esta razón, en casi todos los procesadores IA-32 el número de hiperprocesos de hardware no supera los dos. En escenarios típicos, la ganancia al usar tres o más hyperthreads sería pequeña, pero la pérdida en el tamaño del troquel, el consumo de energía y el costo es significativa.

Una situación diferente se observa en las tareas típicas realizadas con aceleradores de vídeo. Por tanto, estas arquitecturas se caracterizan por el uso de tecnología SMT con un mayor número de hilos. Dado que los coprocesadores Intel® Xeon Phi (introducidos en 2010) son ideológica y genealógicamente bastante cercanos a las tarjetas de video, es posible que tengan cuatro Hyperthreading en cada núcleo: una configuración exclusiva del IA-32.

Procesador lógico

De los tres “niveles” de paralelismo descritos (procesadores, núcleos, hiperprocesos), algunos o incluso todos pueden faltar en un sistema en particular. esto esta influenciado Configuración del BIOS(los núcleos múltiples y los subprocesos múltiples se desactivan de forma independiente), funciones de microarquitectura (por ejemplo, HT estuvo ausente en Intel® Core™ Duo, pero regresó con el lanzamiento de Nehalem) y eventos del sistema (los servidores multiprocesador pueden desactivarse procesadores fallidos si se detectan fallas y continúan “volando” en los restantes). ¿Cómo es visible este zoológico de concurrencia de múltiples niveles para el sistema operativo y, en última instancia, para las aplicaciones?

Además, por conveniencia, denotamos la cantidad de procesadores, núcleos y subprocesos en un determinado sistema por tres ( incógnita, y, z), Dónde incógnita es el número de procesadores, y- el número de núcleos en cada procesador, y z- número de hiperprocesos en cada núcleo. De ahora en adelante llamaré a estos tres topología- un término establecido que tiene poco que ver con la rama de las matemáticas. Trabajar pag = xyz define el número de entidades llamadas procesadores lógicos sistemas. Define el número total de contextos de procesos de aplicación independientes en un sistema con memoria compartida ejecutándose en paralelo, que el sistema operativo se ve obligado a tener en cuenta. Digo "forzado" porque no puede controlar el orden de ejecución de dos procesos en diferentes procesadores lógicos. Esto también se aplica a los hiperprocesos: aunque se ejecutan "secuencialmente" en el mismo núcleo, el orden específico lo dicta el hardware y no puede ser observado ni controlado por programas.

Muy a menudo, el sistema operativo se oculta finalizar aplicaciones características de la topología física del sistema en el que se ejecuta. Por ejemplo, las siguientes tres topologías: (2, 1, 1), (1, 2, 1) y (1, 1, 2): el sistema operativo representará dos procesadores lógicos, aunque el primero de ellos tiene dos procesadores, el el segundo, dos núcleos y el tercero, solo dos subprocesos.


Tarea de Windows Manager muestra 8 procesadores lógicos; ¿Pero cuánto cuesta en procesadores, núcleos e hiperprocesos?


La parte superior de Linux muestra 4 procesadores lógicos.

Esto es muy conveniente para los creadores de aplicaciones: no tienen que lidiar con funciones de hardware que a menudo no son importantes para ellos.

Definición de software de topología

Por supuesto, abstraer la topología en un único número de procesadores lógicos en algunos casos crea suficientes motivos para confusión y malentendidos (en acaloradas disputas en Internet). Las aplicaciones informáticas que desean obtener el máximo rendimiento del hardware requieren un control detallado sobre dónde se ubicarán sus subprocesos: más cerca unos de otros en hiperprocesos adyacentes o, por el contrario, más lejos en diferentes procesadores. La velocidad de comunicación entre procesadores lógicos dentro del mismo núcleo o procesador es mucho mayor que la velocidad de transferencia de datos entre procesadores. La posibilidad de heterogeneidad en la organización de la memoria de trabajo también complica el panorama.

La información sobre la topología del sistema en su conjunto, así como la posición de cada procesador lógico en el IA-32, está disponible mediante la instrucción CPUID. Desde la aparición de los primeros sistemas multiprocesador, el esquema de identificación del procesador lógico se ha ampliado varias veces. Hasta la fecha, sus partes están contenidas en las hojas 1, 4 y 11 del CPUID. Qué hoja mirar se puede determinar a partir del siguiente diagrama de flujo tomado del artículo:

No te aburriré con todos los detalles aquí. partes individuales este algoritmo. Si hay interés, la siguiente parte de este artículo puede dedicarse a ello. Remitiré al lector interesado a, que examina esta cuestión con el mayor detalle posible. Aquí primero describiré brevemente qué es APIC y cómo se relaciona con la topología. A continuación, considere trabajar con la hoja 0xB (once en decimal), que está en momento presente es la última palabra en “apico-building”.

ID APIC
APIC local (controlador de interrupciones programable avanzado) es un dispositivo (ahora parte del procesador) responsable de manejar las interrupciones que llegan a un procesador lógico específico. Cada procesador lógico tiene su propio APIC. Y cada uno de ellos en el sistema debe tener un valor de ID APIC único. Este número lo utilizan los controladores de interrupciones para direccionar al entregar mensajes y todos los demás (por ejemplo, el sistema operativo) para identificar los procesadores lógicos. La especificación para este controlador de interrupciones ha evolucionado desde Intel 8259 PIC pasando por Dual PIC, APIC y xAPIC hasta x2APIC.

Actualmente, el ancho del número almacenado en el APIC ID ha alcanzado los 32 bits, aunque en el pasado estaba limitado a 16, y antes incluso a sólo 8 bits. Hoy en día, los restos de los viejos tiempos están dispersos por todo el CPUID, pero CPUID.0xB.EDX devuelve los 32 bits del APIC ID. En cada procesador lógico que ejecute de forma independiente la instrucción CPUID, se devolverá un valor diferente.

Aclaración de los lazos familiares.
El valor de APIC ID en sí no dice nada sobre la topología. Para saber qué dos procesadores lógicos están ubicados dentro de un procesador físico (es decir, son hiperprocesos "hermanos"), cuáles están dentro del mismo procesador y cuáles están en procesadores completamente diferentes, debe comparar sus valores de ID APIC. Dependiendo del grado de parentesco, algunos de sus bits coincidirán. Esta información está contenida en las sublistas CPUID.0xB, que están codificadas por operandos en ECX. Cada uno de ellos describe la posición del campo de bits de uno de los niveles de topología en EAX (más precisamente, la cantidad de bits que deben desplazarse hacia la derecha en el APIC ID para eliminar niveles más bajos topología), así como el tipo de esta capa (hyperthread, núcleo o procesador) en ECX.

Para procesadores lógicos ubicados dentro del mismo núcleo, todos los bits de ID APIC coincidirán, excepto los que pertenecen al campo SMT. Para procesadores lógicos ubicados en el mismo procesador, todos los bits excepto los campos Core y SMT. Dado que el número de subhojas para CPUID.0xB puede aumentar, este esquema nos permitirá soportar la descripción de topologías con un mayor número de niveles, si surge la necesidad en el futuro. Además, será posible introducir niveles intermedios entre los existentes.

Una consecuencia importante de la organización de este esquema es que en el conjunto de todos los ID APIC de todos los procesadores lógicos del sistema puede haber "agujeros", es decir no irán secuencialmente. Por ejemplo, en procesador multinúcleo Con HT desactivado, todos los ID de APIC pueden resultar pares, ya que el bit menos significativo, responsable de codificar el número de hiperproceso, siempre será cero.

Observo que CPUID.0xB no es la única fuente de información sobre los procesadores lógicos disponibles para el sistema operativo. Una lista de todos los procesadores disponibles, junto con sus valores de ID APIC, está codificada en la tabla MADT ACPI.

Sistemas operativos y topología.

Los sistemas operativos proporcionan información sobre la topología de los procesadores lógicos a las aplicaciones que utilizan sus propias interfaces.

En Linux, la información de topología está contenida en el pseudoarchivo /proc/cpuinfo, así como en la salida del comando dmidecode. En el siguiente ejemplo, filtro el contenido de cpuinfo en algún sistema de cuatro núcleos sin HT, dejando solo las entradas relacionadas con la topología:

Texto oculto

ggg@shadowbox:~$ cat /proc/cpuinfo |grep "procesador\|físico\ id\|hermanos\|núcleo\|núcleos\|apicid" procesador: 0 id físico: 0 hermanos: 4 id de núcleo: 0 núcleos de cpu: 2 apicid: 0 apicid inicial: 0 procesador: 1 id física: 0 hermanos: 4 id de núcleo: 0 núcleos de cpu: 2 apicid: 1 apicid inicial: 1 procesador: 2 id físico: 0 hermanos: 4 id de núcleo: 1 núcleos de cpu: 2 apicid: 2 apicid inicial: 2 procesador: 3 identificación física: 0 hermanos: 4 identificación del núcleo: 1 núcleos de CPU: 2 apicid: 3 apicid inicial: 3

En FreeBSD, la topología se informa mediante el mecanismo sysctl en la variable kern.sched.topology_spec como XML:

Texto oculto

usuario@host:~$ sysctl kern.sched.topology_spec kern.sched.topology_spec: 0, 1, 2, 3, 4, 5, 6, 7 0, 1, 2, 3, 4, 5, 6, 7 0, 1 grupo HILOgrupo SMT 2, 3 grupo HILOgrupo SMT 4, 5 grupo HILOgrupo SMT 6, 7 grupo HILOgrupo SMT

En MS Windows 8, la información de topología se puede ver en el administrador de tareas. Administrador de tareas.

Les dije por qué el crecimiento de las frecuencias de los procesadores se ha estancado en varios gigahercios. Ahora hablemos de por qué el desarrollo del número de núcleos en los procesadores de los usuarios también es extremadamente lento: por ejemplo, los dos primeros honestos procesador nuclear(donde ambos núcleos estaban en un chip), construido sobre la arquitectura x86, apareció ya en 2006, hace 12 años: era una línea Núcleo Intel Dúo. Y desde entonces, los procesadores de 2 núcleos no han abandonado la arena, además, se están desarrollando activamente: por ejemplo, el otro día portátil lenovo con un procesador construido con la última tecnología de proceso de 10 nm (para arquitectura x86). Y sí, como habrás adivinado, este procesador tiene exactamente 2 núcleos.

Para los procesadores de consumo, la cantidad de núcleos se ha estancado en 6 desde 2010, con el lanzamiento de la línea Fenómeno AMD X6: sí, AMD FX no eran procesadores honestos de 8 núcleos (había 4 APU), al igual que Ryzen 7 son dos bloques de 4 núcleos ubicados uno al lado del otro en el troquel. Y aquí, por supuesto, surge la pregunta: ¿por qué es así? Después de todo, las mismas tarjetas de video, que en 1995-96 eran esencialmente "de un solo cabezal" (es decir, tenían 1 sombreador), ahora han logrado aumentar su número a varios miles; por ejemplo, en Nvidia Titan V ya hay ¡5120 de ellos! Al mismo tiempo, durante un período mucho más largo de desarrollo de la arquitectura x86, los procesadores de los usuarios se decidieron por 6 núcleos honestos por chip y las CPU para PC de alto rendimiento, por 18, es decir, un par de órdenes de magnitud menos que el de las tarjetas de video. ¿Por qué? Hablaremos de esto a continuación.

arquitectura de CPU

Inicialmente, todos los procesadores Intel x86 se basaban en la arquitectura CISC (Computación de conjunto de instrucciones complejas, procesadores con conjunto completo instrucciones) - es decir, implementan el número máximo de instrucciones "para todas las ocasiones". Por un lado, esto es genial: por ejemplo, en los años 90, la CPU era responsable tanto de la representación de la imagen como del sonido (hubo un truco de vida: si el juego va lento, apagar el sonido puede ser útil). E incluso ahora el procesador es una especie de cosechadora que puede hacerlo todo, y esto también es un problema: paralelizar una tarea aleatoria en varios núcleos no es una tarea trivial. Digamos que con dos núcleos lo puedes hacer de forma sencilla: “colgamos” el sistema en un núcleo y listo tareas en segundo plano, por el otro, sólo la aplicación. Esto siempre funcionará, pero el aumento de rendimiento estará lejos del doble, como es habitual. procesos en segundo plano requieren muchos menos recursos que la pesada tarea actual.

Izquierda - diagrama GPU Nvidia GTX 980 Ti, donde puedes ver 2816 núcleos CUDA combinados en clústeres. A la derecha hay una foto del cristal del procesador. AMD Ryzen, donde son visibles 4 grandes núcleos.

Ahora imaginemos que no tenemos dos, sino 4 o incluso 8 núcleos. Sí, en problemas de archivo y otros cálculos, la paralelización funciona bien (y por eso lo mismo procesadores de servidor puede tener varias docenas de núcleos). Pero, ¿qué pasa si tenemos una tarea con un resultado aleatorio (que, lamentablemente, es la mayoría), digamos, un juego? Después de todo, aquí cada nueva acción depende completamente del jugador, por lo que "repartir" dicha carga entre varios núcleos no es una tarea fácil, razón por la cual los desarrolladores a menudo "escriben a mano" lo que hacen los núcleos: por ejemplo, solo se puede estar ocupado por acciones de procesamiento inteligencia artificial, otro para ser responsable sólo de sonido envolvente, etcétera. Es casi imposible cargar de esta forma incluso un procesador de 8 núcleos, que es lo que vemos en la práctica.

Con las tarjetas de video, todo es más simple: la GPU, de hecho, se ocupa de los cálculos y solo de ellos, y la cantidad de tipos de cálculos es limitada y pequeña. Por lo tanto, en primer lugar, es posible optimizar los propios núcleos informáticos (Nvidia los llama CUDA) específicamente para las tareas requeridas y, en segundo lugar, dado que se conocen todas las tareas posibles, el proceso de paralelizarlas no causa dificultades. Y en tercer lugar, el control no lo llevan a cabo sombreadores individuales, sino módulos informáticos, que incluyen entre 64 y 192 sombreadores, por lo que una gran cantidad de sombreadores no es un problema.

Consumo de energía

Una de las razones para abandonar la carrera de frecuencias es el fuerte aumento del consumo de energía. Como ya expliqué en el artículo sobre la desaceleración del crecimiento. frecuencias de CPU, la disipación de calor del procesador es proporcional al cubo de la frecuencia. En otras palabras, si a una frecuencia de 2 Procesador GHz emite 100 W de calor, que, en principio, se puede eliminar sin problemas con un enfriador de aire, luego a 4 GHz ya serán 800 W, que se pueden eliminar en el mejor de los casos con una cámara de evaporación con nitrógeno líquido (aunque Hay que tener en cuenta que la fórmula sigue siendo aproximada, y en El procesador no solo tiene núcleos computacionales, sino que también es muy posible obtener el orden de los números con su ayuda).

Por lo tanto, aumentar la amplitud fue una excelente solución: entonces, en términos generales, un procesador de doble núcleo a 2 GHz consumirá 200 W, pero un procesador de un solo núcleo a 3 GHz consumirá casi 340 W, es decir, la ganancia en disipación de calor es más del 50%, mientras que en tareas con buena optimización para subprocesos múltiples, una CPU de doble núcleo de baja frecuencia seguirá siendo más rápida que una de un solo núcleo de alta frecuencia.


Un ejemplo de cámara de evaporación con nitrógeno líquido para enfriar CPU extremadamente overclockeadas.

Parecería que esto es una bonanza, rápidamente fabricamos un procesador de 10 núcleos con una frecuencia de 1 GHz, que generará solo un 25% más de calor que una CPU de un solo núcleo con 2 GHz (si un procesador de 2 GHz genera 100 W de calor, luego 1 GHz - sólo 12,5 W, 10 núcleos - alrededor de 125 W). Pero aquí nos topamos rápidamente con el hecho de que no todas las tareas están bien paralelizadas, por lo que en la práctica a menudo resulta que una CPU de un solo núcleo mucho más barata con 2 GHz será significativamente más rápida que una CPU de 10 núcleos mucho más cara con 1 GHz. Pero todavía existen procesadores de este tipo, en el segmento de servidores, donde no hay problemas con la paralelización de tareas, y una CPU de 40 a 60 núcleos con frecuencias de 1,5 GHz a menudo resulta ser muchas veces más rápida que los procesadores de 8 a 10 núcleos con frecuencias de 4 GHz, al tiempo que asigna una cantidad de calor comparable.

Por lo tanto, los fabricantes de CPU deben asegurarse de que el rendimiento de un solo subproceso no se vea afectado a medida que crecen los núcleos, y teniendo en cuenta el hecho de que el límite de disipación de calor en una PC doméstica típica se "encontró" hace bastante tiempo (esto es alrededor de 60 -100 W), hay formas de aumentar la cantidad de núcleos con el mismo rendimiento de un solo núcleo y la misma disipación de calor, solo hay dos opciones: optimizar la arquitectura del procesador en sí, aumentando su rendimiento por ciclo de reloj, o para reducir el proceso técnico. Pero, lamentablemente, ambos progresan cada vez más lentamente: en más de 30 años de existencia de procesadores x86, ya se ha "pulido" casi todo lo posible, por lo que el aumento es, en el mejor de los casos, del 5% por generación, y se reduce el coste técnico. El proceso se está volviendo cada vez más difícil debido a los problemas fundamentales de crear transistores que funcionen correctamente (con dimensiones de decenas de nanómetros, los efectos cuánticos ya comienzan a afectar, es difícil producir un láser adecuado, etc.); por lo tanto, lamentablemente, es cada vez más difícil. para aumentar el número de núcleos.

Tamaño del cristal

Si miramos el área de los chips de procesador hace 15 años, veremos que solo era de unos 100-150 milímetros cuadrados. Hace unos 5-7 años, las virutas “crecieron” hasta 300-400 mm2 y... el proceso prácticamente se detuvo. ¿Por qué? Todo es simple: en primer lugar, es muy difícil producir cristales gigantes, por lo que la cantidad de defectos aumenta considerablemente y, en consecuencia, el costo final de la CPU.

En segundo lugar, aumenta la fragilidad: un cristal grande se puede dividir muy fácilmente y sus diferentes bordes pueden calentarse de manera diferente, lo que a su vez puede causar daños físicos.


Comparación de cristales Intel Pentium 3 y Core i9.

Bueno, en tercer lugar, la velocidad de la luz también introduce su propia limitación: sí, aunque es grande, no es infinita, y con cristales grandes esto puede provocar un retraso o incluso imposibilitar el funcionamiento del procesador.

Como resultado tamaño máximo El cristal se ha detenido en unos 500 mm cuadrados y es poco probable que crezca más; por lo tanto, para aumentar el número de núcleos, es necesario reducir sus tamaños. Parecería que Nvidia o AMD pudieron hacer esto y sus GPU tienen miles de sombreadores. Pero aquí debe entenderse que los sombreadores no son núcleos completos; por ejemplo, no tienen su propio caché, sino solo uno común, además, el "afilado" para ciertas tareas hizo posible "deshacerse" de todo lo innecesario. ellos, lo que nuevamente afectó su tamaño. Y la CPU no solo tiene núcleos completos con su propio caché, sino que a menudo los gráficos y varios controladores se encuentran en el mismo cristal; por lo que, al final, nuevamente, casi la única forma de aumentar la cantidad de núcleos con el mismo tamaño de cristal Son la misma optimización y la misma reducción del proceso técnico, y, como ya escribí, van lentamente.

Optimización de la operación

Imaginemos que tenemos un equipo de personas realizando varias tareas, algunos de los cuales requieren el trabajo de varias personas al mismo tiempo. Si hay dos personas en él, podrán ponerse de acuerdo y trabajar de forma eficaz. Cuatro es más difícil, pero el trabajo también resultará bastante eficaz. ¿Qué pasa si hay 10 o incluso 20 personas? Aquí ya necesitamos algún medio de comunicación entre ellos, de lo contrario habrá “distorsiones” en el trabajo cuando alguien no esté ocupado con nada. En los procesadores Intel, este medio de comunicación es un bus en anillo, que conecta todos los núcleos y les permite intercambiar información entre sí.

Pero ni siquiera esto ayuda: por ejemplo, a las mismas frecuencias, procesadores de 10 y 18 núcleos de generación intel Los Skylake-X difieren en rendimiento solo en un 25-30%, aunque en teoría deberían ser hasta un 80%. La razón es precisamente el autobús: por muy bueno que sea, seguirá habiendo retrasos y tiempos de inactividad, y cuantos más núcleos, peor será la situación. Pero ¿por qué entonces no existen tales problemas en las tarjetas de video? Es simple: si se puede pensar en los núcleos del procesador como personas que pueden realizar diversas tareas, entonces las unidades informáticas de las tarjetas de video se parecen más a robots en una línea de ensamblaje que solo pueden realizar ciertas instrucciones. Básicamente, no necesitan "estar de acuerdo"; por lo tanto, a medida que aumenta su número, la eficiencia disminuye más lentamente: por ejemplo, la diferencia en CUDA entre 1080 (2560 unidades) y 1080 Ti (3584 unidades) es del 40%, en la práctica. es alrededor del 25-35%, entonces las pérdidas son significativamente menores.


Cuantos más núcleos, peor funcionan juntos, hasta llegar a cero ganancia de rendimiento a medida que aumenta el número de núcleos.

Por lo tanto, no tiene ningún sentido aumentar el número de núcleos: el aumento de cada nuevo núcleo será cada vez menor. Además, resolver este problema es bastante difícil: es necesario desarrollar un bus que permita transferir datos entre dos núcleos cualesquiera con el mismo retraso. La topología en estrella es la más adecuada en este caso, cuando todos los núcleos deberían estar conectados a un concentrador, pero en realidad nadie ha realizado tal implementación todavía.

Entonces, al final, como vemos, aumentar la frecuencia y aumentar el número de núcleos es una tarea bastante difícil y el juego a menudo no vale la pena. Y en un futuro próximo es poco probable que algo cambie seriamente, ya que todavía no se ha inventado nada mejor que los cristales de silicio.

La carrera por un rendimiento adicional en el mercado de procesadores solo la pueden ganar aquellos fabricantes que, basándose en las tecnologías de producción actuales, puedan proporcionar un equilibrio razonable entre la velocidad del reloj y el número de núcleos de procesamiento. Gracias a la transición a procesos técnicos de 90 y 65 nm, fue posible crear procesadores con un gran número núcleos. En gran medida, esto se debió a las nuevas capacidades para ajustar la disipación de calor y el tamaño de los núcleos, razón por la cual hoy asistimos a la aparición de un número cada vez mayor de procesadores de cuatro núcleos. Pero ¿qué pasa con el software? ¿Qué tan bien escala de uno a dos o cuatro núcleos?

En un mundo ideal, los programas optimizados para subprocesos múltiples permiten que el sistema operativo distribuya múltiples subprocesos entre los núcleos de procesamiento disponibles, ya sea un solo procesador o varios procesadores, un solo núcleo o varios. Agregar nuevos núcleos permite mayores ganancias de rendimiento que cualquier aumento en la velocidad del reloj. Esto realmente tiene sentido: más Los trabajadores casi siempre completarán una tarea más rápido que un número menor de trabajadores más rápidos.

¿Pero tiene sentido equipar procesadores con cuatro o incluso más núcleos? ¿Hay suficiente trabajo para cargar cuatro núcleos o más? No olvidemos que es muy complicado repartir el trabajo entre los núcleos para que interfaces físicas como HyperTransport (AMD) o Front Side Bus (Intel) no se conviertan en un cuello de botella. Hay una tercera opción: el mecanismo que distribuye la carga entre los núcleos, es decir, el administrador del sistema operativo, también puede convertirse en un cuello de botella.

La transición de AMD de uno a dos núcleos fue casi perfecta, ya que la compañía no aumentó el paquete térmico a niveles extremos, como fue el caso de los procesadores Intel Pentium 4. Procesadores Athlon Los 64 X2 eran caros pero bastante razonables, y la línea Pentium D 800 era famosa por su excelente rendimiento. Pero los procesadores Intel de 65 nm y, en particular, línea central 2 cambiaron la imagen. Intel pudo combinar dos procesadores Core 2 Duo en un solo paquete, a diferencia de AMD, lo que dio como resultado el moderno Core 2 Quad. AMD promete lanzar sus propios procesadores de cuatro núcleos a finales de este año. Procesadores fenomenales X4.

En nuestro artículo veremos Configuración central 2 Duo de cuatro núcleos, dos núcleos y un núcleo. Y veamos qué tan bien escala el rendimiento. ¿Vale la pena cambiar a cuatro núcleos hoy?

Un núcleo

El término "núcleo único" se refiere a un procesador que tiene un núcleo informático. Esto incluye casi todos los procesadores desde el comienzo de la arquitectura 8086 hasta el Athlon 64 y el Intel Pentium 4. Hasta que el proceso de fabricación se volvió lo suficientemente delgado como para crear dos núcleos informáticos en un solo chip, la transición a una tecnología de proceso más pequeña se utilizó para reducir voltaje de funcionamiento, aumentar la velocidad del reloj o agregar bloques funcionales y memoria caché.

Ejecutar un procesador de un solo núcleo a altas velocidades de reloj puede brindar un mejor rendimiento para una sola aplicación, pero procesador similar Sólo se puede ejecutar un programa (hilo) a la vez. Intel ha implementado el principio Hyper-Threading, que emula la presencia de múltiples núcleos para el sistema operativo. La tecnología HT hizo posible cargar mejor las largas tuberías de los procesadores Pentium 4 y Pentium D. Por supuesto, el aumento de rendimiento fue pequeño, pero la capacidad de respuesta del sistema fue definitivamente mejor. Y en un entorno multitarea, esto puede ser aún más importante, ya que puedes trabajar mientras tu computadora realiza una tarea específica.

Dado que los procesadores de doble núcleo son tan baratos hoy en día, no recomendamos optar por procesadores de un solo núcleo a menos que desee ahorrar hasta el último centavo.


Núcleo del procesador 2 Extreme X6800 en el momento de su lanzamiento era el más rápido de la línea Intel Core 2, funcionando a 2,93 GHz. Hoy en día, los procesadores de doble núcleo han alcanzado los 3,0 GHz, aunque a una frecuencia de bus FSB1333 más alta.

Actualizar a dos núcleos de procesador significa el doble de potencia de procesamiento, pero sólo en aplicaciones optimizadas para subprocesos múltiples. Normalmente, estas aplicaciones incluyen programas profesionales quien necesita alto potencia informática. Pero un procesador de doble núcleo todavía tiene sentido, incluso si sólo usas tu computadora para correo electrónico, navegar por Internet y trabajar con documentos de oficina. Por un lado, los modelos modernos de procesadores de doble núcleo no consumen mucha más energía que los modelos de un solo núcleo. Por otro lado, el segundo núcleo informático no sólo aumenta el rendimiento, sino que también mejora la capacidad de respuesta del sistema.

¿Alguna vez has esperado a que WinRAR o WinZIP terminen de comprimir archivos? En una máquina de un solo núcleo, es poco probable que pueda cambiar rápidamente entre ventanas. Incluso la reproducción de DVD puede exigir tanto a un solo núcleo como a una tarea compleja. El procesador de doble núcleo facilita la ejecución de múltiples aplicaciones simultáneamente.

Los procesadores AMD de doble núcleo contienen dos núcleos completos con memoria caché, un controlador de memoria integrado y una conexión cruzada que proporciona intercambio a la memoria y a la interfaz HyperTransport. Intel tomó un camino similar al del primer Pentium D, instalando dos núcleos Pentium 4 en el procesador físico, ya que el controlador de memoria es parte del chipset. autobús del sistema debe usarse tanto para la comunicación entre núcleos como para acceder a la memoria, lo que impone ciertas limitaciones en el rendimiento. El procesador Core 2 Duo está equipado con núcleos más avanzados que dan mejor rendimiento por reloj y la mejor relación rendimiento por vatio. Los dos núcleos comparten una caché L2 común, que permite el intercambio de datos sin utilizar el bus del sistema.

El procesador Core 2 Quad Q6700 funciona a 2,66 GHz, utilizando dos internos Centro 2 dúo.

Si hoy en día hay muchas razones para cambiar a procesadores de doble núcleo, cuatro núcleos todavía no parecen tan convincentes. Una razón es la optimización limitada de programas para múltiples subprocesos, pero también existen ciertos problemas arquitectónicos. Aunque AMD hoy critica a Intel por incluir dos matrices de doble núcleo en un solo procesador, considerándolo no una "verdadera" CPU de cuatro núcleos, el enfoque de Intel funciona bien porque los procesadores en realidad ofrecen un rendimiento de cuatro núcleos. Desde el punto de vista de la producción es más fácil obtener alto nivel rendimiento de cristales utilizables y producir más productos con núcleos pequeños, que luego se pueden combinar para crear un producto nuevo y más potente utilizando una nueva tecnología de proceso. En cuanto al rendimiento, existen cuellos de botella: dos cristales se comunican entre sí a través del bus del sistema, por lo que es muy difícil gestionar varios núcleos distribuidos en varios cristales. Aunque la presencia de varios cristales permite asegurar mejores ahorros energía y ajustar las frecuencias de los núcleos individuales para satisfacer las necesidades de la aplicación.

Los verdaderos procesadores de cuatro núcleos utilizan cuatro núcleos que, junto con la memoria caché, se encuentran en un solo chip. Lo importante aquí es la presencia de un caché unificado común. AMD implementará este enfoque equipando 512 KB de caché L2 en cada núcleo y agregando caché L3 a todos los núcleos. La ventaja de AMD es que será posible desactivar ciertos núcleos y acelerar otros para obtener un mejor rendimiento para aplicaciones de un solo subproceso. Intel seguirá el mismo camino, no sin antes presentar la arquitectura Nehalem en 2008.

Utilidades de salida información del sistema, como CPU-Z, le permiten conocer la cantidad de núcleos y tamaños de caché, pero no la distribución del procesador. No sabrás que el Core 2 Quad (o el Extreme Edition de cuatro núcleos que se muestra en la captura de pantalla) consta de dos núcleos.


  • Tutorial

En este artículo intentaré describir la terminología utilizada para describir sistemas capaces de ejecutar varios programas en paralelo, es decir, multinúcleo, multiprocesador, multiproceso. Aparecieron diferentes tipos de paralelismo en la CPU IA-32 en diferentes momentos y en un orden algo inconsistente. Es bastante fácil confundirse en todo esto, especialmente teniendo en cuenta que los sistemas operativos ocultan cuidadosamente los detalles de las aplicaciones menos sofisticadas.

El propósito del artículo es mostrar que con toda la variedad de configuraciones posibles de sistemas multiprocesador, multinúcleo y multiproceso, se crean oportunidades para que los programas que se ejecutan en ellos tanto para la abstracción (ignorando las diferencias) como para tener en cuenta los detalles ( la capacidad de descubrir la configuración mediante programación).

Advertencia sobre los signos ®, ™ en el artículo

El mío explica por qué los empleados de la empresa deberían utilizar avisos de derechos de autor en las comunicaciones públicas. En este artículo tuve que usarlos con bastante frecuencia.

UPC

Por supuesto, el término más antiguo, más utilizado y controvertido es "procesador".

En el mundo moderno, un procesador es algo que compramos en una hermosa caja minorista o en un paquete OEM no tan bueno. Una entidad indivisible insertada en un zócalo de la placa base. Incluso si no hay conector y no se puede quitar, es decir, si está bien soldado, es un solo chip.

Los sistemas móviles (teléfonos, tabletas, computadoras portátiles) y la mayoría de las computadoras de escritorio tienen un procesador. Las estaciones de trabajo y los servidores a veces cuentan con dos o más procesadores en una sola placa base.

Admitir múltiples CPU en un solo sistema requiere numerosos cambios de diseño. Como mínimo, es necesario asegurar su conexión física (prever varios zócalos en la placa base), resolver problemas de identificación del procesador (ver más adelante en este artículo, así como mi nota), coordinar los accesos a la memoria e interrumpir la entrega (la interrupción El controlador debe poder enrutar interrupciones a varios procesadores) y, por supuesto, el soporte del sistema operativo. Desafortunadamente, no pude encontrar una mención documental de la creación del primer sistema multiprocesador con procesadores Intel, pero Wikipedia afirma que Sequent Computer Systems ya los suministró en 1987, utilizando procesadores Intel 80386. El soporte para múltiples chips en un sistema se está generalizando. comenzando con Intel® Pentium.

Si hay varios procesadores, cada uno de ellos tiene su propio conector en la placa. Cada uno de ellos tiene copias completas independientes de todos los recursos, como registros, dispositivos de ejecución, cachés. Comparten una memoria común: la RAM. La memoria se puede conectar con ellos de varias maneras y nada triviales, pero esta es una historia aparte que escapa al alcance de este artículo. Lo importante es que, en cualquier caso, se debe crear para los programas ejecutables la ilusión de una memoria compartida homogénea y accesible desde todos los procesadores incluidos en el sistema.


¡Listo para despegar! Placa de escritorio Intel® D5400XS

Centro

Históricamente, los núcleos múltiples en Intel IA-32 aparecieron más tarde que Intel® HyperThreading, pero en la jerarquía lógica viene a continuación.

Parecería que si un sistema tiene más procesadores, entonces su rendimiento es mayor (en tareas que pueden utilizar todos los recursos). Sin embargo, si el costo de la comunicación entre ellos es demasiado alto, todos los beneficios del paralelismo se ven anulados por los largos retrasos en la transferencia de datos comunes. Esto es exactamente lo que se observa en los sistemas multiprocesador: tanto física como lógicamente están muy lejos unos de otros. Para una comunicación eficaz en tales condiciones, es necesario idear buses especializados, como Intel® QuickPath Interconnect. Por supuesto, todo esto no reduce el consumo de energía, el tamaño y el precio de la solución final. Una alta integración de componentes debería ayudar: los circuitos que ejecutan partes de un programa en paralelo deben acercarse entre sí, preferiblemente en un chip. En otras palabras, un procesador debería organizar varios núcleos, idénticos entre sí en todo, pero trabajando de forma independiente.

Los primeros procesadores Intel IA-32 multinúcleo se introdujeron en 2005. Desde entonces, el número promedio de núcleos en plataformas de servidor, de escritorio y ahora móviles ha ido creciendo de manera constante.

A diferencia de dos procesadores de un solo núcleo en el mismo sistema que solo comparten memoria, dos núcleos también pueden compartir cachés y otros recursos relacionados con la memoria. La mayoría de las veces, los cachés del primer nivel permanecen privados (cada núcleo tiene el suyo propio), mientras que el segundo y tercer nivel pueden ser compartidos o separados. Esta organización del sistema le permite reducir los retrasos en la entrega de datos entre núcleos vecinos, especialmente si están trabajando en una tarea común.


Micrografía de un procesador Intel de cuatro núcleos con nombre en código Nehalem. Se asignan núcleos separados, un caché común de tercer nivel, así como enlaces QPI a otros procesadores y un controlador de memoria común.

hiperhilo

Hasta aproximadamente 2002, la única forma de conseguir un sistema IA-32 capaz de ejecutar dos o más programas en paralelo era utilizar sistemas multiprocesador. El Intel® Pentium® 4, así como la línea Xeon con nombre en código Foster (Netburst), introdujo una nueva tecnología, hyperthreads o hyperthreads, Intel® HyperThreading (en adelante HT).

No hay nada nuevo bajo el sol. HT es un caso especial de lo que en la literatura se conoce como multihilo simultáneo (SMT). A diferencia de los núcleos "reales", que son copias completas e independientes, en el caso de HT, solo una parte de los nodos internos, principalmente responsables de almacenar el estado arquitectónico (registros), están duplicados en un procesador. Los nodos ejecutivos responsables de organizar y procesar los datos siguen siendo singulares y en un momento dado son utilizados como máximo por uno de los hilos. Al igual que los núcleos, los hiperprocesos comparten cachés, pero el nivel depende del sistema específico.

No intentaré explicar todos los pros y los contras de los diseños SMT en general y de los diseños HT en particular. El lector interesado puede encontrar una discusión bastante detallada sobre la tecnología en muchas fuentes y, por supuesto, en Wikipedia. Sin embargo, señalaré el siguiente punto importante, que explica las restricciones actuales sobre la cantidad de hiperprocesos en productos reales.

Restricciones de hilo
¿En qué casos se justifica la presencia de núcleos múltiples "injustos" en forma de HT? Si un subproceso de aplicación no puede cargar todos los nodos de ejecución dentro del kernel, entonces se pueden "prestar" a otro subproceso. Esto es típico de aplicaciones que tienen un cuello de botella no en el cálculo, sino en el acceso a los datos, es decir, que a menudo generan errores de caché y tienen que esperar a que los datos se entreguen desde la memoria. Durante este tiempo, el núcleo sin HT se verá obligado a permanecer inactivo. La presencia de HT le permite cambiar rápidamente los nodos de ejecución libres a otro estado arquitectónico (ya que está duplicado) y ejecutar sus instrucciones. Este es un caso especial de una técnica llamada ocultación de latencia, cuando una operación larga, durante la cual los recursos útiles están inactivos, queda enmascarada por la ejecución paralela de otras tareas. Si la aplicación ya tiene un alto grado de utilización de los recursos del kernel, la presencia de hiperprocesos no permitirá la aceleración; aquí se necesitan kernels "honestos".

Los escenarios típicos para aplicaciones de escritorio y servidor diseñadas para arquitecturas de máquinas de uso general tienen el potencial de implementarse paralelismo utilizando HT. Sin embargo, este potencial se está agotando rápidamente. Quizás por esta razón, en casi todos los procesadores IA-32 el número de hiperprocesos de hardware no supera los dos. En escenarios típicos, la ganancia al usar tres o más hyperthreads sería pequeña, pero la pérdida en el tamaño del troquel, el consumo de energía y el costo es significativa.

Una situación diferente se observa en las tareas típicas realizadas con aceleradores de vídeo. Por tanto, estas arquitecturas se caracterizan por el uso de tecnología SMT con un mayor número de hilos. Dado que los coprocesadores Intel® Xeon Phi (introducidos en 2010) son ideológica y genealógicamente bastante cercanos a las tarjetas de video, es posible que tengan cuatro Hyperthreading en cada núcleo: una configuración exclusiva del IA-32.

Procesador lógico

De los tres “niveles” de paralelismo descritos (procesadores, núcleos, hiperprocesos), algunos o incluso todos pueden faltar en un sistema en particular. Esto se ve afectado por la configuración del BIOS (los núcleos múltiples y los subprocesos múltiples se deshabilitan de forma independiente), las características de microarquitectura (por ejemplo, HT estuvo ausente en Intel® Core™ Duo, pero regresó con el lanzamiento de Nehalem) y eventos del sistema ( Los servidores multiprocesador pueden apagar los procesadores que fallan si se detectan fallas y continuar "volando" en los restantes). ¿Cómo es visible este zoológico de concurrencia de múltiples niveles para el sistema operativo y, en última instancia, para las aplicaciones?

Además, por conveniencia, denotamos la cantidad de procesadores, núcleos y subprocesos en un determinado sistema por tres ( incógnita, y, z), Dónde incógnita es el número de procesadores, y- el número de núcleos en cada procesador, y z- número de hiperprocesos en cada núcleo. De ahora en adelante llamaré a estos tres topología- un término establecido que tiene poco que ver con la rama de las matemáticas. Trabajar pag = xyz define el número de entidades llamadas procesadores lógicos sistemas. Define el número total de contextos independientes de procesos de aplicación en un sistema de memoria compartida, ejecutándose en paralelo, que el sistema operativo está obligado a tener en cuenta. Digo "forzado" porque no puede controlar el orden de ejecución de dos procesos en diferentes procesadores lógicos. Esto también se aplica a los hiperprocesos: aunque se ejecutan "secuencialmente" en el mismo núcleo, el orden específico lo dicta el hardware y no puede ser observado ni controlado por programas.

Muy a menudo, el sistema operativo oculta a las aplicaciones finales las características de la topología física del sistema en el que se ejecuta. Por ejemplo, las siguientes tres topologías: (2, 1, 1), (1, 2, 1) y (1, 1, 2): el sistema operativo representará dos procesadores lógicos, aunque el primero de ellos tiene dos procesadores, el el segundo, dos núcleos y el tercero, solo dos subprocesos.


El Administrador de tareas de Windows muestra 8 procesadores lógicos; ¿Pero cuánto cuesta en procesadores, núcleos e hiperprocesos?


La parte superior de Linux muestra 4 procesadores lógicos.

Esto es muy conveniente para los creadores de aplicaciones: no tienen que lidiar con funciones de hardware que a menudo no son importantes para ellos.

Definición de software de topología

Por supuesto, abstraer la topología en un único número de procesadores lógicos en algunos casos crea suficientes motivos para confusión y malentendidos (en acaloradas disputas en Internet). Las aplicaciones informáticas que desean exprimir el máximo rendimiento del hardware requieren un control detallado sobre dónde se ubicarán sus subprocesos: más cerca unos de otros en hiperprocesos adyacentes o, por el contrario, más lejos en diferentes procesadores. La velocidad de comunicación entre procesadores lógicos dentro del mismo núcleo o procesador es mucho mayor que la velocidad de transferencia de datos entre procesadores. La posibilidad de heterogeneidad en la organización de la memoria de trabajo también complica el panorama.

La información sobre la topología del sistema en su conjunto, así como la posición de cada procesador lógico en el IA-32, está disponible mediante la instrucción CPUID. Desde la aparición de los primeros sistemas multiprocesador, el esquema de identificación del procesador lógico se ha ampliado varias veces. Hasta la fecha, sus partes están contenidas en las hojas 1, 4 y 11 del CPUID. Qué hoja mirar se puede determinar a partir del siguiente diagrama de flujo tomado del artículo:

No los aburriré aquí con todos los detalles de las partes individuales de este algoritmo. Si hay interés, la siguiente parte de este artículo puede dedicarse a ello. Remitiré al lector interesado a, que examina esta cuestión con el mayor detalle posible. Aquí primero describiré brevemente qué es APIC y cómo se relaciona con la topología. A continuación veremos cómo trabajar con la hoja 0xB (once en decimal), que actualmente es la última palabra en "apico-building".

ID APIC
APIC local (controlador de interrupciones programable avanzado) es un dispositivo (ahora parte del procesador) responsable de manejar las interrupciones que llegan a un procesador lógico específico. Cada procesador lógico tiene su propio APIC. Y cada uno de ellos en el sistema debe tener un valor de ID APIC único. Este número lo utilizan los controladores de interrupciones para direccionar al entregar mensajes y todos los demás (por ejemplo, el sistema operativo) para identificar los procesadores lógicos. La especificación para este controlador de interrupciones ha evolucionado desde Intel 8259 PIC pasando por Dual PIC, APIC y xAPIC hasta x2APIC.

Actualmente, el ancho del número almacenado en el APIC ID ha alcanzado los 32 bits, aunque en el pasado estaba limitado a 16, y antes incluso a sólo 8 bits. Hoy en día, los restos de los viejos tiempos están dispersos por todo el CPUID, pero CPUID.0xB.EDX devuelve los 32 bits del APIC ID. En cada procesador lógico que ejecute de forma independiente la instrucción CPUID, se devolverá un valor diferente.

Aclaración de los lazos familiares.
El valor de APIC ID en sí no dice nada sobre la topología. Para saber qué dos procesadores lógicos están ubicados dentro de un procesador físico (es decir, son hiperprocesos "hermanos"), cuáles están dentro del mismo procesador y cuáles están en procesadores completamente diferentes, debe comparar sus valores de ID APIC. Dependiendo del grado de parentesco, algunos de sus bits coincidirán. Esta información está contenida en las sublistas CPUID.0xB, que están codificadas por operandos en ECX. Cada uno de ellos describe la posición del campo de bits de uno de los niveles de topología en EAX (más precisamente, el número de bits que deben desplazarse hacia la derecha en el APIC ID para eliminar los niveles de topología inferiores), así como la tipo de este nivel (hyperthread, core o procesador) en ECX.

Para procesadores lógicos ubicados dentro del mismo núcleo, todos los bits de ID APIC coincidirán, excepto los que pertenecen al campo SMT. Para procesadores lógicos ubicados en el mismo procesador, todos los bits excepto los campos Core y SMT. Dado que la cantidad de subhojas para CPUID.0xB puede crecer, este esquema nos permitirá admitir la descripción de topologías con una mayor cantidad de niveles, si surge la necesidad en el futuro. Además, será posible introducir niveles intermedios entre los existentes.

Una consecuencia importante de la organización de este esquema es que en el conjunto de todos los ID APIC de todos los procesadores lógicos del sistema puede haber "agujeros", es decir no irán secuencialmente. Por ejemplo, en un procesador multinúcleo con HT desactivado, todos los ID de APIC pueden resultar pares, ya que el bit menos significativo responsable de codificar el número de hiperproceso siempre será cero.

Observo que CPUID.0xB no es la única fuente de información sobre los procesadores lógicos disponibles para el sistema operativo. Una lista de todos los procesadores disponibles, junto con sus valores de ID APIC, está codificada en la tabla MADT ACPI.

Sistemas operativos y topología.

Los sistemas operativos proporcionan información sobre la topología de los procesadores lógicos a las aplicaciones que utilizan sus propias interfaces.

En Linux, la información de topología está contenida en el pseudoarchivo /proc/cpuinfo, así como en la salida del comando dmidecode. En el siguiente ejemplo, filtro el contenido de cpuinfo en algún sistema de cuatro núcleos sin HT, dejando solo las entradas relacionadas con la topología:

Texto oculto

ggg@shadowbox:~$ cat /proc/cpuinfo |grep "procesador\|físico\ id\|hermanos\|núcleo\|núcleos\|apicid" procesador: 0 id físico: 0 hermanos: 4 id de núcleo: 0 núcleos de cpu: 2 apicid: 0 apicid inicial: 0 procesador: 1 id física: 0 hermanos: 4 id de núcleo: 0 núcleos de cpu: 2 apicid: 1 apicid inicial: 1 procesador: 2 id físico: 0 hermanos: 4 id de núcleo: 1 núcleos de cpu: 2 apicid: 2 apicid inicial: 2 procesador: 3 identificación física: 0 hermanos: 4 identificación del núcleo: 1 núcleos de CPU: 2 apicid: 3 apicid inicial: 3

En FreeBSD, la topología se informa mediante el mecanismo sysctl en la variable kern.sched.topology_spec como XML:

Texto oculto

usuario@host:~$ sysctl kern.sched.topology_spec kern.sched.topology_spec: 0, 1, 2, 3, 4, 5, 6, 7 0, 1, 2, 3, 4, 5, 6, 7 0, 1 grupo HILOgrupo SMT 2, 3 grupo HILOgrupo SMT 4, 5 grupo HILOgrupo SMT 6, 7 grupo HILOgrupo SMT

En MS Windows 8, la información de topología se puede ver en el Administrador de tareas.

* Siempre problemas actuales, a qué debes prestar atención a la hora de elegir un procesador, para no equivocarte.

Nuestro objetivo en este artículo es describir todos los factores que afectan el rendimiento del procesador y otros. características de rendimiento.

Probablemente no sea ningún secreto que el procesador es la unidad informática principal de una computadora. Incluso se podría decir: la parte más importante de la computadora.

Es él quien procesa casi todos los procesos y tareas que ocurren en la computadora.

Ya sea ver vídeos, música, navegar por Internet, escribir y leer en la memoria, procesar vídeos y 3D, juegos. Y mucho más.

Por lo tanto, para elegir do central PAG procesador, debes tratarlo con mucho cuidado. Puede suceder que decidas instalar una tarjeta de video potente y un procesador que no se corresponda con su nivel. En este caso, el procesador no revelará el potencial de la tarjeta de video, lo que ralentizará su funcionamiento. El procesador estará completamente cargado y literalmente hirviendo, y la tarjeta de video esperará su turno, funcionando al 60-70% de sus capacidades.

Por eso, a la hora de elegir un ordenador equilibrado, No costos descuida el procesador a favor de una potente tarjeta de video. La potencia del procesador debe ser suficiente para liberar el potencial de la tarjeta de video; de lo contrario, será dinero desperdiciado.

Intel vs. AMD

*ponernos al día para siempre

Corporación Intel, cuenta con enormes recursos humanos y unas finanzas casi inagotables. Muchas innovaciones en la industria de los semiconductores y nuevas tecnologías provienen de esta empresa. Procesadores y desarrollos Intel, en promedio por 1-1,5 años por delante de los logros de los ingenieros AMD. Pero como sabes, hay que pagar por la oportunidad de disponer de las tecnologías más modernas.

Política de precios del procesador Intel, se basa tanto en número de núcleos, cantidad de caché, pero también en "frescura" de la arquitectura, rendimiento por relojvatio,tecnología de proceso de chip. El significado de la memoria caché, las "sutilezas del proceso técnico" y otras características importantes del procesador se analizarán a continuación. Por la posesión de dichas tecnologías, además de un multiplicador de frecuencia gratuito, también tendrás que pagar una cantidad adicional.

Compañía AMD, a diferencia de la empresa Intel, se esfuerza por la disponibilidad de sus procesadores para el consumidor final y por una política de precios competente.

Incluso se podría decir que AMD– « sello del pueblo" En sus etiquetas de precios encontrarás lo que necesitas a un precio muy atractivo. Generalmente un año después la empresa tiene una nueva tecnología. Intel, un análogo de la tecnología aparece de AMD. Si no persigue el máximo rendimiento y presta más atención al precio que a la disponibilidad de tecnologías avanzadas, entonces los productos de la empresa AMD– sólo para ti.

Política de precios AMD, se basa más en el número de núcleos y muy poco en la cantidad de memoria caché y la presencia de mejoras arquitectónicas. En algunos casos, para tener la oportunidad de tener memoria caché de tercer nivel, tendrás que pagar un poco más ( Fenómeno tiene una memoria caché de 3 niveles, atlón contenido con sólo limitado, nivel 2). Pero a veces AMD mima a sus fans posibilidad de desbloquear procesadores más baratos a otros más caros. Puedes desbloquear los núcleos o la memoria caché. Mejorar atlón a Fenómeno. Esto es posible gracias a la arquitectura modular y a la falta de algunos modelos más económicos, AMD simplemente desactiva algunos bloques en el chip de otros más caros (software).

Núcleos– permanecen prácticamente sin cambios, solo difiere su número (válido para procesadores 2006-2011 años). Debido a la modularidad de sus procesadores, la empresa hace un excelente trabajo vendiendo chips rechazados que, cuando se apagan algunos bloques, se convierten en un procesador de una línea menos productiva.

La empresa trabaja desde hace muchos años en nueva arquitectura bajo el nombre en clave Excavadora, pero en el momento del lanzamiento en 2011 año, los nuevos procesadores no mostraron el mejor rendimiento. AMD Culpé a los sistemas operativos por no comprender las características arquitectónicas de los núcleos duales y "otros subprocesos múltiples".

Según representantes de la compañía, debes esperar a que lleguen correcciones y parches especiales para experimentar el rendimiento completo de estos procesadores. Sin embargo, al principio 2012 año, los representantes de la compañía pospusieron el lanzamiento de una actualización para soportar la arquitectura Excavadora para el segundo semestre del año.

Frecuencia del procesador, número de núcleos, subprocesos múltiples.

Durante los tiempos pentio 4 y ante él - frecuencia de la CPU, fue el principal factor de rendimiento del procesador al seleccionar un procesador.

Esto no es sorprendente, porque las arquitecturas de procesador se desarrollaron especialmente para lograr altas frecuencias, y esto se reflejó especialmente en el procesador. pentio 4 sobre arquitectura Explosión neta. La alta frecuencia no fue efectiva con la larga tubería que se usó en la arquitectura. Incluso XP Athlon frecuencia 2GHz, en términos de productividad fue superior a pentio 4 do 2,4 GHz. Entonces fue puro marketing. Después de este error, la empresa Intel me di cuenta de mis errores y volvió al lado del bien Empecé a trabajar no en el componente de frecuencia, sino en el rendimiento por reloj. De la arquitectura Explosión neta Tuve que negarme.

Qué lo mismo para nosotros da multinúcleo?

Procesador de cuatro núcleos con frecuencia. 2,4 GHz, en aplicaciones multiproceso, será teóricamente el equivalente aproximado de un procesador de un solo núcleo con una frecuencia 9,6 GHz o procesador de 2 núcleos con frecuencia 4,8 GHz. Pero eso es sólo teóricamente. Prácticamente lo mismo, dos procesador de doble núcleo en una placa base de dos zócalos, será más rápida que una de 4 núcleos, a la misma frecuencia de funcionamiento. Las limitaciones de velocidad del autobús y la latencia de la memoria pasan factura.

* sujeto a la misma arquitectura y cantidad de memoria caché

Multi-core permite realizar instrucciones y cálculos en partes. Por ejemplo, necesitas realizar tres operaciones aritméticas. Los dos primeros se ejecutan en cada uno de los núcleos del procesador y los resultados se añaden a la memoria caché, donde la siguiente acción se puede realizar con ellos mediante cualquiera de los núcleos libres. El sistema es muy flexible, pero sin una optimización adecuada es posible que no funcione. Por lo tanto, la optimización para múltiples núcleos es muy importante para la arquitectura del procesador en un entorno de sistema operativo.

Aplicaciones que "encantan" y usar subprocesos múltiples: archivadores, reproductores y codificadores de vídeo, antivirus, programas desfragmentadores, editores gráficos , navegadores, Destello.

Además, los "amantes" del subproceso múltiple incluyen sistemas operativos como ventana 7 Y WindowsVista , así como muchos SO basado en kernel linux, que funcionan notablemente más rápido con un procesador multinúcleo.

Mayoría juegos A veces, un procesador de 2 núcleos a alta frecuencia es suficiente. Ahora, sin embargo, todo sale a la luz. más juegos“adaptado” para subprocesos múltiples. Toma al menos estos Salvadera juegos como GTA 4 o Prototipo, en el que en un procesador de 2 núcleos con una frecuencia inferior 2,6 GHz– no te sientes cómodo, la velocidad de fotogramas cae por debajo de 30 fotogramas por segundo. Aunque en en este caso, lo más probable es que la razón de tales incidentes sea la optimización "débil" de los juegos, la falta de tiempo o las manos "indirectas" de quienes transfirieron juegos de consolas a ordenador personal.

A la hora de comprar un nuevo procesador para juegos, ahora debes prestar atención a los procesadores con 4 o más núcleos. Pero aún así no se deben descuidar los procesadores de 2 núcleos de la “categoría superior”. En algunos juegos, estos procesadores a veces se sienten mejor que algunos de varios núcleos.

Memoria caché del procesador.

es un área dedicada del chip del procesador en la que se procesan y almacenan datos intermedios entre los núcleos del procesador, la RAM y otros buses.

ella corre a muy alto frecuencia de reloj(generalmente a la frecuencia del propio procesador), tiene una muy alta rendimiento Y núcleos de procesador trabajar con ella directamente ( L1).

por ella escasez, el procesador puede estar inactivo en tareas que consumen mucho tiempo, esperando que lleguen nuevos datos a la caché para su procesamiento. También memoria caché sirve para registros de datos repetidos con frecuencia que, si es necesario, se pueden restaurar rápidamente sin cálculos innecesarios, sin obligar al procesador a perder tiempo nuevamente en ellos.

El rendimiento también mejora por el hecho de que la memoria caché está unificada y todos los núcleos pueden utilizar los datos de ella por igual. esto da características adicionales para optimización multiproceso.

Esta técnica se utiliza ahora para Caché de nivel 3. Para procesadores Intel había procesadores con memoria caché unificada de nivel 2 ( C2D E 7***,mi 8***), gracias a lo cual apareció este método aumentar el rendimiento de subprocesos múltiples.

Al hacer overclocking en el procesador, la memoria caché puede volverse punto débil, evitando que el procesador sea overclockeado más allá de su frecuencia máxima de funcionamiento sin errores. Sin embargo, la ventaja es que funcionará a la misma frecuencia que el procesador overclockeado.

En general, cuanto mayor sea la memoria caché, más más rápido UPC. ¿En qué aplicaciones exactamente?

Todas las aplicaciones que utilizan una gran cantidad de datos, instrucciones y subprocesos de punto flotante hacen un uso intensivo de la memoria caché. La memoria caché es muy popular. archivadores, codificadores de video, antivirus Y editores gráficos etc.

Una gran cantidad de memoria caché es favorable juegos. Especialmente estrategias, autosimuladores, RPG, SandBox y todos los juegos donde hay mucho. piezas pequeñas, partículas, elementos geométricos, flujos de información y efectos físicos.

La memoria caché juega un papel muy importante a la hora de desbloquear el potencial de los sistemas con 2 o más tarjetas de vídeo. Después de todo, una parte de la carga recae en la interacción de los núcleos del procesador, tanto entre ellos como para trabajar con flujos de varios chips de vídeo. Es en este caso que la organización de la memoria caché es importante y una memoria caché grande de nivel 3 resulta muy útil.

La memoria caché siempre está equipada con protección contra posibles errores (ECC), si se detectan, se corrigen. Esto es muy importante, porque un pequeño error en la memoria caché, cuando se procesa, puede convertirse en un error gigantesco y continuo que colapsará todo el sistema.

Tecnologías propias.

(hiper-hilo, HT)–

La tecnología se utilizó por primera vez en procesadores. pentio 4, pero no siempre funcionó correctamente y, a menudo, ralentizó el procesador más de lo que lo aceleró. La razón fue que el proceso era demasiado largo y el sistema de predicción de sucursales no estaba completamente desarrollado. Utilizado por la empresa Intel, todavía no existen análogos de la tecnología, a menos que la consideres un análogo. lo que implementaron los ingenieros de la empresa AMD en arquitectura Excavadora.

El principio del sistema es que para cada núcleo físico, uno dos hilos de computación, en lugar de uno. Es decir, si tienes un procesador de 4 núcleos con HT (Núcleo i 7), entonces tienes hilos virtuales 8 .

La ganancia de rendimiento se logra debido al hecho de que los datos pueden ingresar al proceso ya en la mitad del mismo, y no necesariamente al principio. Si algunos bloques del procesador capaces de realizar esta acción están inactivos, reciben la tarea para su ejecución. La ganancia de rendimiento no es la misma que la de los núcleos físicos reales, pero sí comparable (~50-75%, dependiendo del tipo de aplicación). Es bastante raro que en algunas aplicaciones, La TH afecta negativamente para el rendimiento. Esto se debe a una mala optimización de las aplicaciones para esta tecnología, la incapacidad de comprender que existen subprocesos "virtuales" y la falta de limitadores para cargar subprocesos de manera uniforme.

TurboAumentar – una tecnología muy útil que aumenta la frecuencia de funcionamiento de los núcleos de procesador más utilizados, dependiendo de su nivel de carga. Es muy útil cuando la aplicación no sabe cómo utilizar los 4 núcleos y carga solo uno o dos, mientras su frecuencia de funcionamiento aumenta, lo que compensa parcialmente el rendimiento. La empresa tiene un análogo de esta tecnología. AMD, es tecnología Núcleo turbo.

, 3 ¡Ya sé! instrucciones. Diseñado para acelerar el procesador en multimedia informática (vídeo, música, gráficos 2D/3D, etc.), y también acelerar el trabajo de programas como archivadores, programas para trabajar con imágenes y vídeos (con el apoyo de instrucciones de estos programas).

3¡Ya sé! – tecnología bastante antigua AMD, que contiene instrucciones adicionales para procesar contenido multimedia, además de ESS primera versión.

*Es decir, la capacidad de transmitir procesamiento números reales precisión única.

la presencia de nueva versión- es una gran ventaja, el procesador comienza a realizar ciertas tareas de manera más eficiente con la optimización adecuada del software. Procesadores AMD Tienen nombres similares, pero ligeramente diferentes.

* Ejemplo - SSE 4.1 (Intel) - SSE 4A (AMD).

Además, estos conjuntos de instrucciones no son idénticos. Estos son análogos con ligeras diferencias.

Tranquilo y tranquilo, Paso de velocidad CoolCore encantada Medio Estado (C1E) Yt. d.

Estas tecnologías, con cargas bajas, reducen la frecuencia del procesador reduciendo el multiplicador y el voltaje del núcleo, desactivando parte del caché, etc. Esto permite que el procesador se caliente mucho menos, consuma menos energía y haga menos ruido. Si se necesita energía, el procesador volverá a su estado normal en una fracción de segundo. En configuración estándar biografías Casi siempre están activados; si se desea, se pueden desactivar para reducir posibles "congelaciones" al cambiar a juegos 3D.

Algunas de estas tecnologías controlan la velocidad de rotación de los ventiladores del sistema. Por ejemplo, si el procesador no necesita una mayor disipación de calor y no está cargado, la velocidad del ventilador del procesador se reduce ( AMD Cool'n'Quiet, paso de velocidad Intel).

Tecnología de virtualización Intel Y Virtualización AMD.

Estas tecnologías de hardware hacen posible, utilizando programas especiales, ejecutar múltiples sistemas operativos inmediatamente, sin ninguna pérdida significativa en el rendimiento. Además, se utiliza para funcionamiento adecuado servidores, porque a menudo tienen instalado más de un sistema operativo.

Ejecutar Desactivar Poco YNo ejecutar Poco tecnología diseñada para proteger su computadora contra ataques de virus Y errores de software, lo que puede provocar que el sistema falle desbordamiento del buffer.

Intel 64 , AMD 64 , EM 64 t – esta tecnología permite que el procesador funcione tanto en un sistema operativo con arquitectura de 32 bits como en un sistema operativo con arquitectura de 64 bits. Sistema 64 bits– Desde el punto de vista de las prestaciones, para el usuario medio se diferencia en que este sistema puede utilizar más de 3,25 GB de RAM. En sistemas de 32 bits, utilice b oh No es posible disponer de una mayor cantidad de RAM debido a la cantidad limitada de memoria direccionable*.

La mayoría de las aplicaciones con arquitectura de 32 bits se pueden ejecutar en un sistema con un sistema operativo de 64 bits.

* ¿Qué se puede hacer si allá por 1985 nadie podía siquiera pensar en volúmenes de RAM tan gigantescos, según los estándares de esa época?

Además.

Algunas palabras sobre.

Vale la pena prestar mucha atención a este punto. Cuanto más fino es el proceso técnico, menos energía consume el procesador y, como resultado, menos se calienta. Y entre otras cosas, tiene un mayor margen de seguridad para el overclocking.

Cuanto más refinado sea el proceso técnico, más se podrá "envolver" en un chip (y no solo) y aumentar las capacidades del procesador. La generación de calor y el consumo de energía también se reducen proporcionalmente, gracias a menos pérdidas por corriente y reducción del área núcleo. Se puede notar una tendencia de que con cada nueva generación de la misma arquitectura en un nuevo proceso tecnológico, el consumo de energía también aumenta, pero no es así. Simplemente los fabricantes están avanzando hacia una productividad aún mayor y están yendo más allá de la línea de disipación de calor de la generación anterior de procesadores debido a un aumento en el número de transistores, que no es proporcional a la reducción del proceso técnico.

Integrado en el procesador.

Si no necesita un núcleo de video incorporado, no debería comprar un procesador con él. Sólo conseguirás una peor disipación del calor, un calentamiento adicional (no siempre), peor potencial de overclocking(no siempre) y dinero pagado en exceso.

Además, los núcleos que están integrados en el procesador solo son aptos para cargar el sistema operativo, navegar por Internet y ver vídeos (y no de ninguna calidad).

Las tendencias del mercado siguen cambiando y la oportunidad de comprar potente procesador de Intel Sin núcleo de vídeo, se cae cada vez menos. La política de imposición forzada del núcleo de vídeo incorporado apareció en los procesadores. Intel bajo el nombre en clave Puente de arena , cuya principal innovación fue el núcleo integrado en el mismo proceso técnico. El núcleo de vídeo se encuentra juntos con procesador en un chip, y no tan simple como en generaciones anteriores de procesadores Intel. Para quienes no lo utilizan, existen desventajas en forma de un pago excesivo por el procesador, el desplazamiento de la fuente de calor con respecto al centro de la tapa de distribución de calor. Sin embargo, también hay ventajas. Núcleo de video deshabilitado, se puede utilizar para tecnología de codificación de video muy rápida Sincronización rápida junto con un software especial que admite esta tecnología. En el futuro, Intel promete ampliar los horizontes del uso del núcleo de video incorporado para la computación paralela.

Zócalos para procesadores. Vida útil de la plataforma.


Intel tiene políticas duras para sus plataformas. La vida útil de cada uno (las fechas de inicio y finalización de las ventas del procesador) generalmente no supera los 1,5 a 2 años. Además, la empresa cuenta con varias plataformas de desarrollo paralelas.

Compañía AMD, tiene la política opuesta de compatibilidad. En su plataforma en soy 3, todos los procesadores de próxima generación que admitan DDR3. Incluso cuando la plataforma llega soy 3+ y posteriormente, nuevos procesadores para soy 3, o los nuevos procesadores serán compatibles con los antiguos placas base, y puede realizar una actualización sencilla para su billetera cambiando solo el procesador (sin cambiar la placa base, la RAM, etc.) y actualizando la placa base. Los únicos matices de incompatibilidad pueden surgir al cambiar el tipo, ya que necesitará otro controlador de memoria integrado en el procesador. Por lo tanto, la compatibilidad es limitada y no es compatible con todas las placas base. Pero, en general, para el usuario que cuida su presupuesto o para aquellos que no están acostumbrados a cambiar completamente de plataforma cada 2 años, la elección del fabricante del procesador es clara: esto AMD.

Refrigeración de la CPU.

Viene de serie con procesador CAJA-Un nuevo refrigerador que simplemente hará frente a su tarea. Es una pieza de aluminio con un área de dispersión no muy alta. Los refrigeradores eficientes con tubos de calor y placas adheridos están diseñados para una disipación de calor altamente eficiente. Si no desea escuchar ruido adicional del ventilador, debe comprar un enfriador alternativo más eficiente con tubos de calor o un sistema de enfriamiento líquido de tipo cerrado o abierto. Dichos sistemas de refrigeración también brindarán la posibilidad de overclockear el procesador.

Conclusión.

Se han considerado todos los aspectos importantes que afectan el rendimiento y el rendimiento del procesador. Repitamos a qué debes prestar atención:

  • Seleccionar fabricante
  • Arquitectura del procesador
  • Proceso técnico
  • frecuencia de la CPU
  • Número de núcleos de procesador
  • Tamaño y tipo de caché del procesador
  • Soporte tecnológico y de instrucción.
  • Refrigeración de alta calidad

Esperamos que este material le ayude a comprender y decidir la elección de un procesador que cumpla con sus expectativas.




Arriba