Contenido Checked

Unidad Central de procesamiento

Acerca de este escuelas selección Wikipedia

SOS Children hizo esta selección Wikipedia junto a otros recursos de escuelas . El apadrinamiento de niños ayuda a los niños uno por uno http://www.sponsor-a-child.org.uk/ .

Una Intel 80486DX2 CPU desde arriba.
Un Intel 80486DX2 desde abajo

Una unidad de procesamiento central (CPU), también se refiere como una unidad central de procesador, es el hardware dentro de un equipo que lleva a cabo la instrucciones de un programa de ordenador mediante la realización de la aritmética básica, lógica y operaciones de entrada / salida del sistema. El término ha estado en uso en la industria informática, al menos desde la década de 1960. La forma, diseño e implementación de CPUs han cambiado a lo largo de su historia, pero su operación fundamental sigue siendo la misma.

En los equipos más antiguos, CPUs requieren uno o más placas de circuito impreso. Con la invención de la microprocesador, un CPU podría estar contenida dentro de un solo chip de silicio . Los primeros ordenadores de uso microprocesadores eran los ordenadores personales y estaciones de trabajo pequeñas. Desde los años 1970 la clase microprocesador de CPUs ha desplazado casi totalmente otras implementaciones de la CPU, en la medida en que incluso ordenadores centrales utilizan uno o más microprocesadores. Los microprocesadores modernos son a gran escala de circuitos integrados en paquetes normalmente menos de cuatro centímetros cuadrados, con cientos de clavijas de conexión.

Una computadora puede tener más de una CPU; se llama multiprocesamiento. Algunos microprocesadores pueden contener varias CPU en un solo chip; los microprocesadores se denominan procesadores multi-core.

Dos componentes típicos de una CPU son la unidad aritmética lógica (ALU), que realiza operaciones aritméticas y lógicas, y la unidad de control (CU), que extrae las instrucciones de la memoria y la decodifica y los ejecuta, llamando a la ALU cuando sea necesario.

No todos los sistemas computacionales se basan en una unidad central de procesamiento. Un procesador de matriz o procesador vectorial tiene varios elementos de computación en paralelo, sin una unidad considerado el "centro". En el modelo de computación distribuido, los problemas se resuelven mediante un conjunto interconectado distribuida de procesadores.

Historia

EDVAC, uno de los equipos del programa primero almacenados.

Ordenadores, como el ENIAC tenía que ser reconectado físicamente para realizar diferentes tareas, que causaron estas máquinas que se llamarán "ordenadores-programa fijo." Dado que el término "CPU" se define generalmente como un dispositivo para software (programa informático) la ejecución, los primeros dispositivos que con razón se podrían llamar CPUs vino con el advenimiento de la computadora con programa almacenado.

La idea de una computadora con programa almacenado ya estaba presente en el diseño de J. Presper Eckert y John William Mauchly de ENIAC, pero se omitió inicialmente de modo que pudiera ser terminado antes. El 30 de junio de 1945, antes de ENIAC fue hecho, el matemático John von Neumann distribuyó el trabajo titulado Primer borrador de un informe sobre la EDVAC. Era el contorno de una computadora con programa almacenado que finalmente sería terminado en agosto de 1949. EDVAC fue diseñado para realizar un determinado número de instrucciones (u operaciones) de varios tipos. Estas instrucciones podían combinarse para crear programas útiles para el EDVAC se ejecute. Significativamente, los programas escritos para el EDVAC fueron almacenados en alta velocidad memoria de la computadora en lugar de lo especificado por el cableado físico de la computadora. Esto superó una severa limitación del ENIAC, que fue el tiempo y esfuerzo considerable necesario para volver a configurar el ordenador para realizar una nueva tarea. Con el diseño de von Neumann, el programa o software, que EDVAC corría, podía ser cambiado simplemente cambiando el contenido de la memoria.

Los primeros CPU fueron diseñados a medida como parte de una más grande,, ordenador a veces uno-de-uno-bueno. Sin embargo, este método de diseño de CPU a la medida para una aplicación particular ha dado paso al desarrollo de los procesadores de producción masiva que se hacen para muchos propósitos. Esta estandarización comenzó en la era de la discreta transistor mainframes y minicomputadoras y se ha acelerado rápidamente con la popularización del circuito integrado (IC). El CI ha permitido CPUs cada vez más complejas para ser diseñados y fabricados con tolerancias del orden de nanómetros. Tanto la miniaturización como la estandarización de los CPU han aumentado la presencia de dispositivos digitales en la vida moderna mucho más allá de las aplicaciones limitadas de máquinas de computación dedicadas. Los microprocesadores modernos aparecen en todo, desde automóviles hasta teléfonos celulares y juguetes de los niños.

Mientras que von Neumann es acreditado más frecuentemente por el diseño de la computadora con programa almacenado debido a su diseño de EDVAC, otros antes que él, como Konrad Zuse, había sugerido y aplicado ideas similares. El llamado Arquitectura de la Universidad de Harvard Harvard Mark I, que se completó antes de EDVAC, también utilizó un diseño de programa almacenado utilizando cinta de papel perforada en vez de memoria electrónica. La diferencia clave entre las arquitecturas de von Neumann y Harvard es que la última separa el almacenamiento y tratamiento de las instrucciones de la CPU y los datos, mientras que el primero utiliza el mismo espacio de memoria para ambos. La mayoría de los CPU modernos son von Neumann en el diseño, pero los elementos de la arquitectura de Harvard se observan con frecuencia también.

