Solicite conocimientos a la CPU.
Existen CPU de uso general y CPU integradas. La diferencia entre CPU de uso general y CPU integradas se basa principalmente en los diferentes modos de aplicación. Los chips de CPU de uso general son generalmente potentes y pueden ejecutar sistemas operativos complejos y software de aplicaciones a gran escala. Las CPU integradas ofrecen una amplia gama de funcionalidades y rendimiento. A medida que aumenta el nivel de integración, en las aplicaciones integradas, la gente tiende a integrar la CPU, la memoria y algunos circuitos periféricos en un chip para formar el llamado sistema en chip (SOC para abreviar). La CPU en el SOC se convierte en el núcleo de la CPU. .
Ahora bien, existen dos direcciones opuestas en el diseño óptimo de los sistemas de enseñanza. Una es mejorar la función de las instrucciones, configurar algunas instrucciones con funciones complejas y utilizar el sistema de instrucciones del hardware para realizar algunas funciones comunes implementadas originalmente por el software. Este tipo de computadora se convierte en una computadora con un sistema de instrucciones complejo. El primer sistema de instrucción Intel X86 era una estructura de instrucción CISC.
RISC es la abreviatura de Computadora con conjunto de instrucciones reducidas, que se desarrolló en la década de 1980. Simplifica las funciones de las instrucciones tanto como sea posible, conservando solo aquellas instrucciones con funciones simples que se pueden ejecutar de una sola vez, y las funciones más complejas se implementan mediante una subrutina. Este sistema informático se convierte en una computadora con un conjunto de instrucciones simplificado. Actualmente, los fabricantes de chips de procesadores de arquitectura RISC incluyen SUN, SGI, la serie Power PC de IBM, la serie Alpha de DEC, Dragon Ball y Power PC de Motorola, etc.
Presentamos el sistema MIPS.
MIPS es un procesador RISC muy popular en el mundo. MIPS significa "Microprocesador sin etapas de tubería entrelazadas" y su mecanismo es evitar problemas relacionados con los datos en la tubería mediante el uso de software siempre que sea posible. Fue desarrollado originalmente a principios de la década de 1980 por un grupo de investigación dirigido por el profesor Hennessy de la Universidad de Stanford. La serie R de MIPS es un microprocesador para productos industriales RISC desarrollado sobre esta base. Muchas empresas de informática utilizan esta serie de productos para formar diversas estaciones de trabajo y sistemas informáticos.
Sistema de instrucciones
Para hablar de CPU, primero debemos hablar del sistema de instrucciones. El conjunto de instrucciones se refiere a todas las instrucciones que la CPU puede procesar.
El conjunto de comandos es el atributo básico de la CPU. Por ejemplo, todas las CPU que usamos ahora usan el conjunto de instrucciones x86 y todas son del mismo tipo de CPU, ya sea PIII, Athlon o Joshua. También sabemos que hay CPU en el mundo que son mucho más rápidas que PIII y Athlon, como Alpha, pero no usan el conjunto de instrucciones x86 y no pueden usar una gran cantidad de programas basados en el conjunto de instrucciones x86, como Windows98. . La razón por la cual el sistema de instrucciones es el atributo fundamental de la CPU es porque el sistema de instrucciones determina qué programas puede ejecutar la CPU.
Todos los programas escritos en lenguajes de alto nivel necesitan ser traducidos (compilados o interpretados) al lenguaje de máquina antes de poder ejecutarse. Estos lenguajes de máquina contienen instrucciones.
1. Formato de instrucción
Una instrucción generalmente incluye dos partes: código de operación y código de dirección. El código de operación es en realidad el número de secuencia de la instrucción, que se utiliza para indicarle a la CPU qué instrucción debe ejecutarse. El código de dirección es relativamente complejo e incluye principalmente la dirección del operando de origen, la dirección de destino y la dirección de la siguiente instrucción. En algunas instrucciones, el código de dirección se puede omitir parcial o completamente; por ejemplo, una instrucción vacía solo tiene un código de operación pero no un código de dirección.
Por ejemplo, la longitud de la instrucción de un sistema de instrucciones es de 32 bits, la longitud del código de operación es de 8 bits y la longitud de la dirección es de 8 bits. La primera instrucción es la suma y la segunda es la resta.
Cuando recibe la instrucción "0000000100000001000000100000110", primero extrae sus primeros ocho códigos de operación, es decir, 000000010, y analiza si se trata de una instrucción. Luego, la CPU saca el minuendo de la dirección de memoria 00000100, saca el minuendo de 0000001, lo envía a la ALU para su resta y luego envía el resultado a 00000110.
Este es sólo un ejemplo bastante simplista, la situación real es mucho más compleja.
2. Métodos de clasificación y direccionamiento de instrucciones
De manera general, el sistema de instrucción actual cuenta con los siguientes tipos de instrucciones:
(1) Operaciones aritméticas y lógicas. Instrucciones
Las instrucciones de operaciones aritméticas y lógicas incluyen instrucciones de operaciones aritméticas como suma, resta, multiplicación y división, e instrucciones de operaciones lógicas como AND o XOR. Ahora el sistema de instrucciones también agrega algunas instrucciones de operación decimal e instrucciones de operación de cadena.
(2) Las instrucciones de operación de punto flotante
se utilizan para operar números de punto flotante. Las operaciones de punto flotante son mucho más complejas que las operaciones con números enteros, por lo que generalmente hay una unidad de punto flotante en la CPU responsable de las operaciones de punto flotante. Hoy en día, las instrucciones vectoriales generalmente se agregan a las instrucciones de punto flotante para operar matrices directamente, lo cual es muy útil para el procesamiento multimedia y 3D.
(3) Instrucciones de operación de bits
Todos los que hayan estudiado C deben saber que existe un conjunto de declaraciones de operación de bits en el lenguaje C. En consecuencia, también hay un conjunto de bits. instrucciones de operación en el sistema de instrucciones, como cambiar una posición hacia la izquierda y cambiar una posición hacia la derecha. Para datos representados por código binario en una computadora, esta operación es muy simple y rápida.
(4) Otras instrucciones
Las tres anteriores son todas instrucciones de operación y hay muchas otras instrucciones que no se pueden utilizar. Estas instrucciones incluyen: instrucciones de transferencia de datos, instrucciones de operación de pila, instrucciones de transferencia, instrucciones de entrada y salida y algunas instrucciones especiales, como instrucciones de privilegios, instrucciones de control multiprocesador y espera, apagado, no operación, etc.
Para el código de dirección en la instrucción, existen muchos métodos de direccionamiento diferentes, incluido el direccionamiento directo, el direccionamiento indirecto, el direccionamiento de registro, el direccionamiento base, el direccionamiento de índice, etc. Algunos sistemas de instrucción complejos tienen docenas o incluso más modos de direccionamiento.
3.CISC y RISC
CISC, computadora con conjunto de instrucciones complejas, computadora con sistema de instrucciones complejas. Computadora con conjunto de instrucciones reducido, computadora con conjunto de instrucciones reducido. Aunque estos dos términos son específicos de las computadoras, a continuación solo estudiaremos conjuntos de instrucciones.
(1) El surgimiento, desarrollo y situación actual de CISC
Al principio, el sistema de instrucción por computadora solo tenía unas pocas instrucciones básicas, y otras instrucciones complejas se pasaban a través de instrucciones simples. durante la compilación del software. Para tomar el ejemplo más simple, una operación de multiplicar a por b se puede convertir en la suma de ayb, por lo que no es necesaria una instrucción de multiplicación. Por supuesto, los primeros sistemas de instrucción ya tenían instrucciones de multiplicación. ¿Por qué? Porque la multiplicación en hardware es mucho más rápida que la suma y combinación.
Debido a que los componentes de la computadora en ese momento eran bastante caros y lentos, se agregaron instrucciones cada vez más complejas al sistema de instrucciones para aumentar la velocidad. Sin embargo, pronto surgió otro problema: la cantidad de instrucciones en un conjunto de instrucciones estaba limitada por la cantidad de códigos de operación de instrucciones. Si el código de operación es de 8 bits, el número máximo de instrucciones es 256 (2 elevado a la octava potencia).
Entonces, ¿qué debemos hacer? Aumentar el ancho de las instrucciones es difícil, por lo que los diseñadores inteligentes idearon una solución: la expansión del código de operación. Como se mencionó anteriormente, el código de operación va seguido del código de dirección. Algunas instrucciones no requieren códigos de dirección o solo usan una pequeña cantidad de códigos de dirección. Luego puede extender el código de operación a estas ubicaciones.
Como ejemplo sencillo, si el código de operación de un sistema de instrucciones es de 2 bits, entonces puede haber cuatro instrucciones diferentes: 00, 01, 10, 11. 11 ahora está reservado y el código de operación se expande a 4 bits, por lo que puede haber 00, 01, 1100, 1101, 65438. Incluyendo 1100, 1101, 1110, 111.
Luego, para hacer realidad la premisa de la expansión del código de operación: reducir los códigos de dirección, los diseñadores usaron su cerebro para inventar varios métodos de direccionamiento, como el direccionamiento base y el direccionamiento relativo, para comprimir los códigos de dirección al máximo de su longitud. , dejando espacio para códigos de operación.
De esta manera, poco a poco, nació el sistema de mando CISC. Una gran cantidad de instrucciones complejas, longitudes de instrucción variables y múltiples modos de direccionamiento son características de CISC y también desventajas de CISC: debido a que aumentan en gran medida la dificultad de decodificación y, con el desarrollo de hardware de alta velocidad, las instrucciones complejas aumentan la velocidad. El aumento ya es menor que el tiempo perdido en la decodificación. Con la excepción del conjunto de instrucciones x86, que todavía se utiliza en el mercado de PC, CISC ya no se utiliza en servidores y sistemas más grandes. La única razón por la que x86 todavía existe es para ser compatible con la gran cantidad de software de la plataforma x86.
]: (2) El surgimiento, desarrollo y situación actual de RISC.
En 1975, el diseñador de IBM John Coker estudió el sistema IBM370CISC en ese momento y descubrió que las instrucciones simples representaban solo 20 del total de instrucciones, pero representaban 80 de las llamadas del programa, mientras que las instrucciones complejas representaban solo 80 de las instrucciones tomó 20 segundos. Por tanto, propuso el concepto de RISC.
Los hechos han demostrado que RISC tiene éxito. A finales de la década de 1980, surgieron CPU RISC de varias empresas y ocuparon una gran cantidad de mercados. En la década de 1990, las CPU x86 como Pentium y k5 también comenzaron a utilizar núcleos RISC avanzados.
RISC se caracteriza por una longitud de instrucción fija, pocos formatos de instrucción y pocos modos de direccionamiento. La mayoría de ellas son instrucciones sencillas que se pueden completar en un ciclo de reloj. Los superescalares y tuberías son fáciles de diseñar, tienen una gran cantidad de registros y requieren una gran cantidad de operaciones entre registros. Debido a que la mayoría de los núcleos de CPU que se mencionan a continuación son núcleos RISC, no los presentaré aquí en detalle.
RISC está ahora en pleno apogeo, y Itanium de Intel eventualmente abandonará x86 y cambiará a la arquitectura RISC.
2. Estructura del núcleo de la CPU
Bien, veamos la CPU. El núcleo de la CPU se divide principalmente en dos partes: unidad aritmética y controlador.
(1) Unidad aritmética
1, Unidad aritmética lógica (ALU)
ALU completa principalmente operaciones aritméticas de punto fijo (suma, resta, multiplicación y división). ) sobre datos binarios, operaciones lógicas (Y o NO XOR) y operaciones de desplazamiento. En algunas CPU, hay palancas de cambio que manejan específicamente las operaciones de cambio.
Normalmente una ALU consta de dos entradas y una salida. La unidad de números enteros a veces se denomina IEU (Unidad de ejecución de números enteros). Lo que solemos decir "CPU tiene XX bits" se refiere a la cantidad de bits de datos que la ALU puede procesar.
2. Unidad de punto flotante
FPU es el principal responsable de las operaciones de punto flotante y operaciones de números enteros de alta precisión. Algunas fpu también tienen la función de operación de vectores y algunas tienen unidades de procesamiento de vectores especializadas.
3. Grupo de registros de propósito general
El grupo de registros de propósito general es un grupo de memorias más rápidas que se utilizan para almacenar operandos y resultados intermedios involucrados en las operaciones.
RISC y CISC son muy diferentes en el diseño de registros de propósito general. CISC suele tener muy pocos registros, lo que estaba limitado principalmente por el costo del hardware en ese momento. Por ejemplo, el conjunto de instrucciones x86 tiene sólo ocho registros de propósito general. Por lo tanto, la ejecución de la CPU de CISC pasa la mayor parte del tiempo accediendo a datos en la memoria en lugar de a datos en registros. Esto ralentiza todo el sistema. Los sistemas RISC suelen tener muchos registros de uso general y utilizan ventanas de registro y archivos de registro superpuestos para aprovechar al máximo los recursos de registro.
En respuesta a la deficiencia de que el conjunto de instrucciones x86 solo admite 8 registros de uso general, las últimas CPU de Intel y AMD han adoptado una tecnología llamada "cambio de nombre de registro", que permite a la CPU x86 abrirse paso. el límite de 8 registros llegó a 32 o más. Sin embargo, en comparación con RISC, las operaciones de registro de esta tecnología requieren un ciclo de reloj más para cambiar el nombre del registro.
4. Registros especiales
Los registros especiales suelen ser registros de estado que el programa no puede cambiar y están controlados por la propia CPU para representar un determinado estado.
(2) Controlador
La unidad aritmética solo puede completar operaciones, mientras que el controlador se utiliza para controlar toda la CPU.
1. Controlador de comando
El controlador de comando es una parte muy importante del controlador. Necesita buscar y analizar las instrucciones y luego entregarlas a la unidad de ejecución (ALU o FPU) para su ejecución. Al mismo tiempo, es necesario formar la dirección de la siguiente instrucción.
2. Temporizador
La función del controlador de tiempo es proporcionar señales de control para cada instrucción en la secuencia de tiempo. El controlador de sincronización incluye un generador de reloj y una unidad de definición de multiplicación de frecuencia. El generador de reloj emite una señal de pulso muy estable a través de un oscilador de cristal de cuarzo. Esta señal de pulso es la frecuencia principal de la CPU. de la CPU es la frecuencia principal de la memoria (frecuencia del bus).
3. Controlador de bus
El controlador de bus se utiliza principalmente para controlar los buses internos y externos de la CPU, incluido el bus de direcciones, el bus de datos, el bus de control, etc.
4. Controlador de interrupciones
El controlador de interrupciones se utiliza para controlar varias solicitudes de interrupción, poner en cola las solicitudes de interrupción según la prioridad y entregarlas a la CPU para que las procese una por una.
(Diseño del núcleo de la CPU
¿Qué determina el rendimiento de una CPU? La velocidad de una sola ALU no juega un papel decisivo en una CPU, porque las velocidades de las ALU son similares. CPU El factor decisivo en el rendimiento reside en el diseño del núcleo de la CPU
1. Superescalar
Dado que la velocidad de ALU no se puede mejorar mucho, ¿qué alternativas hay disponibles para el procesamiento paralelo? Método? La llamada CPU superescalar es una CPU que solo integra múltiples ALU, múltiples FPU, múltiples decodificadores y múltiples tuberías para mejorar el rendimiento a través del procesamiento paralelo. pero una cosa a tener en cuenta es no prestar atención al número antes de "exceder el estándar", como "9 carreteras que exceden el estándar" tienen diferentes definiciones de este número, y es más un método de promoción comercial <. /p>
2. Pipeline
El pipeline es un diseño importante del núcleo RISC moderno, que mejora enormemente el rendimiento.
Para un proceso de ejecución de instrucciones específico, generalmente puede ser. Dividido en cinco partes: búsqueda de instrucciones, decodificación de instrucciones, búsqueda de operandos, operación (ALU) y escritura de resultados. Los primeros tres pasos generalmente los completa el controlador de instrucciones y los dos últimos pasos los completa la unidad aritmética. De manera tradicional, todas las instrucciones se ejecutan en secuencia, por lo que primero se le indica al controlador que complete los primeros tres pasos de la primera instrucción, luego a la unidad aritmética se le indica que complete los dos últimos pasos y luego se le indica al controlador que complete la. primeros tres pasos de la segunda instrucción, y ahora la unidad aritmética completa la segunda. Las dos últimas partes de la instrucción... Obviamente, cuando el controlador de instrucciones está funcionando, la unidad aritmética está básicamente en reposo, pero cuando la unidad aritmética está funcionando, el controlador de instrucciones está en reposo, lo que provoca un desperdicio considerable de recursos. La solución es fácil. Piénselo. Cuando el controlador de instrucciones complete los primeros tres pasos de la primera instrucción, iniciará directamente la operación de la segunda instrucción. es cierto para la unidad aritmética. Esto forma un sistema de canalización, que es una canalización de dos etapas.
Si es un sistema superescalar, supongamos que hay tres unidades de control de instrucciones y dos unidades aritméticas. Cuando se completa la dirección de la primera instrucción, la dirección de la segunda instrucción se puede iniciar directamente. En este momento, la primera instrucción se está decodificando, luego la tercera instrucción se está direccionando, la segunda instrucción se está decodificando y la primera instrucción toma operandos. Esta es una tubería de cinco etapas. Obviamente, la velocidad teórica promedio de una tubería de 5 etapas es 4 veces mayor que la de una tubería sin tubería.
El sistema de tubería maximiza el uso de los recursos de la CPU, lo que permite que cada componente. funcionan en cada ciclo de reloj, lo que mejora enormemente la eficiencia. Sin embargo, la canalización tiene dos problemas muy grandes: correlación y transmisión.
En un sistema de canalización, si la segunda instrucción requiere el resultado de la primera instrucción, esta situación. se llama dependencia. Tome la canalización de cinco etapas anterior como ejemplo cuando la segunda instrucción necesita recuperar el operando. En este momento, la operación de la primera instrucción aún no se ha completado.
Si la segunda instrucción elimina el operando en este momento, se obtendrá un resultado incorrecto. Por lo tanto, en este momento, toda la línea de montaje tuvo que detenerse y esperar a que se completara la primera instrucción. Este es un problema muy molesto, especialmente para un proceso muy largo, digamos 20 etapas, donde esta pausa normalmente cuesta una docena de ciclos de reloj. La solución actual a este problema es ejecutar fuera de orden. El principio de ejecución desordenada es insertar instrucciones no relacionadas en dos instrucciones relacionadas para que todo el proceso sea fluido. Por ejemplo, en el ejemplo anterior, después de ejecutar la primera instrucción, la tercera instrucción se ejecuta directamente (suponiendo que la tercera instrucción es irrelevante) y luego se ejecuta la segunda instrucción De esta manera, cuando es necesario obtener la segunda instrucción. El operando, la instrucción One acaba de finalizar, la tercera instrucción está a punto de finalizar y toda la tubería no se detendrá. Sin embargo, no se puede evitar por completo el bloqueo de la canalización, especialmente cuando hay muchas instrucciones dependientes.
Otro gran problema es la transferencia condicional. En el ejemplo anterior, si la primera instrucción es una instrucción de rama condicional, entonces el sistema no sabrá qué instrucción debe ejecutarse a continuación. En este momento, debe esperar el resultado del juicio de la primera instrucción antes de ejecutar la segunda instrucción. Las paralizaciones de los oleoductos causadas por transferencias condicionales son incluso más graves que las dependencias. Por lo tanto, ahora se utilizan técnicas de predicción de bifurcaciones para manejar el problema de bifurcación. Aunque nuestro programa está lleno de ramas y cualquier rama es posible, en la mayoría de los casos siempre elegimos una rama. Por ejemplo, hay una rama al final del ciclo. Excepto la última vez que necesitamos salir del bucle, siempre elegimos continuar el bucle. Con base en estos principios, la tecnología de predicción de ramas puede predecir cuál será la siguiente instrucción antes de obtener el resultado y ejecutarla. La tecnología actual de predicción de bifurcaciones puede alcanzar una precisión de más del 90%, pero una vez que la predicción es incorrecta, la CPU aún tiene que limpiar toda la tubería y regresar al punto de bifurcación. Esto perderá muchos ciclos de reloj. Por lo tanto, también se está estudiando mejorar aún más la precisión de la predicción de ramas.
Cuanto más largo sea el proceso, más graves serán los dos problemas de asociación y transferencia. Entonces, cuanto más larga sea la línea de montaje, mejor y más exceso. Encontrar el equilibrio entre velocidad y eficiencia es lo más importante.
1. Unidad de decodificación
Esto es algo exclusivo de x86CPU. Su función es convertir instrucciones x86 de longitud variable en instrucciones de longitud fija similares a RISC y entregarlas al RISC. centro. La decodificación se puede dividir en decodificación de hardware y microdecodificación. Para instrucciones x86 simples, la decodificación de hardware es suficiente y es más rápida, mientras que para instrucciones x86 complejas, se requiere microdecodificación y se divide en varias instrucciones simples, lo cual es lento y complicado. Afortunadamente, estas complejas instrucciones rara vez se utilizan.
Athlon, PIII y el antiguo conjunto de instrucciones CISC x86 limitan gravemente su rendimiento.
2. Caché de nivel 1 y caché de nivel 2
El caché y el caché de nivel 2 se crean para aliviar el conflicto entre una CPU más rápida y una memoria más lenta. Normalmente, se integran en el núcleo de la CPU. La caché L2 se ejecuta más rápido que la memoria OnDie o integrada. Para algunos trabajos con un gran volumen de intercambio de datos, la memoria caché de la CPU es particularmente importante.