Relés y tubos de vacío (válvulas termoiónicos) eran usados comúnmente como elementos de conmutación; un ordenador útil requiere miles o decenas de miles de dispositivos de conmutación. La velocidad global de un sistema depende de la velocidad de los interruptores. Las computadoras de tubo como EDVAC tendía a un promedio de ocho horas entre fallas, mientras que las computadoras de relés como el (más lento, pero más temprano) Harvard Mark I, fallaban muy raramente. Al final, las CPU basados en tubo llegaron a ser dominantes porque las significativas ventajas de velocidad producidas generalmente pesaban más los problemas de fiabilidad. La mayor parte de estos tempranos CPU síncronos corrían a baja velocidades de reloj en comparación con los modernos diseños microelectrónicos (ver más abajo para una discusión de la velocidad del reloj). Frecuencias de la señal de reloj que van desde 100 kHz a 4 MHz era muy común en este momento, limitada en gran medida por la velocidad de los dispositivos de conmutación los que fueron construidos.

Transistor y CPUs de circuitos integrados

CPU, memoria de base, y interfaz de bus externo de un diciembre PDP-8 / I. Hecho de circuitos integrados de pequeña o mediana.

La complejidad de diseño de CPU se incrementó a medida que varias tecnologías facilitaron la construcción de dispositivos electrónicos más pequeños y confiables. La primera de esas mejoras vino con el advenimiento de la transistor. CPU transistorizados durante los años 1950 y 1960 ya no tenían que ser construido a partir de elementos de conmutación abultados, no fiables, y frágiles como tubos de vacío y relés eléctricos. Con esta mejora CPUs más complejos y confiables fueron construidos sobre una o varias tarjetas de circuitos impresos con componentes discretos (individuales).

Durante este período, se desarrolló un método de fabricar muchos transistores interconectados en un espacio compacto. El circuito integrado (IC) permitió un gran número de transistores para ser fabricado en un solo semiconductor basado morir, o "chips". A primeros circuitos digitales no especializado sólo muy básicos como Puertas NOR fueron miniaturizados en ICs. CPU basadas en estos IC de "bloques de construcción" se conocen en general como (SSI) dispositivos de "integración a pequeña escala". ICs SSI, tales como los utilizados en el Apolo equipo de orientación, por lo general contiene hasta un par de transistores de puntuación. Construir un CPU completo de SSI ICs requerido miles de chips individuales, pero todavía se consume mucho menos espacio y energía que diseños anteriores de transistores discretos. A medida que avanzaba la tecnología microelectrónica, se colocaron un creciente número de transistores en circuitos integrados, lo que disminuye la cantidad de ICs individuales necesarios para un CPU completo. MSI y LSI (integración a mediana y gran escala) ICs aumentaron el número de transistores a cientos, y luego miles de personas.

En 1964 IBM introdujo su / Arquitectura 360 equipo que fue utilizado en una serie de computadores que podían correr los mismos programas con diferente velocidad y el rendimiento del sistema. Esto fue significativo en un momento cuando la mayoría de las computadoras electrónicas eran incompatibles entre sí, incluso las realizadas por el mismo fabricante. Para facilitar esta mejora, IBM utilizó el concepto de microprograma (a menudo llamado "microcódigo"), que todavía ve un uso generalizado en las CPU modernas. El / La arquitectura del sistema 360 era tan popular que dominó el mercado del mainframe durante décadas y dejó un legado que aún se continuó por los ordenadores modernos similares como el IBM zSeries. En el mismo año (1964), Digital Equipment Corporation (DEC) introdujo otro computador influyente dirigido a los mercados científicos y de investigación, la PDP-8. Diciembre introduciría más adelante la extremadamente popular Línea PDP-11 que originalmente fue construido con ICs SSI pero eventualmente fue implementado con componentes LSI cuando llegaron a ser prácticos. En marcado contraste con sus predecesores SSI y MSI, la primera implementación LSI del PDP-11 contuvo un CPU integrado por solamente cuatro circuitos integrados LSI.

Computadores basados en transistores tenían varias ventajas sobre sus predecesores. Aparte de facilitar una mayor fiabilidad y menor consumo de energía, los transistores también permitían CPU operar a velocidades mucho más altas debido al corto tiempo de conmutación de un transistor en comparación a un tubo o relé. Gracias a tanto el aumento de la fiabilidad, así como el aumento de forma espectacular la velocidad de los elementos de conmutación (que eran casi exclusivamente transistores por este tiempo), se obtuvieron velocidades de reloj de la CPU en las decenas de megahercios durante este período. Además, mientras que el transistor discreto y CPUs IC estaban en uso pesado, nuevo alto rendimiento diseña como SIMD (Single Instruction Multiple Data) procesadores vectoriales comenzaron a aparecer. Estos tempranos diseños experimentales dieron lugar más adelante a la era de la especializada superordenadores como los realizados por Cray Inc.

Microprocesadores

Muere de un Intel 80486DX2 microprocesador (tamaño real: 12 × 6,75 mm) en su embalaje
Intel Core i5 CPU en una placa base del ordenador portátil Vaio serie E (a la derecha, debajo de la tubo de calor).

En la década de 1970 los inventos fundamentales por Federico Faggin (ICs Silicio Puerta MOS con auto alineado puertas, junto con su nueva metodología de diseño de lógica al azar) cambió el diseño y la implementación de los CPU siempre. Desde la introducción de la primera microprocesador disponible comercialmente (la Intel 4004) en 1970, y la primera ampliamente utilizados microprocesador (el Intel 8080) en 1974, esta clase de CPUs ha superado casi por completo todos los demás métodos de implementación unidad de procesamiento central. Mainframes y minicomputadores fabricantes de ese tiempo lanzaron programas propietarios desarrollo de circuitos integrados para actualizar su mayor arquitecturas de computadora, y produjeron finalmente conjunto de instrucciones microprocesadores compatibles que estaban al revés-compatible con su hardware antiguo y software. Combinado con el advenimiento y el eventual éxito del ubicuo computadora personal , la CPU término se aplica ahora casi exclusivamente a los microprocesadores. Varios CPUs se pueden combinar en un solo chip de procesamiento.

Las generaciones anteriores de CPUs fueron implementadas como componentes discretos y numerosos pequeños circuitos integrados (CI) en una o más placas de circuito. Los microprocesadores, por otro lado, son CPUs fabricados en un número muy pequeño de ICs; por lo general sólo uno. El tamaño más pequeño del CPU como resultado de ser implementado en un solo dado significa tiempo de conmutación más rápido debido a factores físicos como la disminución de la puerta capacitancia parásita. Esto ha permitido que los microprocesadores síncronos tengan velocidades de reloj que van desde decenas de megahertz a varios gigahertz. Además, como la capacidad de construir transistores excesivamente pequeños en un IC ha aumentado, la complejidad y el número de transistores en un solo CPU se ha incrementado muchas veces. Esta tendencia ampliamente observada es descrita por la ley de Moore , que ha demostrado ser un predictor bastante exacta del crecimiento de la CPU (y otra IC) complejidad.

Aunque la complejidad, el tamaño, la construcción, y la forma general del CPU han cambiado enormemente desde 1950, es notable que el diseño y el funcionamiento básico no ha cambiado mucho a todos. Casi todos los CPU comunes hoy en día puede ser descrito con precisión como máquinas de programa almacenado de von Neumann. Como mencionada ley del Moore continúa manteniéndose verdadera, se han planteado acerca de los límites de la tecnología de transistor del circuito integrado. La miniaturización extrema de puertas electrónicas está causando los efectos de fenómenos como electromigración y fugas subliminal para convertirse en mucho más significativo. Estas preocupaciones más recientes están entre los muchos factores que causan los investigadores para investigar nuevos métodos de computación como el ordenador cuántico , así como para ampliar el uso de paralelismo y otros métodos que extienden la utilidad del modelo de von Neumann clásica.

Operación

La operación fundamental de la mayoría de las CPU, independientemente de la forma física que toman, es ejecutar una secuencia de instrucciones almacenadas llamadas de un programa. El programa está representado por una serie de números que se mantienen en algún tipo de memoria de la computadora. Hay cuatro pasos que casi todas las CPUs usan en su operación: fetch, decodificar, ejecutar y reescritura.

El primer paso, trae, supone la recuperación de un instrucciones (que está representado por un número o secuencia de números) a partir de la memoria de programa. La ubicación en la memoria de programa se determina por una contador de programa (PC), que almacena un número que identifica la posición actual en el programa. Después se lee una instrucción, el PC se incrementa en la longitud de la palabra de instrucción en términos de unidades de memoria. A menudo, la instrucción a ser leída debe ser recuperada de la memoria relativamente lenta, haciendo que la CPU para detener a la espera de la instrucción que se devuelve. Este problema se soluciona en gran medida en los procesadores modernos por los cachés y las arquitecturas pipeline (ver abajo).

La instrucción que la CPU lee desde la memoria se utiliza para determinar lo que la CPU es de hacer. En la etapa de decodificación, la instrucción es dividida en partes que tienen significado para otras porciones de la CPU. La forma en la que el valor de la instrucción numérica es interpretado está definida por la arquitectura del conjunto de instrucciones de la CPU (ISA). A menudo, un grupo de números en la instrucción, llamado opcode, indica qué operación realizar. Las partes restantes del número usualmente proporcionan información requerida para esa instrucción, tales como operandos para una operación de adición. Tales operandos se pueden dar como un valor constante (llamado valor inmediato), o como un lugar para localizar un valor: un registrar o una dirección de memoria, como se determina por algunos modo de direccionamiento. En diseños más viejos las porciones del CPU responsables de decodificar la instrucción eran dispositivos de hardware fijos. Sin embargo, en CPUs e ISAs más abstractos y complicados, una microprograma a menudo se utiliza para ayudar en la traducción de las instrucciones en varias señales de configuración de la CPU. Este microprograma es a veces reescribible de tal manera que puede ser modificado para cambiar la forma de la CPU decodifica instrucciones incluso después de que ha sido fabricado.

Después de las etapas de lectura y decodificación, se realiza la etapa de ejecución. Durante este paso, varias porciones de la CPU están conectados para que puedan realizar la operación deseada. Si, por ejemplo, se pidió a una operación de adición, la unidad lógica aritmética (ALU) será conectada a un conjunto de entradas y un conjunto de salidas. Las entradas proporcionan los números a ser sumados, y las salidas contendrán la suma final. El ALU contiene la circuitería para realizar los cálculos aritméticos simples y operaciones lógicas en las entradas (como la suma y la operaciones bit a bit). Si la operación de adición produce un resultado demasiado grande para la CPU de manejar, una bandera de desbordamiento aritmético en un registro de banderas también se pueden ajustar.

El paso final, reescritura, simplemente "escribe" los resultados del paso de ejecución a una cierta forma de memoria. Muy a menudo los resultados son escritos a algún registro interno del CPU para acceso rápido por subsecuentes instrucciones. En otros casos, los resultados pueden ser escritos a más lento, pero más barato y más grande, memoria principal. Algunos tipos de instrucciones manipulan el contador de programa en lugar de producir directamente los datos de resultado. Estos generalmente son llamados "saltos" y facilitan comportamientos como bucles, la ejecución del programa condicional (mediante el uso de un salto condicional), y funciones en los programas. Muchas instrucciones también cambiarán el estado de dígitos en un "banderas" registro. Estas banderas pueden ser usados para influir en cómo se comporta un programa, ya que a menudo indican el resultado de varias operaciones. Por ejemplo, un tipo de "comparar" la instrucción considera dos valores y fija un número en el registro de banderas según la cual uno es mayor. Esta bandera podría entonces ser utilizado por una instrucción de salto más tarde para determinar el flujo del programa.

Después de la ejecución de la instrucción y la escritura de los datos resultantes, todo el proceso se repite, con la siguiente ciclo de instrucción, normalmente leyendo la siguiente instrucción en secuencia debido al valor incrementado en el contador de programa. Si la instrucción completada era un salto, el contador de programa será modificado para contener la dirección de la instrucción que se saltó, y la ejecución del programa continúa normalmente. En CPUs más complejos que el descrito aquí, múltiples instrucciones pueden ser leídas, decodificadas, y ejecutadas simultáneamente. En esta sección se describe lo que se conoce generalmente como la " clásico RISC pipeline ", que de hecho es bastante común entre los CPU simples usados en muchos dispositivos electrónicos (a menudo llamado microcontrolador). Se ignora en gran medida el importante papel de caché de la CPU , y por lo tanto la etapa de acceso de la tubería.

Diseño e implementación

El concepto básico de una CPU es el siguiente:

Cableada en el diseño de una CPU es una lista de las operaciones básicas que puede realizar, llamado conjunto de instrucciones. Estas acciones podrán incluir la adición o sustracción de dos números, comparación de números, o saltar a una parte diferente de un programa. Cada una de estas operaciones básicas está representado por una secuencia particular de pedacitos; esta secuencia se llama la código de operación para esa operación en particular. Envío de un código de operación particular a un CPU hará que se realice la operación representada por ese código de operación. Para ejecutar una instrucción en un programa de ordenador, la CPU utiliza el código de operación para esa instrucción, así como sus argumentos (por ejemplo los dos números que se añaden, en el caso de una operación de adición). La Por lo tanto, programa de ordenador es una secuencia de instrucciones, con cada instrucción incluye un código de operación y los argumentos de esa operación.

La operación matemática real para cada instrucción se lleva a cabo por una subunidad de la CPU conocido como el unidad aritmética lógica o ALU. Además de utilizar su ALU para realizar operaciones, una CPU también es responsable de la lectura de la siguiente instrucción de la memoria, la lectura de los datos especificados en los argumentos de la memoria, y escribir los resultados a la memoria.

En muchos diseños de CPU, un conjunto de instrucciones se diferenciará claramente entre las operaciones que los datos de carga de la memoria, y aquellos que realizan las matemáticas. En este caso los datos cargados desde la memoria se almacenan en registros, y una operación matemática no toma ningún argumento pero simplemente realiza los cálculos en los datos de los registros y la escribe en un nuevo registro, cuyo valor una operación separada puede entonces escribir en la memoria.

Unidad de control

La unidad de control de la CPU contiene circuitos que utiliza señales eléctricas para dirigir todo el sistema informático para llevar a cabo instrucciones de programa almacenadas. La unidad de control no se ejecuta las instrucciones del programa; Más bien, se dirige otras partes del sistema para hacerlo. La unidad de control debe comunicarse tanto con el / unidad aritmética lógica y la memoria.

Rango de enteros

La forma en que un CPU representa los números es una opción de diseño que afecta a las formas más básicas en que las funciones del dispositivo. Algunas primeras computadoras digitales utilizan un modelo eléctrico de la común decimal (base diez) sistema de numeración para representar números internamente. Algunas otras computadoras han usado sistemas de numeración más exóticos como ternario (base tres). Casi todos los CPU modernos representan los números en binario forma, con cada dígito siendo representados por alguna cantidad física de dos valores, como un "alto" o "bajo" tensión .

MOS 6502 en un microprocesador paquete dual en línea, un diseño muy popular de 8 bits.

Con la representación numérica es el tamaño y la precisión de los números que un CPU puede representar. En el caso de un CPU binario, un bit se refiere a un lugar significativo en los números de una CPU trata. El número de bits (o lugares numeral) un CPU usa para representar los números es a menudo llamado " tamaño de la palabra "," ancho de bits "," ancho de ruta de datos ", o" precisión entero "cuando se trata de números enteros estrictamente (en oposición a punto flotante). Este número difiere entre las arquitecturas, ya menudo dentro de diferentes partes de la misma CPU. Por ejemplo, una Ofertas de CPU de 8 bits con un rango de números que pueden ser representados por ocho dígitos binarios (cada dígito que tiene dos valores posibles), es decir, 2 o 8 256 números discretos. En efecto, el tamaño del número entero fija un límite de hardware en el rango de los enteros que el software corre por la CPU se puede utilizar.

Rango del número entero también puede afectar el número de ubicaciones en la memoria de la CPU puede direccionar (localizar). Por ejemplo, si un CPU binario utiliza 32 bits para representar una dirección de memoria, y cada dirección de memoria representa uno octeto (8 bits), la cantidad máxima de memoria que el CPU puede direccionar es 2 32 octetos, o 4 GiB. Esta es una vista muy simple de CPU abordar el espacio, y muchos diseños utilizan métodos de direccionamiento más complejos como paginación para localizar más memoria que su rango entero permitiría con un espacio de dirección plana.

Los niveles más altos de número entero gama requieren más estructuras para hacer frente a los dígitos adicionales, y por lo tanto más la complejidad, el tamaño, el consumo de energía, y el gasto general. No es nada raro, por lo tanto, para ver de 4 u 8 bits microcontroladores utilizados en aplicaciones modernas, a pesar de CPU con un rango mucho más alto (por ejemplo, 16, 32, 64, incluso 128 bits) están disponibles. Los microcontroladores más simples son generalmente más baratos, utilizan menos energía, y por lo tanto generan menos calor, todos los cuales pueden ser importantes consideraciones de diseño para dispositivos electrónicos. Sin embargo, en aplicaciones de gama alta, los beneficios que ofrece la gama extra (más a menudo el espacio de dirección adicional) son más significativos y con frecuencia afectan las opciones de diseño. Para obtener algunas de las ventajas proporcionadas por las longitudes inferiores y superiores bits, muchos CPUs están diseñados con diferentes anchos de bit para diferentes porciones del dispositivo. Por ejemplo, el IBM System / 370 utiliza una CPU que fue principalmente de 32 bits, pero utiliza 128 bits de precisión dentro de su unidades de punto flotante para facilitar una mayor precisión y alcance en los números de punto flotante. Muchos diseños posteriores de CPU usan una anchura de bits mixta similar, especialmente cuando el procesador está destinado para el uso de propósito general donde se requiere un equilibrio razonable de número entero y capacidad de punto flotante.

Frecuencia de reloj

La velocidad del reloj es la velocidad a la que un microprocesador ejecuta las instrucciones. Cada equipo contiene un reloj interno que regula la velocidad a la que se ejecutan las instrucciones y sincroniza todos los diversos componentes del ordenador. La CPU requiere un número fijo de garrapatas de reloj (o ciclos de reloj) para ejecutar cada instrucción. Cuanto más rápido el reloj, más instrucciones de la CPU puede ejecutar por segundo.

La mayoría de las CPUs, y de hecho la mayoría dispositivos de lógica secuencial, son síncrona en la naturaleza. Es decir, que están diseñados y operan en función de una señal de sincronización. Esta señal, conocida como una señal de reloj, por lo general toma la forma de un periódico ola cuadrada. Calculando el tiempo máximo que las señales eléctricas pueden moverse en varias ramas de muchos circuitos de un CPU, los diseñadores pueden seleccionar un apropiado período de la señal de reloj.

Este período debe ser más largo que la cantidad de tiempo que tarda una señal para moverse, o propagarse, en el peor de los casos. Al establecer el período de reloj a un valor muy por encima del peor de los casos retardo de propagación, es posible diseñar todo el CPU y la forma en que mueve los datos alrededor de los "bordes" de la señal de reloj ascendente y descendente. Esto tiene la ventaja de simplificar el CPU significativamente, tanto desde una perspectiva de diseño y una perspectiva de cantidad de componentes. Sin embargo, también conlleva la desventaja de que todo el CPU debe esperar en sus elementos más lentos, a pesar de que algunas porciones de la misma son mucho más rápido. Esta limitación ha sido ampliamente compensado por varios métodos de aumentar el paralelismo CPU. (Vea abajo)

Sin embargo, las mejoras de arquitectura por sí solos no resuelven todos los inconvenientes de CPUs globalmente síncronos. Por ejemplo, una señal de reloj está sujeta a los retardos de cualquier otra señal eléctrica. Velocidades de reloj más altas en CPUs cada vez más complejas hacen que sea más difícil mantener la señal de reloj en fase (sincronizado) en toda la unidad. Esto ha llevado a muchos CPU modernos requieran múltiples señales de reloj idénticas a ser proporcionado para evitar retardar una sola señal lo suficientemente significativa para hacer que la CPU no funcione correctamente. Otra cuestión importante como velocidades de reloj aumentan dramáticamente es la cantidad de calor que es disipada por la CPU. El reloj en constante cambio hace que muchos de los componentes para cambiar independientemente de si se están utilizando en ese momento. En general, un componente que está cambiando utiliza más energía que un elemento en un estado estático. Por lo tanto, a medida que aumenta la velocidad del reloj, también lo hace el consumo de energía, haciendo que la CPU a requerir más la disipación de calor en forma de Soluciones de refrigeración de la CPU.

Se llama un método de tratar con la conmutación de componentes innecesarios clock gating, que consiste en apagar la señal de reloj a los componentes innecesarios (desactivación de manera efectiva). Sin embargo, esto es a menudo considerado como difícil de implementar y por lo tanto no ve uso común afuera de diseños de muy baja potencia. Un diseño tarde CPU notable que utiliza compuerta del reloj para reducir los requisitos de alimentación de la consola de videojuegos es el de la IBM Basado en PowerPC Xbox 360. Se utiliza extensa gating reloj en el que se utiliza. Otro método de abordar algunos de los problemas con una señal de reloj global es la eliminación de la señal de reloj completo. Ventajas mientras se quita la señal de reloj global hace que el proceso de diseño mucho más compleja de muchas maneras, asíncrono (o sin relojes) diseños llevan marcadas en el consumo de energía y la disipación de calor en comparación con diseños síncronos similares. Aunque algo infrecuente, toda CPU asíncronos se han construido sin utilizar una señal global de reloj. Dos notables ejemplos de esto son la ARM compatible AMULETO y la MiniMIPS compatibles MIPS R3000. En lugar de eliminar totalmente la señal de reloj, algunos diseños de CPU permiten ciertas partes del dispositivo ser asincrónicas, tales como el uso asíncrono ALU en conjunción con pipelining superescalar para alcanzar algunas mejoras de rendimiento aritméticas. Si bien no es del todo claro si los diseños totalmente asincrónicos pueden desempeñarse a un nivel comparable o mejor que sus contrapartes síncronas, es evidente que lo hacen por lo menos sobresalen en las operaciones matemáticas simples. Esto, combinado con sus excelentes características de consumo de energía y disipación de calor, los hace muy adecuados para ordenadores integrados.

Paralelismo

Modelo de un CPU subescalar. Note que toma quince ciclos para completar tres instrucciones.

La descripción de la operación básica de un CPU ofrecido en la sección anterior describe la forma más simple que puede tomar un CPU. Este tipo de CPU, normalmente se conoce como subescalar, opera sobre y ejecuta una instrucción en una o dos piezas de datos a la vez.

Este proceso da lugar a una ineficiencia inherente en CPUs subescalares. Dado que sólo se ejecuta una instrucción a la vez, todo el CPU debe esperar a que la instrucción se complete antes de proceder a la siguiente instrucción. Como resultado, la CPU subescalar se "colgó" en instrucciones que toman más de un ciclo de reloj para completar su ejecución. Incluso la adición de un segundo unidad de ejecución (ver más abajo) no mejora el rendimiento tanto; en lugar de un camino quedando congelado, ahora dos caminos se paralizan y se incrementa el número de transistores no utilizados. Este diseño, en el que los recursos de ejecución del CPU pueden operar en una sola instrucción a la vez, solo puede, posiblemente, alcanzar el desempeño escalar (una instrucción por ciclo de reloj). Sin embargo, el rendimiento es casi siempre subescalar (menos de una instrucción por ciclo).

Los intentos para lograr escalar y un mejor rendimiento han resultado en una variedad de metodologías de diseño que hacen que la CPU se comporte menos linealmente y más en paralelo. Cuando se hace referencia al paralelismo en las CPU, dos términos se utilizan generalmente para clasificar estas técnicas de diseño. Paralelismo a nivel de instrucciones (ILP) busca aumentar la velocidad a la que las instrucciones se ejecutan dentro de una CPU (es decir, para aumentar la utilización de recursos en la matriz de ejecución), y paralelismo a nivel de hilo propósitos (TLP) para aumentar el número de hilos (eficazmente los programas individuales) que un CPU puede ejecutar simultáneamente. Cada metodología difiere tanto en las formas en que se apliquen, así como la eficacia relativa que producen en el aumento de rendimiento de la CPU para una aplicación.

Paralelismo a nivel de instrucción

Ducto básico de cinco etapas.En el mejor de los casos, esta tubería puede sostener una tasa de finalización de una instrucción por ciclo.

Uno de los métodos más simples que se utilizan para lograr una mayor paralelismo es comenzar los primeros pasos de ir a buscar la instrucción y decodificación antes de la instrucción previa termine de ejecutarse. Esta es la forma más simple de una técnica conocida como pipelining instrucción, y se utiliza en casi todas las CPU de propósito general modernos. Canalización permite más de una instrucción que se ejecutará en un momento dado por romper la vía de la ejecución en etapas discretas. Esta separación puede ser comparado con una línea de montaje, en el que una instrucción se hace más completa en cada etapa hasta que sale de la tubería de ejecución y se retiró.

Canalización hace, sin embargo, introducir la posibilidad de una situación en la que el resultado de la operación anterior es necesario para completar la siguiente operación; una condición a menudo se denomina conflicto dependencia de datos. Para hacer frente a esto, el cuidado adicional se debe tomar para comprobar si este tipo de condiciones y retrasar una parte de la tubería de la instrucción si esto ocurre. Naturalmente, lograr esto requiere circuitería adicional, por lo que los procesadores segmentados son más complejos que los subescalares (aunque no muy significativa así). Un procesador entubado puede llegar a ser casi completamente escalar, solamente inhibido por puestos de la tubería (una instrucción de pasar más de un ciclo de reloj en una etapa).

Tubería superescalar simple. Por leer y despachar dos instrucciones a la vez, se puede completar un máximo de dos instrucciones por ciclo.

Una mejora adicional sobre la idea de pipelining instrucción condujo al desarrollo de un método que reduce aún más el tiempo de inactividad de los componentes de la CPU. Diseños que se dice que son superescalares incluyen una larga tubería de instrucción y múltiples unidades de ejecución idénticas. En una tubería superescalar, múltiples instrucciones son leídas y pasadas a un despachador, que decide si las instrucciones se pueden ejecutar en paralelo (simultáneamente). Si por lo que se envían a las unidades de ejecución disponibles, dando lugar a la posibilidad de que varias instrucciones que se ejecutarán simultáneamente. En general, cuanto más instrucciones un CPU superescalar es capaz de despachar simultáneamente a la espera unidades de ejecución, más instrucciones serán completadas en un ciclo determinado.

La mayor parte de la dificultad en el diseño de una arquitectura de CPU superescalar radica en la creación de un despachador eficaz. El despachador tiene que ser capaz de determinar rápida y correctamente si las instrucciones pueden ser ejecutadas en paralelo, así como enviarlos de manera tal de mantener la mayor cantidad de unidades de ejecución ocupado como sea posible. Esto requiere que la tubería de instrucción se llena tan a menudo como sea posible y da lugar a la necesidad de arquitecturas superescalares de cantidades significativas de caché de la CPU . También hace técnicas para evitar peligros como predicción de saltos, ejecución especulativa, y fuera de la orden de ejecución crucial para mantener altos niveles de rendimiento. Al tratar de predecir qué rama (o trayectoria) tomará una instrucción condicional, la CPU puede minimizar el número de veces que toda la tubería debe esperar hasta que se complete una instrucción condicional. Ejecución especulativa frecuentemente proporciona aumentos modestos del desempeño al ejecutar las porciones de código que no puede ser necesaria después de completarse una operación condicional. Ejecución fuera de orden cambia en algún grado el orden en que se ejecutan las instrucciones para reducir los retrasos debidos a dependencias de datos. También en el caso de las instrucciones individuales de datos múltiples - un caso en el que se ha procesado una gran cantidad de datos del mismo tipo, los procesadores modernos pueden desactivar las partes de la tubería de manera que cuando una sola instrucción se ejecuta muchas veces, la CPU salta el traer y decodificar fases y por lo tanto aumenta considerablemente el rendimiento en ciertas ocasiones, sobre todo en los motores de programas altamente monótono como el software de creación de vídeo y procesamiento de fotografías.

En el caso de que una parte de la CPU es superescalar y una parte no lo es, la parte que no es sufre una penalización de rendimiento debido a las paradas de horario. El Intel P5 Pentium tenía dos ALU superescalar que podría aceptar una instrucción por ciclo de reloj cada uno, pero su FPU no podía aceptar una instrucción por ciclo de reloj. Así el P5 era superescalar entero pero no coma flotante superescalar. Sucesor de Intel a la arquitectura P5, P6, agregó capacidades superescalares a sus características de punto flotante, y por lo tanto proporcionó un aumento significativo en el rendimiento de instrucciones de coma flotante.

Tanto la canalización sencilla y el diseño superescalar aumentan el ILP de un CPU al permitir que un único procesador para completar la ejecución de las instrucciones a tasas que superan una instrucción por ciclo (IPC). La mayoría de los diseños de CPU modernos son al menos algo superescalares, y casi todos los CPU de propósito general diseñado en la última década son superescalar. En los últimos años algunos de los énfasis en el diseño de computadoras de alto ILP se ha movido de hardware de la CPU y en su interfaz de software, o ISA. La estrategia de la palabra de instrucción muy larga (VLIW) hace que algunos ILP para convertirse implicó directamente por el software, lo que reduce la cantidad de trabajo del CPU debe realizar para impulsar la ILP y reduciendo así la complejidad del diseño.

Paralelismo a nivel de Tema

Otra estrategia de lograr el rendimiento es ejecutar múltiples programas o hilos en paralelo. Esta área de investigación se conoce como computación paralela. En taxonomía de Flynn, esta estrategia se conoce como múltiples instrucciones de varios datos o MIMD.

Una tecnología utilizada para este propósito se multiprocesamiento (MP). El sabor inicial de esta tecnología se conoce como multiprocesamiento simétrico (SMP), donde un pequeño número de CPUs comparten una visión coherente de su sistema de memoria. En este esquema, cada CPU tiene hardware adicional para mantener una visión constantemente actualizada de la memoria. Al evitar vistas rancios de la memoria, las CPUs pueden cooperar en el mismo programa y los programas pueden migrar de una CPU a otra. Para aumentar el número de CPUs que cooperan más allá de un puñado, esquemas como el acceso no uniforme de memoria (NUMA) y protocolos de coherencia basados ​​en directorios se introdujeron en la década de 1990. Sistemas SMP se limitan a un pequeño número de CPU mientras que los sistemas NUMA se han construido con miles de procesadores. Inicialmente, el multiprocesamiento fue construido usando CPUs discreta múltiple y tableros para implementar la interconexión entre los procesadores. Cuando los procesadores y su interconexión se implementan en un único chip de silicio, la tecnología se conoce como un procesador multi-core.

Esta inversión de énfasis se pone de manifiesto por la proliferación de núcleo dual y múltiple (multiprocesamiento a nivel de chip) CMP diseña y sobre todo, nuevos diseños de Intel se asemeja a su menor superescalar arquitectura P6. Diseños de última hora en varias exposiciones familias de procesadores CMP, incluyendo el x86-64 Opteron y Athlon 64 X2, el SPARC UltraSPARC T1, IBM POWER4 y POWER5, así como varias consolas de videojuegos CPUs como el diseño PowerPC de tres núcleos de Xbox 360, y el 7-core de PS3 microprocesador Cell.

Paralelismo de datos

Un paradigma menos común pero cada vez más importante de las CPU (y de hecho, la computación en general) trata con vectores. Los procesadores discutidos anteriormente son todos referidos como cierto tipo de dispositivo escalar. Como su nombre lo indica, los procesadores vectoriales se ocupan de múltiples piezas de datos en el contexto de una instrucción. Esto contrasta con los procesadores escalares, que tratan de un dato por cada instrucción. Uso taxonomía de Flynn, estos dos esquemas de ocuparse de los datos se refiere generalmente como SIMD (Single Instruction, múltiples datos) y SISD (Single Instruction, los datos individuales), respectivamente. La gran utilidad en la creación de CPUs que tienen que ver con vectores de datos radica en la optimización de las tareas que tienden a requerir la misma operación (por ejemplo, una suma o un producto de punto) a realizar en un gran conjunto de datos. Algunos ejemplos clásicos de este tipo de tareas son las aplicaciones multimedia (imágenes, vídeo y sonido), así como muchos tipos de tareas científicas y de ingeniería. Mientras que un CPU escalar debe completar todo el proceso de ir a buscar, decodificar y ejecutar cada instrucción y valor en un conjunto de datos, un CPU vectorial puede realizar una operación en un comparativamente grande conjunto de datos con una instrucción. Por supuesto, esto sólo es posible cuando la aplicación tiende a requerir muchos pasos que se aplican una operación a un conjunto grande de datos.

La mayoría de los primeros CPU vectoriales, como el Cray-1, fueron asociados casi exclusivamente con la investigación y científicos de criptografía aplicaciones. Sin embargo, como se ha desplazado en gran medida de multimedia a los medios digitales, la necesidad de una cierta forma de SIMD en CPUs de propósito general se ha convertido en importante. Poco después de la inclusión de unidades de ejecución de punto flotante comenzó a convertirse en un lugar común en los procesadores de propósito general, las especificaciones de e implementaciones de unidades de ejecución SIMD también comenzaron a aparecer para CPUs de propósito general. Algunas de estas especificaciones SIMD tempranas como de HP eXtensiones Aceleración Multimedia (MAX) y de Intel MMX eran enteros solamente. Esto resultó ser un impedimento significativo para algunos desarrolladores de software, ya que muchas de las aplicaciones que se benefician de SIMD tratar principalmente con números de punto flotante. Progresivamente, estos primeros diseños fueron refinados y rehechos en algunas de las especificaciones SIMD modernos comunes, que generalmente se asocian con un ISA. Algunos ejemplos modernos notables son de Intel SSE y la relacionada con el PowerPC AltiVec (también conocido como VMX).

Rendimiento

El rendimiento o la velocidad de un procesador depende de la velocidad de reloj (generalmente dada en múltiplos de hertz) y las instrucciones por ciclo de reloj (IPC), que en conjunto son los factores para las instrucciones por segundo (IPS) que la CPU puede realizar. Muchos informaron valores IPS han representado las tasas de ejecución "pico" en secuencias de instrucciones artificiales con pocas ramas, mientras que las cargas de trabajo realistas consisten en una combinación de instrucciones y aplicaciones, algunas de las cuales requieren más tiempo para ejecutar que otros. El rendimiento de la jerarquía de memoria también afecta en gran medida el rendimiento del procesador, un tema apenas considerado en los cálculos MIPS. Debido a estos problemas, diferentes pruebas estandarizadas, a menudo llamados "puntos de referencia" para este propósito, tales como SPECint - se han desarrollado para tratar de medir el rendimiento real efectivo en aplicaciones de uso común.

El rendimiento de procesamiento de las computadoras se incrementa mediante el uso de los procesadores multi-núcleo, que en esencia es conectar dos o más procesadores individuales (llamados núcleos en este sentido) en un solo circuito integrado . Idealmente, un procesador de doble núcleo sería casi dos veces tan potente como un procesador de núcleo único. En la práctica, sin embargo, la ganancia de rendimiento es mucho menor, sólo alrededor del 50%, debido a los algoritmos de software imperfectos y aplicación. Aumentar el número de núcleos en un procesador (es decir, de doble núcleo, cuatro núcleos, etc.) aumenta la carga de trabajo que puede ser manejado. Esto significa que el procesador puede ahora manejar numerosos eventos asíncronos, interrupciones, etc., que pueden tomar un peaje en la CPU (Central Processing Unit) cuando abrumado. Estos núcleos pueden ser considerados como diferentes plantas en una planta de procesamiento, con el manejo de cada planta una tarea diferente. A veces, estos núcleos se manejan las mismas tareas que los núcleos adyacentes a ellos si un solo núcleo no es suficiente para manejar la información.

Recuperado de " http://en.wikipedia.org/w/index.php?title=Central_processing_unit&oldid=545392486 "