fbpx
Wikipedia

Unidad central de procesamiento

La unidad central de procesamiento CPU (conocida por las siglas CPU, del inglés Central Processing Unit) o procesador es un componente del hardware dentro de un computador, teléfonos inteligentes y otros dispositivos programables.

Vista superior de una CPU Intel 80486DX2 en un paquete PGA de cerámica.
Vista posterior de una Intel 80486DX2.
Procesador moderno con 8 núcleos y 16 hilos de procesamiento.

Su trabajo es interpretar las instrucciones de un programa informático mediante la realización de las operaciones básicas aritméticas, lógicas y externas (provenientes de la unidad de entrada/salida). Su diseño y avance ha variado notablemente desde su creación, aumentando su eficiencia y potencia, y reduciendo aspectos como el consumo de energía y el costo.

Una computadora puede contener más de una CPU (multiprocesamiento). En la actualidad, los microprocesadores están constituidos por un único circuito integrado (chip) aunque existen los procesadores multinúcleo (varias CPU en un solo circuito integrado). Un circuito integrado que contiene una CPU también puede contener los dispositivos periféricos, y otros componentes de un sistema informático; similar a un microcontrolador (menos potente en RAM) se le denomina sistema en un chip (SoC).

Los componentes de la CPU son:

  • Unidad aritmético lógica (ALU): realiza operaciones aritméticas y lógicas.
  • Unidad de control (CU): dirige el tráfico de información entre los registros de la CPU y conecta con la ALU las instrucciones extraídas de la memoria.
  • Registros internos: no accesibles (de instrucción, de bus de datos y bus de dirección) y accesibles de uso específico (contador programa, puntero pila, acumulador, flags, etc.) o de uso general.

Historia

 
El ENIAC, una de las primeras computadoras de programas almacenados electrónicamente.

Las primeras computadoras, como el ENIAC, tenían que ser físicamente recableados para realizar diferentes tareas, lo que hizo que estas máquinas se denominaran "computadoras de programa fijo". Dado que el término "CPU" generalmente se define como un dispositivo para la ejecución de software (programa informático), los primeros dispositivos que con razón podríamos llamar CPU vinieron con el advenimiento de la computadora de programa almacenado.

La idea de una computadora con programa almacenado ya estaba presente en el diseño de John Presper Eckert y en el ENIAC de John William Mauchly, pero esta característica se omitió inicialmente para que el aparato pudiera estar listo antes. El 30 de junio de 1945, antes de que se construyera la ENIAC, el matemático John von Neumann distribuyó el trabajo titulado First Draft of a Report on the EDVAC (Primer Borrador de un Reporte sobre el EDVAC). Fue el esbozo de una computadora de programa almacenado, que se terminó en agosto de 1949.[1]​ EDVAC fue diseñado para realizar un cierto número de instrucciones (u operaciones) de varios tipos. Significativamente, los programas escritos para el EDVAC se crearon para ser almacenados en la memoria de alta velocidad de la computadora y no para que los especificara el cableado físico de la computadora. Esto superó una severa limitación del ENIAC, que era el importante tiempo y esfuerzo requerido para volver a configurar el equipo para realizar una nueva tarea. Con el diseño de von Neumann, el programa o software que corría EDVAC podría ser cambiado simplemente cambiando el contenido de la memoria. Sin embargo, EDVAC no fue la primera computadora de programa almacenado, la Máquina Experimental de Pequeña Escala de Mánchester, un pequeño prototipo de computadora de programa almacenado, ejecutó su primer programa el 21 de junio de 1948.[2]​ Su sucesora, la Manchester Mark I, ejecutó su primer programa en la noche del 16 al 17 de junio de 1949.

Las primeras CPU fueron diseñadas a medida como parte de una computadora más grande, generalmente una computadora única en su especie. Sin embargo, este método de diseñar las CPU a medida, para una aplicación particular, ha desaparecido en gran parte y se ha sustituido por el desarrollo de clases de procesadores baratos y estandarizados adaptados para uno o varios propósitos. Esta tendencia de estandarización comenzó generalmente en la era de los transistores discretos, computadoras centrales y microcomputadoras y fue acelerada rápidamente con la popularización del circuito integrado (IC), este ha kermitido que sean diseñados y fabricados CPU más complejas en espacios pequeños en la orden de nanómetros. Tanto la miniaturización como la estandarización de las CPU han aumentado la presencia de estos 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 móviles o celulares y juguetes de niños.

Si bien von Neumann muchas veces acreditado por el diseño de la computadora con programa almacenado debido a su diseño del EDVAC, otros antes que él, como Konrad Zuse, habían sugerido y aplicado ideas similares. La denominada arquitectura Harvard del Harvard Mark I, que se completó antes de EDVAC, también utilizó un diseño de programa almacenado usando cinta de papel perforada en vez de memoria electrónica. La diferencia clave entre las arquitecturas de von Neumann y la de Harvard es que la última separa dentro del almacenamiento el tratamiento de 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 de diseño von Neumann, pero los CPU con arquitectura Harvard se ven, sobre todo en aplicaciones embebidas; por ejemplo, los microcontroladores Atmel AVR son procesadores de arquitectura Harvard.

Los relés eléctricos y los tubos de vacío (válvulas termoiónicas) eran usados comúnmente como elementos de conmutación; una computadora útil requiere miles o decenas de miles de dispositivos de conmutación. La velocidad global de un sistema depende de la velocidad de los conmutadores. Las computadoras de tubo, como el EDVAC, tendieron en tener un promedio de ocho horas entre fallos, mientras que las computadoras de relés, (anteriores y más lentos), como el Harvard Mark I, fallaban muy raramente.[3]​ Al final, los CPU basados en tubo llegaron a ser dominantes porque las significativas ventajas de velocidad producidas generalmente pesaban más que los problemas de confiabilidad. La mayor parte de estas tempranas CPU síncronas corrían en frecuencias de reloj bajas comparadas con los modernos diseños microelectrónicos. Eran muy comunes en este tiempo las frecuencias de la señal del reloj con un rango desde 100 kHz hasta 4 MHz, limitado en gran parte por la velocidad de los dispositivos de conmutación con los que fueron construidos.

CPU de transistores y de circuitos integrados discretos

 
CPU, memoria de núcleo e interfaz de bus externo de un MSI PDP-8/I. Hecho de circuitos integrados de mediana escala.

La complejidad del diseño de las CPU aumentó junto con la facilidad de la construcción de dispositivos electrónicos más pequeños y confiables. La primera de esas mejoras vino con el advenimiento del transistor. Las CPU transistorizadas durante los años 1950 y los años 1960 no tuvieron que ser construidos con elementos de conmutación abultados, no fiables y frágiles, como los tubos de vacío y los relés eléctricos. Con esta mejora, fueron construidas CPU más complejas y más confiables sobre una o varias tarjetas de circuito impreso que contenían componentes discretos (individuales).

Durante este período, ganó popularidad un método de fabricar muchos transistores en un espacio compacto. El circuito integrado (IC) permitió que una gran cantidad de transistores fueran fabricados en una simple oblea basada en semiconductor o "chip". Al principio, solamente circuitos digitales muy básicos, no especializados, como las puertas NOR fueron miniaturizados en IC. Las CPU basadas en estos IC de "bloques de construcción" generalmente son referidos como dispositivos de pequeña escala de integración "small-scale integration" (SSI). Los circuitos integrados SSI, como los usados en el computador guía del Apoyo (Apollo Guidance Computer), usualmente contenían transistores que se contaban en números de múltiplos de diez. Construir un CPU completo usando IC SSI requería miles de chips individuales, pero todavía consumía mucho menos espacio y energía que diseños anteriores de transistores discretos. A medida que la tecnología microelectrónica avanzó, en los IC fue colocado un número creciente de transistores, disminuyendo así la cantidad de IC individuales necesarios para una CPU completa. Los circuitos integrados MSI y el LSI (de mediana y gran escala de integración) aumentaron el número de transistores a cientos y luego a miles.

En 1964, IBM introdujo su arquitectura de computador System/360, que fue usada en una serie de computadoras que podían ejecutar los mismos programas con velocidades y desempeños diferentes. Esto fue significativo en un tiempo en que la mayoría de las computadoras electrónicos eran incompatibles entre sí, incluso las hechas por el mismo fabricante. Para facilitar esta mejora, IBM utilizó el concepto de microprograma, a menudo llamado «microcódigo», ampliamente usado aún en las CPU modernas.[4]​ La arquitectura System/360 era tan popular que dominó el mercado del mainframe durante las siguientes décadas y dejó una herencia que todavía aún perdura en las computadoras modernas, como el IBM zSeries. En el mismo año de 1964, Digital Equipment Corporation (DEC) introdujo otra computadora que sería muy influyente, dirigida a los mercados científicos y de investigación, el PDP-8. DEC introduciría más adelante la muy popular línea del PDP-11, que originalmente fue construido con IC SSI pero eventualmente fue implementado con componentes LSI cuando se convirtieron en prácticos. En fuerte contraste con sus precursores hechos con tecnología SSI y MSI, la primera implementación LSI del PDP-11 contenía una CPU integrada únicamente por cuatro circuitos integrados LSI.[5]

Las computadoras basadas en transistores tenían varias ventajas frente a sus predecesores. Aparte de facilitar una creciente fiabilidad y un menor consumo de energía, los transistores también permitían que CPU operara 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 tanto a esta creciente fiabilidad como al dramático incremento de velocidad de los elementos de conmutación que por este tiempo eran casi exclusivamente transistores, se fueron alcanzando frecuencias de reloj de la CPU de decenas de megahercios. Además, mientras que las CPU de transistores discretos y circuitos integrados se usaban comúnmente, comenzaron a aparecer los nuevos diseños de alto rendimiento como procesadores vectoriales SIMD (single instruction multiple data – instrucción única, datos múltiples). Estos primeros diseños experimentales dieron lugar más adelante a la era de las supercomputadoras especializadas, como las hechas por Cray Inc.

Microprocesadores

 
Oblea de un microprocesador Intel 80486DX2 (tamaño: 12×6,75 mm) en su empaquetado.
 
CPU Intel Core i5 en una placa base de la computadora portátil Vaio serie E (a la derecha, debajo del tubo termosifón bifásico.

En la década de 1970 los inventos fundamentales de Federico Faggin (ICs Silicon Gate MOS con puertas autoalineadas junto con su nueva metodología de diseño de lógica aleatoria) cambió el diseño e implementación de las CPU para siempre. Desde la introducción del primer microprocesador comercialmente disponible, el Intel 4004, en 1970 y del primer microprocesador ampliamente usado, el Intel 8080, en 1974, esta clase de CPU ha desplazado casi totalmente el resto de los métodos de implementación de la Unidad Central de procesamiento. Los fabricantes de mainframes y minicomputadoras de ese tiempo lanzaron programas de desarrollo de IC propietarios para actualizar sus arquitecturas de computadoras más viejas y eventualmente producir microprocesadores con conjuntos de instrucciones que eran retrocompatibles con sus hardwares y softwares más viejos. Combinado con el advenimiento y el eventual vasto éxito de la ahora ubicua computadora personal, el término "CPU" es aplicado ahora casi exclusivamente a los microprocesadores.

Las generaciones previas de CPU fueron implementadas como componentes discretos y numerosos circuitos integrados de pequeña escala de integración en una o más tarjetas de circuitos. Por otro lado, los microprocesadores son CPU fabricados con un número muy pequeño de IC; usualmente solo uno. El tamaño más pequeño del CPU, como resultado de estar implementado en una simple pastilla, significa tiempos de conmutación más rápidos debido a factores físicos como el decrecimiento de la capacitancia parásita de las puertas. Esto ha permitido que los microprocesadores síncronos tengan tiempos de reloj con un rango de decenas de megahercios a varios gigahercios. Adicionalmente, como ha aumentado la capacidad de construir transistores excesivamente pequeños en un IC, la complejidad y el número de transistores en un simple CPU también se ha incrementado dramáticamente. Esta tendencia ampliamente observada es descrita por la ley de Moore, que ha demostrado hasta la fecha, ser una predicción bastante exacta del crecimiento de la complejidad de los CPUs y otros IC.[6]​ Mientras que, en los pasados sesenta años han cambiado drásticamente, la complejidad, el tamaño, la construcción y la forma general de la CPU, es notable que el diseño y el funcionamiento básico no ha cambiado demasiado. Casi todos los CPU comunes de hoy se pueden describir con precisión como máquinas de programa almacenado de von Neumann. A medida que la ya mencionada ley del Moore continúa manteniéndose verdadera,[6]​ se han presentado preocupaciones sobre 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 que se vuelven mucho más significativos, como la electromigración y el subumbral de pérdida. Estas nuevas preocupaciones están entre los muchos factores que hacen a investigadores estudiar nuevos métodos de computación como la computación cuántica, así como ampliar el uso de paralelismo y otros métodos que extienden la utilidad del modelo clásico de von Neumann.

Operación

La operación fundamental de la mayoría de las CPU es ejecutar una secuencia de instrucciones almacenadas llamadas «programa». El programa es representado por una serie de números que se mantienen en una cierta clase de memoria de computadora. Hay cuatro pasos que casi todos las CPU de arquitectura de von Neumann usan en su operación: fetch, decode, execute, y writeback, (leer, decodificar, ejecutar y escribir).

 
Diagrama mostrando como es decodificada una instrucción del MIPS32. (MIPS Technologies 2005)

Fetch

El primer paso, leer, implica el recuperar una instrucción, (que es representada por un número o una secuencia de números), de la memoria de programa. La localización en la memoria del programa es determinada por un contador de programa (PC), que almacena un número que identifica la dirección de la siguiente instrucción que se debe buscar. Después se lee una instrucción, el PC es incrementado por la longitud de la instrucción en términos de unidades de memoria de modo que contendrá la dirección de la siguiente instrucción en la secuencia. Frecuentemente, la instrucción a ser leída debe ser recuperada de memoria relativamente lenta, haciendo detener al CPU mientras espera que la instrucción sea devuelta. Esta cuestión se trata en gran medida en los procesadores modernos por los cachés y las arquitecturas pipeline (ver abajo).

Decode

En el paso de decodificación, la instrucción es dividida en partes que tienen significado para otras unidades de la CPU. La manera en que el valor de la instrucción numérica es interpretado está definida por la arquitectura del conjunto de instrucciones (el ISA) de la CPU. A menudo, un grupo de números en la instrucción, llamados opcode, indica qué operación realizar. Las partes restantes del número usualmente proporcionan información requerida para esa instrucción, como por ejemplo, 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, que según lo determinado por algún modo de dirección, puede ser un registro o una dirección de memoria. En diseños más viejos las unidades del CPU responsables de decodificar la instrucción eran dispositivos de hardware fijos. Sin embargo, en CPUs e ISAs más abstractos y complicados, es frecuentemente usado un microprograma para ayudar a traducir instrucciones en varias señales de configuración para el CPU. Este microprograma es a veces reescribible de tal manera que puede ser modificado para cambiar la manera en que el CPU decodifica instrucciones incluso después de que haya sido fabricado.

Execute

 
Diagrama de bloques de un CPU simple.

Después de los pasos de lectura y decodificación, es llevado a cabo el paso de la ejecución de la instrucción. Durante este paso, varias unidades del CPU son conectadas de tal manera que ellas pueden realizar la operación deseada. Si, por ejemplo, una operación de adición fue solicitada, una unidad aritmético lógica (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. La ALU contiene la circuitería para realizar operaciones simples de aritmética y lógica en las entradas, como adición y operaciones de bits (bitwise). Si la operación de adición produce un resultado demasiado grande para poder ser manejado por el CPU, también puede ser ajustada una bandera (flag) de desbordamiento aritmético localizada en un registro de banderas (ver abajo la sección sobre rango de números enteros).

Writeback

El paso final, la escritura, 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 una memoria principal más lenta pero más barata y más grande. Algunos tipos de instrucciones manipulan el contador de programa en lugar de directamente producir datos de resultado. Estas son llamadas generalmente "saltos" (jumps) y facilitan comportamientos como bucles, la ejecución condicional de programas (con el uso de saltos condicionales), y funciones en programas. Muchas instrucciones también cambiarán el estado de dígitos en un registro de "banderas". Estas banderas pueden ser usadas para influenciar cómo se comporta un programa, puesto que a menudo indican el resultado de varias operaciones. Por ejemplo, un tipo de instrucción de "comparación" considera dos valores y fija un número, en el registro de banderas, de acuerdo a cuál es el mayor. Entonces, esta bandera puede ser usada por una posterior instrucción de salto para determinar el flujo de programa.

Después de la ejecución de la instrucción y la escritura de los datos resultantes, el proceso entero se repite con el 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 a la cual 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. Esta sección describe lo que es referido generalmente como el "entubado RISC clásico" (Classic RISC pipeline), que de hecho es bastante común entre los CPU simples usados en muchos dispositivos electrónicos, a menudo llamados microcontroladores.

Diseño e implementación

Rango de enteros

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

 
Microprocesador MOS 6502 en un dual in-line package (encapsulado en doble línea), un diseño extremadamente popular de 8 bits.

Con la representación numérica están relacionados 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 una posición significativa en los números con que trabaja un CPU. El número de bits (o de posiciones numéricas, o dígitos) que un CPU usa para representar los números, a menudo se llama "tamaño de la palabra", "ancho de bits", "ancho de ruta de datos", o "precisión del número entero" cuando se ocupa estrictamente de números enteros (en oposición a números de coma flotante). Este número difiere entre las arquitecturas, y a menudo dentro de diferentes unidades del mismo CPU. Por ejemplo, un CPU de 8 bits maneja un rango de números que pueden ser representados por ocho dígitos binarios, cada dígito teniendo dos valores posibles, y en combinación los 8 bits teniendo 28 o 256 números discretos. En efecto, el tamaño del número entero fija un límite de hardware en el rango de números enteros que el software corre y que el CPU puede usar directamente.

El rango del número entero también puede afectar el número de posiciones en memoria que el 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 a un octeto (8 bits), la cantidad máxima de memoria que el CPU puede direccionar es 232 octetos, o 4 GB. Esta es una vista muy simple del espacio de dirección del CPU, y muchos diseños modernos usan métodos de dirección mucho más complejos como paginación para localizar más memoria que su rango entero permitiría con un espacio de dirección plano.

Niveles más altos del rango de números enteros requieren más estructuras para manejar los dígitos adicionales, y por lo tanto, más complejidad, tamaño, uso de energía, y generalmente costo. Por ello, no es del todo infrecuente, ver microcontroladores de 4 y 8 bits usados en aplicaciones modernas, aun cuando están disponibles CPU con un rango mucho más alto (de 16, 32, 64, e incluso 128 bits). Los microcontroladores más simples son generalmente más baratos, usan menos energía, y por lo tanto disipan menos calor. Todo esto pueden ser consideraciones de diseño importantes para los dispositivos electrónicos. Sin embargo, en aplicaciones del extremo alto, los beneficios producidos por el rango adicional, (más a menudo el espacio de dirección adicional), son más significativos y con frecuencia afectan las opciones del diseño. Para ganar algunas de las ventajas proporcionadas por las longitudes de bits tanto más bajas, como más altas, muchas CPUs están diseñadas con anchos de bit diferentes para diferentes unidades del dispositivo. Por ejemplo, el IBM System/370 usó un CPU que fue sobre todo de 32 bits, pero usó precisión de 128 bits dentro de sus unidades de coma flotante para facilitar mayor exactitud y rango de números de coma flotante.[4]​ Muchos diseños posteriores de CPU usan una mezcla de ancho de bits similar, especialmente cuando el procesador está diseñado para usos de propósito general donde se requiere un razonable equilibrio entre la capacidad de números enteros y de coma flotante.

Frecuencia de reloj

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

Este período debe ser más largo que la cantidad de tiempo que toma a una señal moverse, o propagarse en el peor de los casos. Al fijar el período del reloj a un valor bastante mayor sobre el retardo de la propagación del peor caso, es posible diseñar todo el CPU y la manera que mueve los datos alrededor de los "bordes" de la subida y bajada de la señal del reloj. Esto tiene la ventaja de simplificar el CPU significativamente, tanto en una perspectiva de diseño, como en una perspectiva de cantidad de componentes. Sin embargo, esto también tiene la desventaja que todo el CPU debe esperar por sus elementos más lentos, aun cuando algunas unidades de la misma son mucho más rápidas. Esta limitación ha sido compensada en gran parte por varios métodos de aumentar el paralelismo del CPU (ver abajo).

Sin embargo, las mejoras arquitectónicas por sí solas, no solucionan todas las desventajas de CPUs globalmente síncronas. 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 más difícil de mantener la señal del reloj en fase (sincronizada) a través de toda la unidad. Esto ha conducido que muchos CPU modernos requieran que se les proporcione múltiples señales de reloj idénticas, para evitar retardar una sola señal lo suficiente como para hacer al CPU funcionar incorrectamente. Otro importante problema cuando la velocidad del reloj aumenta dramáticamente, es la cantidad de calor que es disipado por el CPU. La señal del reloj cambia constantemente, provocando la conmutación de muchos componentes (cambio de estado) sin importar si están siendo usados en ese momento. En general, un componente que está cambiando de estado, usa más energía que un elemento en un estado estático. Por lo tanto, a medida que la velocidad del reloj aumenta, así lo hace también la disipación de calor, causando que el CPU requiera soluciones de enfriamiento más efectivas.

Un método de tratar la conmutación de componentes innecesarios se llama el clock gating, que implica apagar la señal del reloj a los componentes innecesarios, efectivamente desactivándolos. Sin embargo, esto es frecuentemente considerado como difícil de implementar y por lo tanto no ve uso común fuera de diseños de muy baja potencia. Un notable diseño de CPU tardío que utiliza una amplia compuerta del reloj para reducir los requisitos de potencia de la consola de videojuegos es la de la Xbox 360 basada en la PowerPC de IBM.[7]​ Otro método de tratar algunos de los problemas de una señal global de reloj es la completa remoción de la misma. Mientras que quitar la señal global del reloj hace, de muchas maneras, considerablemente más complejo el proceso del diseño, en comparación con diseños síncronos similares, los diseños asincrónicos (o sin reloj) tienen marcadas ventajas en el consumo de energía y la disipación de calor. Aunque se trate de algo infrecuente, las CPUs completas se han construido sin utilizar una señal global de reloj. Dos notables ejemplos de esto son el AMULET, que implementa la arquitectura del ARM, y el MiniMIPS, compatible con el MIPS R3000. En lugar de remover totalmente la señal del reloj, algunos diseños de CPU permiten que ciertas unidades del dispositivo sean asincrónicas, como por ejemplo, usando ALU en conjunción con pipelining superescalar para alcanzar algunas ganancias en el desempeño aritmético. Mientras que no esté completamente 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 por lo menos sobresalen en las operaciones matemáticas más simples. Esto, combinado con sus excelentes características de consumo de energía y disipación de calor, los hace muy adecuados para sistemas embebidos.[8]

Paralelismo

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

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

Este proceso da lugar a una ineficacia inherente en CPU subescalares. Puesto que solamente una instrucción es ejecutada a la vez, todo el CPU debe esperar que esa instrucción se complete antes de proceder a la siguiente instrucción. Como resultado, la CPU subescalar queda "paralizado" en instrucciones que toman más de un ciclo de reloj para completar su ejecución. Incluso la adición de una segunda unidad de ejecución (ver abajo) no mejora mucho el desempeño. En lugar de un camino quedando congelado, ahora dos caminos se paralizan y aumenta el número de transistores no usados. Este diseño, en donde los recursos de ejecución de la CPU pueden operar con solamente una instrucción a la vez, solo puede, posiblemente, alcanzar el desempeño escalar (una instrucción por ciclo de reloj). Sin embargo, el desempeño casi siempre es subescalar (menos de una instrucción por ciclo).

Las tentativas de alcanzar un desempeño escalar y mejor, han resultado en una variedad de metodologías de diseño que hacen comportarse al CPU menos linealmente y más en paralelo. Cuando se refiere al paralelismo en los CPU, generalmente son usados dos términos para clasificar estas técnicas de diseño.

  • El paralelismo a nivel de instrucción, en inglés instruction level parallelism (ILP), busca aumentar la tasa en la cual las instrucciones son ejecutadas dentro de un CPU, es decir, aumentar la utilización de los recursos de ejecución en la pastilla.
  • El paralelismo a nivel de hilo de ejecución, en inglés thread level parallelism (TLP), que se propone incrementar el número de hilos (efectivamente programas individuales) que un CPU pueda ejecutar simultáneamente.

Cada metodología se diferencia tanto en las maneras en las que están implementadas, como en la efectividad relativa que producen en el aumento del desempeño de la CPU para una aplicación.

ILP: Segmentación y arquitectura superescalar

 
Tubería básica de cinco etapas. En el mejor de los casos, esta tubería puede sostener un ratio de completado de una instrucción por ciclo.

Uno de los métodos más simples para lograr incrementar al paralelismo es comenzar los primeros pasos de leer y decodificar la instrucción antes de que la instrucción anterior haya terminado de ejecutarse. Esta es la forma más simple de una técnica conocida como segmentación (instruction pipelining en inglés), y es utilizada en casi todas los CPU de propósito general modernos. Al dividir la ruta de ejecución en etapas discretas, la tubería permite que más de una instrucción sea ejecutada en cualquier tiempo. Esta separación puede ser comparada a una línea de ensamblaje, en la cual una instrucción es hecha más completa en cada etapa hasta que sale de la tubería de ejecución y es retirada del mismo.

Sin embargo, la tubería introduce la posibilidad de una situación donde es necesario terminar el resultado de la operación anterior para completar la operación siguiente; una condición llamada a menudo como conflicto de dependencia de datos. Para hacer frente a esto, debe ser tomado un cuidado adicional para comprobar estas clases de condiciones, y si esto ocurre, se debe retrasar una porción de la tubería de instrucción. Naturalmente, lograr esto requiere circuitería adicional, los procesadores entubados son más complejos que los subescalares, pero no mucho. Un procesador entubado puede llegar a ser casi completamente escalar, solamente inhibido por las abruptas paradas de la tubería (una instrucción durando más de un ciclo de reloj en una etapa).

 
Segmentación superescalar simple. Al leer y despachar dos instrucciones a la vez, un máximo de dos instrucciones por ciclo pueden ser completadas.

Una mejora adicional sobre la idea del entubado de instrucción (instruction pipelining) condujo al desarrollo de un método que disminuye incluso más el tiempo ocioso de los componentes del 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.[9]​ En una tubería superescalar, múltiples instrucciones son leídas y pasadas a un despachador, que decide si las instrucciones se pueden o no ejecutar en paralelo (simultáneamente). De ser así, son despachadas a las unidades de ejecución disponibles, dando por resultado la capacidad para que varias instrucciones sean ejecutadas simultáneamente. En general, cuanto más instrucciones un CPU superescalar es capaz de despachar simultáneamente a las unidades de ejecución en espera, más instrucciones serán completadas en un ciclo dado.

La mayor parte de la dificultad en el diseño de una arquitectura superescalar de CPU descansa en crear un despachador eficaz. El despachador necesita poder determinar rápida y correctamente si las instrucciones pueden ejecutarse en paralelo, tan bien como despacharlas de una manera que mantenga ocupadas tantas unidades de ejecución como sea posible. Esto requiere que la tubería de instrucción sea llenada tan a menudo como sea posible y se incrementa la necesidad, en las arquitecturas superescalares, de cantidades significativas de caché de CPU. Esto también crea técnicas para evitar peligros como la predicción de bifurcación, ejecución especulativa, y la ejecución fuera de orden, cruciales para mantener altos niveles de desempeño. Tratando de predecir qué rama (o trayectoria) tomará una instrucción condicional, la CPU puede minimizar el número de veces que todo el canal debe esperar hasta que se complete una instrucción condicional. Frecuentemente, la ejecución especulativa proporciona aumentos modestos del desempeño al ejecutar porciones de código que no puede ser necesario después de completarse una operación condicional. Fuera de la orden de ejecución cambia de algún modo el orden en que se ejecutan las instrucciones para reducir retardos debido a las dependencias de datos. También en el caso de instrucciones individuales de datos múltiples — los procesadores modernos, en caso de que se hayan procesado una gran cantidad de datos del mismo tipo, pueden desactivar partes de la tubería de manera que cuando se ejecuta una sola sentencia muchas veces, la CPU salta la captación y decodifica fases y por lo tanto aumenta considerablemente el rendimiento en ciertas ocasiones, sobre todo en los motores de programas altamente monótonos como el software de creación de video y procesamiento de fotografías.

En el caso donde una porción de la CPU es superescalar y una parte no lo es, la parte que no es superescalar sufre en el desempeño debido a las paradas de horario. El Intel Pentium original (P5) tenía dos ALUs superescalares que podían aceptar, cada una, una instrucción por ciclo de reloj, pero su FPU no podía aceptar una instrucción por ciclo de reloj. Así el P5 era superescalar en la parte de números enteros pero no era superescalar de números de coma (o punto [decimal]) flotante. El sucesor a la arquitectura del Pentium de Intel, el P6, agregó capacidades superescalares a sus funciones de coma flotante, y por lo tanto produjo un significativo aumento en el desempeño de este tipo de instrucciones.

Tanto el diseño superescalar como el entubado simple aumentan el ILP de una CPU al permitir a un solo procesador completar la ejecución de instrucciones en ratios que sobrepasan una instrucción por ciclo (IPC). La mayoría de los modernos diseños de CPU son por lo menos algo superescalares, y en la última década, casi todos los diseños de CPU de propósito general son superescalares. En los últimos años algo del énfasis en el diseño de computadores de alto ILP se ha movido del hardware del CPU hacia su interfaz de software, o ISA. La estrategia very long instruction word o VLIW, causa a algún ILP a ser implícito directamente por el software, reduciendo la cantidad de trabajo que el CPU debe realizar para darle un empuje significativo al ILP y por lo tanto reducir la complejidad del diseño.

Paralelismo a nivel de hilos

Otra estrategia para lograr el rendimiento es ejecutar varios programas o hilos en paralelo. Esta área de investigación se conoce como computación paralela. En la 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 fue el multiprocesamiento (MP). El puntapié inicial de esta tecnología se conoce como multiprocesamiento simétrico (SMP), donde un pequeño número de CPU comparten una visión coherente de su sistema de memoria. En este esquema, cada CPU tiene un hardware adicional para mantener una visión constantemente actualizada de la memoria. Para evitar visitas rancias de la memoria, las CPU pueden cooperar en el mismo programa y los programas pueden migrar desde una CPU a otra. Para aumentar el número de CPUs que cooperan más allá de unas pocas, se introdujeron en 1990, los esquemas tales como el non-uniform memory Access (acceso no uniforme a memoria) (NUMA) y los protocolos de coherencia basados en directorios. Los 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 se construyó usando múltiples CPUs discretas y tableros para implementar la interconexión entre los procesadores. Cuando los procesadores y su interconexión hayan sido implementadas en un único chip de silicio, la tecnología se conoce como un procesador multinúcleo.

Posteriormente, se reconoció que existía un paralelismo muy estrecho con un único programa. Un único programa podría tener varios hilos (o funciones) que podrían ser ejecutadas por separado o en paralelo. Algunos de los primeros ejemplos de esta tecnología implementaba procesamiento de entrada/salida tales como el acceso directo a memoria como un hilo separado del hilo computado. En la década de 1970, se introdujo un enfoque más general a esta tecnología, cuando se diseñaron sistemas para ejecutar múltiples hilos de computación en paralelo. Esta tecnología se conoce como multihilo (MT).

Este enfoque se considera más rentable que la del multiprocesamiento, ya que solo se replica un pequeño número de componentes dentro de una CPU para soportar MT en oposición a la totalidad de la CPU en el caso de MP. En MT, las unidades de ejecución y el sistema de memoria incluyendo los cachés son compartidos entre varios hilos. La desventaja de MT es que el soporte de hardware para multihilo es más visible para el software que la de MP y por lo tanto el software supervisor como el de los sistemas operativos tienen que someterse a los cambios más grandes para apoyar MT. Un tipo de MT que se implementó es conocido como bloque multihilo, donde se ejecuta un hilo hasta que se paralice esperando que regresen los datos desde la memoria externa. En este esquema, la CPU tendría luego que cambiar rápidamente a otro hilo que está listo para funcionar, el interruptor muchas veces realiza un ciclo de reloj de la CPU, como la tecnología UltraSPARC. Otro tipo de MT se denomina multihilo simultáneo, en donde las instrucciones de múltiples hilos se ejecutan en paralelo dentro de un ciclo de reloj de la CPU.

Paralelismo de datos

Un menos común pero cada vez más importante paradigma de CPU (y de hecho, de computación en general) trata con vectores. Los procesadores de los que se ha hablado anteriormente son todos referidos como cierto tipo de dispositivo escalar. Como implica su nombre, 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 una pieza de dato por cada instrucción. Estos dos esquemas de ocuparse de los datos son generalmente referidos respectivamente como SISD (single instruction, single data) y SIMD (single instruction, multiple data). La gran utilidad en crear CPU que se ocupen de vectores de datos radica en la optimización de tareas que tienden a requerir la misma operación, por ejemplo, una suma, o un producto escalar, a ser realizado 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 una CPU escalar debe completar todo el proceso de leer, decodificar, y ejecutar cada instrucción y valor en un conjunto de datos, una CPU vectorial puede realizar una simple operación en un comparativamente grande conjunto de datos con una sola instrucción. Por supuesto, esto es solamente posible cuando la aplicación tiende a requerir muchos pasos que apliquen una operación a un conjunto grande de datos.

La mayoría de las primeras CPU vectoriales, como el Cray-1, se asociaron casi exclusivamente a aplicaciones de investigación científica y criptografía. Sin embargo, a medida que la multimedia se desplazó en gran parte a medios digitales, ha llegado a ser significativa la necesidad de una cierta forma de SIMD en CPUs de propósito general. Poco después de que comenzara a ser común incluir unidades de coma flotante en procesadores de uso general, también comenzaron a aparecer especificaciones e implementaciones de unidades de ejecución SIMD para las CPU de uso general. Algunas de estas primeras especificaciones SIMD, como el MMX de Intel, fueron solamente para números enteros. Esto demostró ser un impedimento significativo para algunos desarrolladores de software, ya que muchas de las aplicaciones que se beneficiaban del SIMD trataban sobre todo con números de coma flotante. Progresivamente, estos primeros diseños fueron refinados y rehechos en alguna de las comunes, modernas especificaciones SIMD, que generalmente están asociadas a un ISA. Algunos ejemplos modernos notables son el SSE de Intel y el AltiVec relacionado con el PowerPC (también conocido como VMX).

Desempeño

El "desempeño" (performance) o la velocidad de un procesador depende de, entre muchos otros factores, la velocidad del reloj (generalmente dada en múltiplos de hertz) y las instrucciones por ciclo de reloj (IPC), que juntos son los factores para las instrucciones por segundo (IPS) que el CPU puede rendir.[10]​ Muchos reportes de valores IPS han representado 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 de aplicaciones, algunas de las cuales requieren más tiempo para ejecutar que otras. El rendimiento de la jerarquía de memoria también afecta en gran medida al rendimiento del procesador, un tema muy poco tenido en cuenta en los cálculos de MIPS. Debido a estos problemas, para este fin, se han desarrollado varios exámenes estandarizados, tales como SPECint muchas veces llamados "puntos de referencia" - para tratar de medir el rendimiento real efectivo en aplicaciones de uso cotidiano.

El desempeño de procesamiento de las computadoras se incrementa utilizando procesadores multinúcleo, que en esencia es conectar dos o más procesadores individuales (llamados núcleos en este sentido) en un solo circuito integrado.[11]​ 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, la ganancia de desempeño es mucho menor, solo alrededor del 50%,[12]​ debido a la implementación de algoritmos imperfectos de software.[13]​ El aumento del número de núcleos en un procesador (es decir, dual-core, quad-core, etc) aumenta la carga de trabajo que se puede manejar. Esto significa que el procesador ahora puede manejar numerosos eventos asíncronos, interrupciones, etc que pueden tomar un "peaje" en la CPU (Central Processing Unit) cuando se abruma. Estos núcleos pueden considerarse como diferentes plantas en una planta de procesamiento, con el manejo de cada piso una tarea diferente. En ocasiones, 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.

Debido a las capacidades específicas de las CPU modernas, como HyperThreading y Uncore, que implican el intercambio de recursos reales de la CPU mientras que el objetivo de una mayor utilización, supervisar los niveles de rendimiento y la utilización del hardware se fue convirtiendo gradualmente en una tarea más compleja. Como respuesta, algunas CPUs implementan lógica de hardware adicional que controla la utilización real de las diversas partes de una CPU y proporciona varios contadores accesibles a software; un ejemplo es la tecnología Performance Counter Monitor ("Monitor de contador de rendimiento") de Intel.[14]

Véase también

Referencias

  1. (en inglés). Moore School of Electrical Engineering, Universidad de Pennsylvania. 1945. Archivado desde el original el 23 de abril de 2004. 
  2. Enticknap, Nicholas (Verano de 1998), , Resurrection (en inglés) (The Computer Conservation Society) 20, ISSN 0958-7403, archivado desde el original el 9 de enero de 2012, consultado el 19 de abril de 2008 .
  3. Weik, Martin H. (1961). A Third Survey of Domestic Electronic Digital Computing Systems (en inglés). Ballistic Research Laboratories. 
  4. Amdahl, G. M., Blaauw, G. A., & Brooks, F. P. Jr. (1964). (en inglés). IBM Research. Archivado desde el original el 5 de febrero de 2007. 
  5. Digital Equipment Corporation (noviembre de 1975). . LSI-11, PDP-11/03 user's manual (en inglés) (2da edición). Maynard, Massachusetts: Digital Equipment Corporation. pp. 4-3. Archivado desde el original el 24 de mayo de 2006. 
  6. (PDF) (en inglés). Intel. 2005. Archivado desde el original el 29 de octubre de 2012. Consultado el 25 de julio de 2012. 
  7. Brown, Jeffery (2005). «Application-customized CPU design» (en inglés). IBM developerWorks. Consultado el 17 de diciembre de 2005. 
  8. Garside, J. D., Furber, S. B., & Chung, S-H (1999). (en inglés). University of Manchester Computer Science Department. Archivado desde el original el 10 de diciembre de 2005. 
  9. Huynh, Jack (2003). (en inglés). University of Illinois — Urbana-Champaign. pp. 6-11. Archivado desde el original el 28 de noviembre de 2007. Consultado el 6 de octubre de 2007. 
  10. «CPU Frequency». CPU World Glossary (en inglés). CPU World. 25 de marzo de 2008. Consultado el 1 de enero de 2010. 
  11. «What is (a) multi-core processor?». Data Center Definitions (en inglés). SearchDataCenter.com. 27 de marzo de 2007. Consultado el 1 de enero de 2010. 
  12. «Guía para configurar y montar un PC Gaming por piezas». Consultado el 9 de mayo de 2018. 
  13. . http://www.buzzle.com/. Archivado desde el original el 25 de julio de 2015. Consultado el 26 de noviembre de 2014. 
  14. Thomas Willhalm; Roman Dementiev; Patrick Fay (18 de diciembre de 2014). «Intel Performance Counter Monitor A better way to measure CPU utilization» (en inglés). Consultado el 17 de febrero de 2015. 

Bibliografía

  • Amdahl, G. M., Blaauw, G. A., & Brooks, F. P. Jr. (1964). Architecture of the IBM System/360. IBM Research. 
  • Brown, Jeffery (2005). «Application-customized CPU design». IBM developerWorks. Consultado el 17 de diciembre de 2005. 
  • Digital Equipment Corporation (noviembre de 1975). «LSI-11 Module Descriptions». LSI-11, PDP-11/03 user's manual (2da edición edición). Maynard, Massachusetts: Digital Equipment Corporation. pp. 4-3. 
  • Garside, J. D., Furber, S. B., & Chung, S-H (1999). AMULET3 Revealed. University of Manchester Computer Science Department. 
  • Hennessy, John A.; Goldberg, David (1996). Computer Architecture: A Quantitative Approach. Morgan Kaufmann Publishers. ISBN 1-55860-329-8. 
  • MIPS Technologies, Inc. (2005). . MIPS Technologies, Inc. Archivado desde el original el 18 de marzo de 2006. 
  • Smotherman, Mark (2005). «History of Multithreading». Consultado el 19 de diciembre de 2005. 
  • von Neumann, John (1945). . Moore School of Electrical Engineering, University of Pennsylvania. Archivado desde el original el 23 de abril de 2004. 
  • Weik, Martin H. (1961). A Third Survey of Domestic Electronic Digital Computing Systems. Ballistic Research Laboratories. 

Enlaces externos

  •   Wikimedia Commons alberga una categoría multimedia sobre Unidad central de procesamiento.

Diseños de microprocesador

  •   Wikiversidad alberga proyectos de aprendizaje sobre Unidad central de procesamiento. (en inglés)
  • Como trabajan los microprocesadores en HowStuffWorks. (en inglés)
  • 25 Microchips que sacudieron al mundo – un artículo del Instituto de Ingeniería Eléctrica y Electrónica. (en inglés)
  • Advanced Micro Devices - Advanced Micro Devices, un diseñador de principalmente CPU de la computadora personal compatible con x86. (en inglés)
  • ARM Ltd - ARM Ltd, uno de los pocos diseñadores de CPU que se benefician únicamente por licenciar sus diseños en lugar de fabricarlos. Los microprocesadores de arquitectura ARM se encuentran entre los más populares en el mundo para aplicaciones embebidas. (en inglés)
  • Freescale Semiconductor (antes de Motorola) - Freescale Semiconductor, diseñador de varios procesadores embebidos basados en PowerPC y SoC. (en inglés)
  • - División de Microelectrónica de IBM, que es responsable de mucho en diseños basados en POWER y PowerPC, incluyendo muchas de las CPU utilizada en las últimas consolas de videojuegos de 2012. (en inglés)
  • Intel Corp - un fabricante de varias líneas de CPU notables, incluyendo IA-32, IA-64, y XScale. También es un fabricante de chips de diferentes periféricos para su uso con su CPU. (en inglés)
  • MIPS Technologies - MIPS Technologies, desarrolladores de la arquitectura MIPS, pionero en diseños RISC. (en inglés)
  • Sun Microsystems - Sun Microsystems, desarrolladores de la arquitectura SPARC, un diseño RISC. (en inglés)
  • Texas Instruments (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última). - Texas Instruments división semiconductores. Diseña y fabrica varios tipos de microcontroladores de bajo consumo entre sus muchos otros productos semiconductores. (en inglés)
  • Transmeta - Transmeta Corporation. Creadores de x86 de baja potencia compatibles, como Crusoe y Efficeon. (en inglés)

Lectura adicional

  • - Introducción detallada al diseño de microprocesadores. (en inglés)
  • Cómo trabajan los microprocesadores. (en inglés)
  • Pipelining: An Overview - Buena introducción y visión general acerca de las técnicas de tuberías de CPU por el personal de Ars Technica. (en inglés)
  • SIMD Architectures - Introducción y explicación de SIMD, sobre todo cómo se relaciona con las computadoras personales. También por Ars Technica. (en inglés)
  • - Nombres de CPUs y principales características. (en inglés)
  •   Datos: Q5300
  •   Multimedia: Microprocessors
  • [1] - cyber security software, software developer . (en inglés)

unidad, central, procesamiento, para, otros, usos, este, término, véase, procesador, unidad, central, procesamiento, conocida, siglas, inglés, central, processing, unit, procesador, componente, hardware, dentro, computador, teléfonos, inteligentes, otros, disp. Para otros usos de este termino vease Procesador La unidad central de procesamiento CPU conocida por las siglas CPU del ingles Central Processing Unit o procesador es un componente del hardware dentro de un computador telefonos inteligentes y otros dispositivos programables Vista superior de una CPU Intel 80486DX2 en un paquete PGA de ceramica Vista posterior de una Intel 80486DX2 Procesador moderno con 8 nucleos y 16 hilos de procesamiento Su trabajo es interpretar las instrucciones de un programa informatico mediante la realizacion de las operaciones basicas aritmeticas logicas y externas provenientes de la unidad de entrada salida Su diseno y avance ha variado notablemente desde su creacion aumentando su eficiencia y potencia y reduciendo aspectos como el consumo de energia y el costo Una computadora puede contener mas de una CPU multiprocesamiento En la actualidad los microprocesadores estan constituidos por un unico circuito integrado chip aunque existen los procesadores multinucleo varias CPU en un solo circuito integrado Un circuito integrado que contiene una CPU tambien puede contener los dispositivos perifericos y otros componentes de un sistema informatico similar a un microcontrolador menos potente en RAM se le denomina sistema en un chip SoC Los componentes de la CPU son Unidad aritmetico logica ALU realiza operaciones aritmeticas y logicas Unidad de control CU dirige el trafico de informacion entre los registros de la CPU y conecta con la ALU las instrucciones extraidas de la memoria Registros internos no accesibles de instruccion de bus de datos y bus de direccion y accesibles de uso especifico contador programa puntero pila acumulador flags etc o de uso general Indice 1 Historia 1 1 CPU de transistores y de circuitos integrados discretos 1 2 Microprocesadores 2 Operacion 2 1 Fetch 2 2 Decode 2 3 Execute 2 4 Writeback 3 Diseno e implementacion 3 1 Rango de enteros 3 2 Frecuencia de reloj 3 3 Paralelismo 3 3 1 ILP Segmentacion y arquitectura superescalar 3 3 2 Paralelismo a nivel de hilos 3 3 3 Paralelismo de datos 4 Desempeno 5 Vease tambien 6 Referencias 7 Bibliografia 8 Enlaces externos 8 1 Disenos de microprocesador 8 2 Lectura adicionalHistoria EditarArticulo principal Anexo Historia de la computacion El ENIAC una de las primeras computadoras de programas almacenados electronicamente Las primeras computadoras como el ENIAC tenian que ser fisicamente recableados para realizar diferentes tareas lo que hizo que estas maquinas se denominaran computadoras de programa fijo Dado que el termino CPU generalmente se define como un dispositivo para la ejecucion de software programa informatico los primeros dispositivos que con razon podriamos llamar CPU vinieron con el advenimiento de la computadora de programa almacenado La idea de una computadora con programa almacenado ya estaba presente en el diseno de John Presper Eckert y en el ENIAC de John William Mauchly pero esta caracteristica se omitio inicialmente para que el aparato pudiera estar listo antes El 30 de junio de 1945 antes de que se construyera la ENIAC el matematico John von Neumann distribuyo el trabajo titulado First Draft of a Report on the EDVAC Primer Borrador de un Reporte sobre el EDVAC Fue el esbozo de una computadora de programa almacenado que se termino en agosto de 1949 1 EDVAC fue disenado para realizar un cierto numero de instrucciones u operaciones de varios tipos Significativamente los programas escritos para el EDVAC se crearon para ser almacenados en la memoria de alta velocidad de la computadora y no para que los especificara el cableado fisico de la computadora Esto supero una severa limitacion del ENIAC que era el importante tiempo y esfuerzo requerido para volver a configurar el equipo para realizar una nueva tarea Con el diseno de von Neumann el programa o software que corria EDVAC podria ser cambiado simplemente cambiando el contenido de la memoria Sin embargo EDVAC no fue la primera computadora de programa almacenado la Maquina Experimental de Pequena Escala de Manchester un pequeno prototipo de computadora de programa almacenado ejecuto su primer programa el 21 de junio de 1948 2 Su sucesora la Manchester Mark I ejecuto su primer programa en la noche del 16 al 17 de junio de 1949 Las primeras CPU fueron disenadas a medida como parte de una computadora mas grande generalmente una computadora unica en su especie Sin embargo este metodo de disenar las CPU a medida para una aplicacion particular ha desaparecido en gran parte y se ha sustituido por el desarrollo de clases de procesadores baratos y estandarizados adaptados para uno o varios propositos Esta tendencia de estandarizacion comenzo generalmente en la era de los transistores discretos computadoras centrales y microcomputadoras y fue acelerada rapidamente con la popularizacion del circuito integrado IC este ha kermitido que sean disenados y fabricados CPU mas complejas en espacios pequenos en la orden de nanometros Tanto la miniaturizacion como la estandarizacion de las CPU han aumentado la presencia de estos dispositivos digitales en la vida moderna mucho mas alla de las aplicaciones limitadas de maquinas de computacion dedicadas Los microprocesadores modernos aparecen en todo desde automoviles hasta telefonos moviles o celulares y juguetes de ninos Si bien von Neumann muchas veces acreditado por el diseno de la computadora con programa almacenado debido a su diseno del EDVAC otros antes que el como Konrad Zuse habian sugerido y aplicado ideas similares La denominada arquitectura Harvard del Harvard Mark I que se completo antes de EDVAC tambien utilizo un diseno de programa almacenado usando cinta de papel perforada en vez de memoria electronica La diferencia clave entre las arquitecturas de von Neumann y la de Harvard es que la ultima separa dentro del almacenamiento el tratamiento de instrucciones de la CPU y los datos mientras que el primero utiliza el mismo espacio de memoria para ambos La mayoria de los CPU modernos son de diseno von Neumann pero los CPU con arquitectura Harvard se ven sobre todo en aplicaciones embebidas por ejemplo los microcontroladores Atmel AVR son procesadores de arquitectura Harvard Los reles electricos y los tubos de vacio valvulas termoionicas eran usados comunmente como elementos de conmutacion una computadora util requiere miles o decenas de miles de dispositivos de conmutacion La velocidad global de un sistema depende de la velocidad de los conmutadores Las computadoras de tubo como el EDVAC tendieron en tener un promedio de ocho horas entre fallos mientras que las computadoras de reles anteriores y mas lentos como el Harvard Mark I fallaban muy raramente 3 Al final los CPU basados en tubo llegaron a ser dominantes porque las significativas ventajas de velocidad producidas generalmente pesaban mas que los problemas de confiabilidad La mayor parte de estas tempranas CPU sincronas corrian en frecuencias de reloj bajas comparadas con los modernos disenos microelectronicos Eran muy comunes en este tiempo las frecuencias de la senal del reloj con un rango desde 100 kHz hasta 4 MHz limitado en gran parte por la velocidad de los dispositivos de conmutacion con los que fueron construidos CPU de transistores y de circuitos integrados discretos Editar CPU memoria de nucleo e interfaz de bus externo de un MSI PDP 8 I Hecho de circuitos integrados de mediana escala La complejidad del diseno de las CPU aumento junto con la facilidad de la construccion de dispositivos electronicos mas pequenos y confiables La primera de esas mejoras vino con el advenimiento del transistor Las CPU transistorizadas durante los anos 1950 y los anos 1960 no tuvieron que ser construidos con elementos de conmutacion abultados no fiables y fragiles como los tubos de vacio y los reles electricos Con esta mejora fueron construidas CPU mas complejas y mas confiables sobre una o varias tarjetas de circuito impreso que contenian componentes discretos individuales Durante este periodo gano popularidad un metodo de fabricar muchos transistores en un espacio compacto El circuito integrado IC permitio que una gran cantidad de transistores fueran fabricados en una simple oblea basada en semiconductor o chip Al principio solamente circuitos digitales muy basicos no especializados como las puertas NOR fueron miniaturizados en IC Las CPU basadas en estos IC de bloques de construccion generalmente son referidos como dispositivos de pequena escala de integracion small scale integration SSI Los circuitos integrados SSI como los usados en el computador guia del Apoyo Apollo Guidance Computer usualmente contenian transistores que se contaban en numeros de multiplos de diez Construir un CPU completo usando IC SSI requeria miles de chips individuales pero todavia consumia mucho menos espacio y energia que disenos anteriores de transistores discretos A medida que la tecnologia microelectronica avanzo en los IC fue colocado un numero creciente de transistores disminuyendo asi la cantidad de IC individuales necesarios para una CPU completa Los circuitos integrados MSI y el LSI de mediana y gran escala de integracion aumentaron el numero de transistores a cientos y luego a miles En 1964 IBM introdujo su arquitectura de computador System 360 que fue usada en una serie de computadoras que podian ejecutar los mismos programas con velocidades y desempenos diferentes Esto fue significativo en un tiempo en que la mayoria de las computadoras electronicos eran incompatibles entre si incluso las hechas por el mismo fabricante Para facilitar esta mejora IBM utilizo el concepto de microprograma a menudo llamado microcodigo ampliamente usado aun en las CPU modernas 4 La arquitectura System 360 era tan popular que domino el mercado del mainframe durante las siguientes decadas y dejo una herencia que todavia aun perdura en las computadoras modernas como el IBM zSeries En el mismo ano de 1964 Digital Equipment Corporation DEC introdujo otra computadora que seria muy influyente dirigida a los mercados cientificos y de investigacion el PDP 8 DEC introduciria mas adelante la muy popular linea del PDP 11 que originalmente fue construido con IC SSI pero eventualmente fue implementado con componentes LSI cuando se convirtieron en practicos En fuerte contraste con sus precursores hechos con tecnologia SSI y MSI la primera implementacion LSI del PDP 11 contenia una CPU integrada unicamente por cuatro circuitos integrados LSI 5 Las computadoras basadas en transistores tenian varias ventajas frente a sus predecesores Aparte de facilitar una creciente fiabilidad y un menor consumo de energia los transistores tambien permitian que CPU operara a velocidades mucho mas altas debido al corto tiempo de conmutacion de un transistor en comparacion a un tubo o rele Gracias tanto a esta creciente fiabilidad como al dramatico incremento de velocidad de los elementos de conmutacion que por este tiempo eran casi exclusivamente transistores se fueron alcanzando frecuencias de reloj de la CPU de decenas de megahercios Ademas mientras que las CPU de transistores discretos y circuitos integrados se usaban comunmente comenzaron a aparecer los nuevos disenos de alto rendimiento como procesadores vectoriales SIMD single instruction multiple data instruccion unica datos multiples Estos primeros disenos experimentales dieron lugar mas adelante a la era de las supercomputadoras especializadas como las hechas por Cray Inc Microprocesadores Editar Articulo principal Microprocesador Oblea de un microprocesador Intel 80486DX2 tamano 12 6 75 mm en su empaquetado CPU Intel Core i5 en una placa base de la computadora portatil Vaio serie E a la derecha debajo del tubo termosifon bifasico En la decada de 1970 los inventos fundamentales de Federico Faggin ICs Silicon Gate MOS con puertas autoalineadas junto con su nueva metodologia de diseno de logica aleatoria cambio el diseno e implementacion de las CPU para siempre Desde la introduccion del primer microprocesador comercialmente disponible el Intel 4004 en 1970 y del primer microprocesador ampliamente usado el Intel 8080 en 1974 esta clase de CPU ha desplazado casi totalmente el resto de los metodos de implementacion de la Unidad Central de procesamiento Los fabricantes de mainframes y minicomputadoras de ese tiempo lanzaron programas de desarrollo de IC propietarios para actualizar sus arquitecturas de computadoras mas viejas y eventualmente producir microprocesadores con conjuntos de instrucciones que eran retrocompatibles con sus hardwares y softwares mas viejos Combinado con el advenimiento y el eventual vasto exito de la ahora ubicua computadora personal el termino CPU es aplicado ahora casi exclusivamente a los microprocesadores Las generaciones previas de CPU fueron implementadas como componentes discretos y numerosos circuitos integrados de pequena escala de integracion en una o mas tarjetas de circuitos Por otro lado los microprocesadores son CPU fabricados con un numero muy pequeno de IC usualmente solo uno El tamano mas pequeno del CPU como resultado de estar implementado en una simple pastilla significa tiempos de conmutacion mas rapidos debido a factores fisicos como el decrecimiento de la capacitancia parasita de las puertas Esto ha permitido que los microprocesadores sincronos tengan tiempos de reloj con un rango de decenas de megahercios a varios gigahercios Adicionalmente como ha aumentado la capacidad de construir transistores excesivamente pequenos en un IC la complejidad y el numero de transistores en un simple CPU tambien se ha incrementado dramaticamente Esta tendencia ampliamente observada es descrita por la ley de Moore que ha demostrado hasta la fecha ser una prediccion bastante exacta del crecimiento de la complejidad de los CPUs y otros IC 6 Mientras que en los pasados sesenta anos han cambiado drasticamente la complejidad el tamano la construccion y la forma general de la CPU es notable que el diseno y el funcionamiento basico no ha cambiado demasiado Casi todos los CPU comunes de hoy se pueden describir con precision como maquinas de programa almacenado de von Neumann A medida que la ya mencionada ley del Moore continua manteniendose verdadera 6 se han presentado preocupaciones sobre los limites de la tecnologia de transistor del circuito integrado La miniaturizacion extrema de puertas electronicas esta causando los efectos de fenomenos que se vuelven mucho mas significativos como la electromigracion y el subumbral de perdida Estas nuevas preocupaciones estan entre los muchos factores que hacen a investigadores estudiar nuevos metodos de computacion como la computacion cuantica asi como ampliar el uso de paralelismo y otros metodos que extienden la utilidad del modelo clasico de von Neumann Operacion EditarLa operacion fundamental de la mayoria de las CPU es ejecutar una secuencia de instrucciones almacenadas llamadas programa El programa es representado por una serie de numeros que se mantienen en una cierta clase de memoria de computadora Hay cuatro pasos que casi todos las CPU de arquitectura de von Neumann usan en su operacion fetch decode execute y writeback leer decodificar ejecutar y escribir Diagrama mostrando como es decodificada una instruccion del MIPS32 MIPS Technologies 2005 Fetch Editar El primer paso leer implica el recuperar una instruccion que es representada por un numero o una secuencia de numeros de la memoria de programa La localizacion en la memoria del programa es determinada por un contador de programa PC que almacena un numero que identifica la direccion de la siguiente instruccion que se debe buscar Despues se lee una instruccion el PC es incrementado por la longitud de la instruccion en terminos de unidades de memoria de modo que contendra la direccion de la siguiente instruccion en la secuencia Frecuentemente la instruccion a ser leida debe ser recuperada de memoria relativamente lenta haciendo detener al CPU mientras espera que la instruccion sea devuelta Esta cuestion se trata en gran medida en los procesadores modernos por los caches y las arquitecturas pipeline ver abajo Decode Editar En el paso de decodificacion la instruccion es dividida en partes que tienen significado para otras unidades de la CPU La manera en que el valor de la instruccion numerica es interpretado esta definida por la arquitectura del conjunto de instrucciones el ISA de la CPU A menudo un grupo de numeros en la instruccion llamados opcode indica que operacion realizar Las partes restantes del numero usualmente proporcionan informacion requerida para esa instruccion como por ejemplo operandos para una operacion de adicion Tales operandos se pueden dar como un valor constante llamado valor inmediato o como un lugar para localizar un valor que segun lo determinado por algun modo de direccion puede ser un registro o una direccion de memoria En disenos mas viejos las unidades del CPU responsables de decodificar la instruccion eran dispositivos de hardware fijos Sin embargo en CPUs e ISAs mas abstractos y complicados es frecuentemente usado un microprograma para ayudar a traducir instrucciones en varias senales de configuracion para el CPU Este microprograma es a veces reescribible de tal manera que puede ser modificado para cambiar la manera en que el CPU decodifica instrucciones incluso despues de que haya sido fabricado Execute Editar Diagrama de bloques de un CPU simple Despues de los pasos de lectura y decodificacion es llevado a cabo el paso de la ejecucion de la instruccion Durante este paso varias unidades del CPU son conectadas de tal manera que ellas pueden realizar la operacion deseada Si por ejemplo una operacion de adicion fue solicitada una unidad aritmetico logica ALU sera conectada a un conjunto de entradas y un conjunto de salidas Las entradas proporcionan los numeros a ser sumados y las salidas contendran la suma final La ALU contiene la circuiteria para realizar operaciones simples de aritmetica y logica en las entradas como adicion y operaciones de bits bitwise Si la operacion de adicion produce un resultado demasiado grande para poder ser manejado por el CPU tambien puede ser ajustada una bandera flag de desbordamiento aritmetico localizada en un registro de banderas ver abajo la seccion sobre rango de numeros enteros Writeback Editar El paso final la escritura simplemente escribe los resultados del paso de ejecucion a una cierta forma de memoria Muy a menudo los resultados son escritos a algun registro interno del CPU para acceso rapido por subsecuentes instrucciones En otros casos los resultados pueden ser escritos a una memoria principal mas lenta pero mas barata y mas grande Algunos tipos de instrucciones manipulan el contador de programa en lugar de directamente producir datos de resultado Estas son llamadas generalmente saltos jumps y facilitan comportamientos como bucles la ejecucion condicional de programas con el uso de saltos condicionales y funciones en programas Muchas instrucciones tambien cambiaran el estado de digitos en un registro de banderas Estas banderas pueden ser usadas para influenciar como se comporta un programa puesto que a menudo indican el resultado de varias operaciones Por ejemplo un tipo de instruccion de comparacion considera dos valores y fija un numero en el registro de banderas de acuerdo a cual es el mayor Entonces esta bandera puede ser usada por una posterior instruccion de salto para determinar el flujo de programa Despues de la ejecucion de la instruccion y la escritura de los datos resultantes el proceso entero se repite con el siguiente ciclo de instruccion normalmente leyendo la siguiente instruccion en secuencia debido al valor incrementado en el contador de programa Si la instruccion completada era un salto el contador de programa sera modificado para contener la direccion de la instruccion a la cual se salto y la ejecucion del programa continua normalmente En CPUs mas complejos que el descrito aqui multiples instrucciones pueden ser leidas decodificadas y ejecutadas simultaneamente Esta seccion describe lo que es referido generalmente como el entubado RISC clasico Classic RISC pipeline que de hecho es bastante comun entre los CPU simples usados en muchos dispositivos electronicos a menudo llamados microcontroladores Diseno e implementacion EditarVeanse tambien Arquitectura de computadorasy Circuito digital Rango de enteros Editar La manera en que un CPU representa los numeros es una opcion de diseno que afecta las mas basicas formas en que el dispositivo funciona Algunas de las primeras calculadoras digitales usaron para representar numeros internamente un modelo electrico del sistema de numeracion decimal comun base diez Algunas otras computadoras han usado sistemas de numeracion mas exoticos como el ternario base tres Casi todos los CPU modernos representan los numeros en forma binaria en donde cada digito es representado por una cierta cantidad fisica de dos valores como un voltaje alto o bajo Microprocesador MOS 6502 en un dual in line package encapsulado en doble linea un diseno extremadamente popular de 8 bits Con la representacion numerica estan relacionados el tamano y la precision de los numeros que un CPU puede representar En el caso de un CPU binario un bit se refiere a una posicion significativa en los numeros con que trabaja un CPU El numero de bits o de posiciones numericas o digitos que un CPU usa para representar los numeros a menudo se llama tamano de la palabra ancho de bits ancho de ruta de datos o precision del numero entero cuando se ocupa estrictamente de numeros enteros en oposicion a numeros de coma flotante Este numero difiere entre las arquitecturas y a menudo dentro de diferentes unidades del mismo CPU Por ejemplo un CPU de 8 bits maneja un rango de numeros que pueden ser representados por ocho digitos binarios cada digito teniendo dos valores posibles y en combinacion los 8 bits teniendo 28 o 256 numeros discretos En efecto el tamano del numero entero fija un limite de hardware en el rango de numeros enteros que el software corre y que el CPU puede usar directamente El rango del numero entero tambien puede afectar el numero de posiciones en memoria que el CPU puede direccionar localizar Por ejemplo si un CPU binario utiliza 32 bits para representar una direccion de memoria y cada direccion de memoria representa a un octeto 8 bits la cantidad maxima de memoria que el CPU puede direccionar es 232 octetos o 4 GB Esta es una vista muy simple del espacio de direccion del CPU y muchos disenos modernos usan metodos de direccion mucho mas complejos como paginacion para localizar mas memoria que su rango entero permitiria con un espacio de direccion plano Niveles mas altos del rango de numeros enteros requieren mas estructuras para manejar los digitos adicionales y por lo tanto mas complejidad tamano uso de energia y generalmente costo Por ello no es del todo infrecuente ver microcontroladores de 4 y 8 bits usados en aplicaciones modernas aun cuando estan disponibles CPU con un rango mucho mas alto de 16 32 64 e incluso 128 bits Los microcontroladores mas simples son generalmente mas baratos usan menos energia y por lo tanto disipan menos calor Todo esto pueden ser consideraciones de diseno importantes para los dispositivos electronicos Sin embargo en aplicaciones del extremo alto los beneficios producidos por el rango adicional mas a menudo el espacio de direccion adicional son mas significativos y con frecuencia afectan las opciones del diseno Para ganar algunas de las ventajas proporcionadas por las longitudes de bits tanto mas bajas como mas altas muchas CPUs estan disenadas con anchos de bit diferentes para diferentes unidades del dispositivo Por ejemplo el IBM System 370 uso un CPU que fue sobre todo de 32 bits pero uso precision de 128 bits dentro de sus unidades de coma flotante para facilitar mayor exactitud y rango de numeros de coma flotante 4 Muchos disenos posteriores de CPU usan una mezcla de ancho de bits similar especialmente cuando el procesador esta disenado para usos de proposito general donde se requiere un razonable equilibrio entre la capacidad de numeros enteros y de coma flotante Frecuencia de reloj Editar Articulo principal Frecuencia de reloj La mayoria de los CPU y de hecho la mayoria de los dispositivos de logica secuencial son de naturaleza sincrona Es decir estan disenados y operan en funcion de una senal de sincronizacion Esta senal conocida como senal de reloj usualmente toma la forma de una onda cuadrada periodica Calculando el tiempo maximo en que las senales electricas pueden moverse en las varias bifurcaciones de los muchos circuitos de un CPU los disenadores pueden seleccionar un periodo apropiado para la senal del reloj Este periodo debe ser mas largo que la cantidad de tiempo que toma a una senal moverse o propagarse en el peor de los casos Al fijar el periodo del reloj a un valor bastante mayor sobre el retardo de la propagacion del peor caso es posible disenar todo el CPU y la manera que mueve los datos alrededor de los bordes de la subida y bajada de la senal del reloj Esto tiene la ventaja de simplificar el CPU significativamente tanto en una perspectiva de diseno como en una perspectiva de cantidad de componentes Sin embargo esto tambien tiene la desventaja que todo el CPU debe esperar por sus elementos mas lentos aun cuando algunas unidades de la misma son mucho mas rapidas Esta limitacion ha sido compensada en gran parte por varios metodos de aumentar el paralelismo del CPU ver abajo Sin embargo las mejoras arquitectonicas por si solas no solucionan todas las desventajas de CPUs globalmente sincronas Por ejemplo una senal de reloj esta sujeta a los retardos de cualquier otra senal electrica Velocidades de reloj mas altas en CPUs cada vez mas complejas hacen mas dificil de mantener la senal del reloj en fase sincronizada a traves de toda la unidad Esto ha conducido que muchos CPU modernos requieran que se les proporcione multiples senales de reloj identicas para evitar retardar una sola senal lo suficiente como para hacer al CPU funcionar incorrectamente Otro importante problema cuando la velocidad del reloj aumenta dramaticamente es la cantidad de calor que es disipado por el CPU La senal del reloj cambia constantemente provocando la conmutacion de muchos componentes cambio de estado sin importar si estan siendo usados en ese momento En general un componente que esta cambiando de estado usa mas energia que un elemento en un estado estatico Por lo tanto a medida que la velocidad del reloj aumenta asi lo hace tambien la disipacion de calor causando que el CPU requiera soluciones de enfriamiento mas efectivas Un metodo de tratar la conmutacion de componentes innecesarios se llama el clock gating que implica apagar la senal del reloj a los componentes innecesarios efectivamente desactivandolos Sin embargo esto es frecuentemente considerado como dificil de implementar y por lo tanto no ve uso comun fuera de disenos de muy baja potencia Un notable diseno de CPU tardio que utiliza una amplia compuerta del reloj para reducir los requisitos de potencia de la consola de videojuegos es la de la Xbox 360 basada en la PowerPC de IBM 7 Otro metodo de tratar algunos de los problemas de una senal global de reloj es la completa remocion de la misma Mientras que quitar la senal global del reloj hace de muchas maneras considerablemente mas complejo el proceso del diseno en comparacion con disenos sincronos similares los disenos asincronicos o sin reloj tienen marcadas ventajas en el consumo de energia y la disipacion de calor Aunque se trate de algo infrecuente las CPUs completas se han construido sin utilizar una senal global de reloj Dos notables ejemplos de esto son el AMULET que implementa la arquitectura del ARM y el MiniMIPS compatible con el MIPS R3000 En lugar de remover totalmente la senal del reloj algunos disenos de CPU permiten que ciertas unidades del dispositivo sean asincronicas como por ejemplo usando ALU en conjuncion con pipelining superescalar para alcanzar algunas ganancias en el desempeno aritmetico Mientras que no este completamente claro si los disenos totalmente asincronicos pueden desempenarse a un nivel comparable o mejor que sus contrapartes sincronas es evidente que por lo menos sobresalen en las operaciones matematicas mas simples Esto combinado con sus excelentes caracteristicas de consumo de energia y disipacion de calor los hace muy adecuados para sistemas embebidos 8 Paralelismo Editar Articulo principal Computacion paralela Modelo de un CPU subescalar Note que toma quince ciclos para terminar tres instrucciones La descripcion de la operacion basica de un CPU ofrecida en la seccion anterior describe la forma mas simple que puede tomar un CPU Este tipo de CPU usualmente referido como subescalar opera sobre y ejecuta una sola instruccion con una o dos piezas de datos a la vez Este proceso da lugar a una ineficacia inherente en CPU subescalares Puesto que solamente una instruccion es ejecutada a la vez todo el CPU debe esperar que esa instruccion se complete antes de proceder a la siguiente instruccion Como resultado la CPU subescalar queda paralizado en instrucciones que toman mas de un ciclo de reloj para completar su ejecucion Incluso la adicion de una segunda unidad de ejecucion ver abajo no mejora mucho el desempeno En lugar de un camino quedando congelado ahora dos caminos se paralizan y aumenta el numero de transistores no usados Este diseno en donde los recursos de ejecucion de la CPU pueden operar con solamente una instruccion a la vez solo puede posiblemente alcanzar el desempeno escalar una instruccion por ciclo de reloj Sin embargo el desempeno casi siempre es subescalar menos de una instruccion por ciclo Las tentativas de alcanzar un desempeno escalar y mejor han resultado en una variedad de metodologias de diseno que hacen comportarse al CPU menos linealmente y mas en paralelo Cuando se refiere al paralelismo en los CPU generalmente son usados dos terminos para clasificar estas tecnicas de diseno El paralelismo a nivel de instruccion en ingles instruction level parallelism ILP busca aumentar la tasa en la cual las instrucciones son ejecutadas dentro de un CPU es decir aumentar la utilizacion de los recursos de ejecucion en la pastilla El paralelismo a nivel de hilo de ejecucion en ingles thread level parallelism TLP que se propone incrementar el numero de hilos efectivamente programas individuales que un CPU pueda ejecutar simultaneamente Cada metodologia se diferencia tanto en las maneras en las que estan implementadas como en la efectividad relativa que producen en el aumento del desempeno de la CPU para una aplicacion ILP Segmentacion y arquitectura superescalar Editar Articulos principales Segmentacion electronica y Superescalar Tuberia basica de cinco etapas En el mejor de los casos esta tuberia puede sostener un ratio de completado de una instruccion por ciclo Uno de los metodos mas simples para lograr incrementar al paralelismo es comenzar los primeros pasos de leer y decodificar la instruccion antes de que la instruccion anterior haya terminado de ejecutarse Esta es la forma mas simple de una tecnica conocida como segmentacion instruction pipelining en ingles y es utilizada en casi todas los CPU de proposito general modernos Al dividir la ruta de ejecucion en etapas discretas la tuberia permite que mas de una instruccion sea ejecutada en cualquier tiempo Esta separacion puede ser comparada a una linea de ensamblaje en la cual una instruccion es hecha mas completa en cada etapa hasta que sale de la tuberia de ejecucion y es retirada del mismo Sin embargo la tuberia introduce la posibilidad de una situacion donde es necesario terminar el resultado de la operacion anterior para completar la operacion siguiente una condicion llamada a menudo como conflicto de dependencia de datos Para hacer frente a esto debe ser tomado un cuidado adicional para comprobar estas clases de condiciones y si esto ocurre se debe retrasar una porcion de la tuberia de instruccion Naturalmente lograr esto requiere circuiteria adicional los procesadores entubados son mas complejos que los subescalares pero no mucho Un procesador entubado puede llegar a ser casi completamente escalar solamente inhibido por las abruptas paradas de la tuberia una instruccion durando mas de un ciclo de reloj en una etapa Segmentacion superescalar simple Al leer y despachar dos instrucciones a la vez un maximo de dos instrucciones por ciclo pueden ser completadas Una mejora adicional sobre la idea del entubado de instruccion instruction pipelining condujo al desarrollo de un metodo que disminuye incluso mas el tiempo ocioso de los componentes del CPU Disenos que se dice que son superescalares incluyen una larga tuberia de instruccion y multiples unidades de ejecucion identicas 9 En una tuberia superescalar multiples instrucciones son leidas y pasadas a un despachador que decide si las instrucciones se pueden o no ejecutar en paralelo simultaneamente De ser asi son despachadas a las unidades de ejecucion disponibles dando por resultado la capacidad para que varias instrucciones sean ejecutadas simultaneamente En general cuanto mas instrucciones un CPU superescalar es capaz de despachar simultaneamente a las unidades de ejecucion en espera mas instrucciones seran completadas en un ciclo dado La mayor parte de la dificultad en el diseno de una arquitectura superescalar de CPU descansa en crear un despachador eficaz El despachador necesita poder determinar rapida y correctamente si las instrucciones pueden ejecutarse en paralelo tan bien como despacharlas de una manera que mantenga ocupadas tantas unidades de ejecucion como sea posible Esto requiere que la tuberia de instruccion sea llenada tan a menudo como sea posible y se incrementa la necesidad en las arquitecturas superescalares de cantidades significativas de cache de CPU Esto tambien crea tecnicas para evitar peligros como la prediccion de bifurcacion ejecucion especulativa y la ejecucion fuera de orden cruciales para mantener altos niveles de desempeno Tratando de predecir que rama o trayectoria tomara una instruccion condicional la CPU puede minimizar el numero de veces que todo el canal debe esperar hasta que se complete una instruccion condicional Frecuentemente la ejecucion especulativa proporciona aumentos modestos del desempeno al ejecutar porciones de codigo que no puede ser necesario despues de completarse una operacion condicional Fuera de la orden de ejecucion cambia de algun modo el orden en que se ejecutan las instrucciones para reducir retardos debido a las dependencias de datos Tambien en el caso de instrucciones individuales de datos multiples los procesadores modernos en caso de que se hayan procesado una gran cantidad de datos del mismo tipo pueden desactivar partes de la tuberia de manera que cuando se ejecuta una sola sentencia muchas veces la CPU salta la captacion y decodifica fases y por lo tanto aumenta considerablemente el rendimiento en ciertas ocasiones sobre todo en los motores de programas altamente monotonos como el software de creacion de video y procesamiento de fotografias En el caso donde una porcion de la CPU es superescalar y una parte no lo es la parte que no es superescalar sufre en el desempeno debido a las paradas de horario El Intel Pentium original P5 tenia dos ALUs superescalares que podian aceptar cada una una instruccion por ciclo de reloj pero su FPU no podia aceptar una instruccion por ciclo de reloj Asi el P5 era superescalar en la parte de numeros enteros pero no era superescalar de numeros de coma o punto decimal flotante El sucesor a la arquitectura del Pentium de Intel el P6 agrego capacidades superescalares a sus funciones de coma flotante y por lo tanto produjo un significativo aumento en el desempeno de este tipo de instrucciones Tanto el diseno superescalar como el entubado simple aumentan el ILP de una CPU al permitir a un solo procesador completar la ejecucion de instrucciones en ratios que sobrepasan una instruccion por ciclo IPC La mayoria de los modernos disenos de CPU son por lo menos algo superescalares y en la ultima decada casi todos los disenos de CPU de proposito general son superescalares En los ultimos anos algo del enfasis en el diseno de computadores de alto ILP se ha movido del hardware del CPU hacia su interfaz de software o ISA La estrategia very long instruction word o VLIW causa a algun ILP a ser implicito directamente por el software reduciendo la cantidad de trabajo que el CPU debe realizar para darle un empuje significativo al ILP y por lo tanto reducir la complejidad del diseno Paralelismo a nivel de hilos Editar Otra estrategia para lograr el rendimiento es ejecutar varios programas o hilos en paralelo Esta area de investigacion se conoce como computacion paralela En la taxonomia de Flynn esta estrategia se conoce como multiples instrucciones de varios datos o MIMD Una tecnologia utilizada para este proposito fue el multiprocesamiento MP El puntapie inicial de esta tecnologia se conoce como multiprocesamiento simetrico SMP donde un pequeno numero de CPU comparten una vision coherente de su sistema de memoria En este esquema cada CPU tiene un hardware adicional para mantener una vision constantemente actualizada de la memoria Para evitar visitas rancias de la memoria las CPU pueden cooperar en el mismo programa y los programas pueden migrar desde una CPU a otra Para aumentar el numero de CPUs que cooperan mas alla de unas pocas se introdujeron en 1990 los esquemas tales como el non uniform memory Access acceso no uniforme a memoria NUMA y los protocolos de coherencia basados en directorios Los sistemas SMP se limitan a un pequeno numero de CPU mientras que los sistemas NUMA se han construido con miles de procesadores Inicialmente el multiprocesamiento se construyo usando multiples CPUs discretas y tableros para implementar la interconexion entre los procesadores Cuando los procesadores y su interconexion hayan sido implementadas en un unico chip de silicio la tecnologia se conoce como un procesador multinucleo Posteriormente se reconocio que existia un paralelismo muy estrecho con un unico programa Un unico programa podria tener varios hilos o funciones que podrian ser ejecutadas por separado o en paralelo Algunos de los primeros ejemplos de esta tecnologia implementaba procesamiento de entrada salida tales como el acceso directo a memoria como un hilo separado del hilo computado En la decada de 1970 se introdujo un enfoque mas general a esta tecnologia cuando se disenaron sistemas para ejecutar multiples hilos de computacion en paralelo Esta tecnologia se conoce como multihilo MT Este enfoque se considera mas rentable que la del multiprocesamiento ya que solo se replica un pequeno numero de componentes dentro de una CPU para soportar MT en oposicion a la totalidad de la CPU en el caso de MP En MT las unidades de ejecucion y el sistema de memoria incluyendo los caches son compartidos entre varios hilos La desventaja de MT es que el soporte de hardware para multihilo es mas visible para el software que la de MP y por lo tanto el software supervisor como el de los sistemas operativos tienen que someterse a los cambios mas grandes para apoyar MT Un tipo de MT que se implemento es conocido como bloque multihilo donde se ejecuta un hilo hasta que se paralice esperando que regresen los datos desde la memoria externa En este esquema la CPU tendria luego que cambiar rapidamente a otro hilo que esta listo para funcionar el interruptor muchas veces realiza un ciclo de reloj de la CPU como la tecnologia UltraSPARC Otro tipo de MT se denomina multihilo simultaneo en donde las instrucciones de multiples hilos se ejecutan en paralelo dentro de un ciclo de reloj de la CPU Paralelismo de datos Editar Articulos principales Procesador vectorialy SIMD Un menos comun pero cada vez mas importante paradigma de CPU y de hecho de computacion en general trata con vectores Los procesadores de los que se ha hablado anteriormente son todos referidos como cierto tipo de dispositivo escalar Como implica su nombre los procesadores vectoriales se ocupan de multiples piezas de datos en el contexto de una instruccion esto contrasta con los procesadores escalares que tratan una pieza de dato por cada instruccion Estos dos esquemas de ocuparse de los datos son generalmente referidos respectivamente como SISD single instruction single data y SIMD single instruction multiple data La gran utilidad en crear CPU que se ocupen de vectores de datos radica en la optimizacion de tareas que tienden a requerir la misma operacion por ejemplo una suma o un producto escalar a ser realizado en un gran conjunto de datos Algunos ejemplos clasicos de este tipo de tareas son las aplicaciones multimedia imagenes video y sonido asi como muchos tipos de tareas cientificas y de ingenieria Mientras que una CPU escalar debe completar todo el proceso de leer decodificar y ejecutar cada instruccion y valor en un conjunto de datos una CPU vectorial puede realizar una simple operacion en un comparativamente grande conjunto de datos con una sola instruccion Por supuesto esto es solamente posible cuando la aplicacion tiende a requerir muchos pasos que apliquen una operacion a un conjunto grande de datos La mayoria de las primeras CPU vectoriales como el Cray 1 se asociaron casi exclusivamente a aplicaciones de investigacion cientifica y criptografia Sin embargo a medida que la multimedia se desplazo en gran parte a medios digitales ha llegado a ser significativa la necesidad de una cierta forma de SIMD en CPUs de proposito general Poco despues de que comenzara a ser comun incluir unidades de coma flotante en procesadores de uso general tambien comenzaron a aparecer especificaciones e implementaciones de unidades de ejecucion SIMD para las CPU de uso general Algunas de estas primeras especificaciones SIMD como el MMX de Intel fueron solamente para numeros enteros Esto demostro ser un impedimento significativo para algunos desarrolladores de software ya que muchas de las aplicaciones que se beneficiaban del SIMD trataban sobre todo con numeros de coma flotante Progresivamente estos primeros disenos fueron refinados y rehechos en alguna de las comunes modernas especificaciones SIMD que generalmente estan asociadas a un ISA Algunos ejemplos modernos notables son el SSE de Intel y el AltiVec relacionado con el PowerPC tambien conocido como VMX Desempeno EditarVease tambien Benchmark informatica El desempeno performance o la velocidad de un procesador depende de entre muchos otros factores la velocidad del reloj generalmente dada en multiplos de hertz y las instrucciones por ciclo de reloj IPC que juntos son los factores para las instrucciones por segundo IPS que el CPU puede rendir 10 Muchos reportes de valores IPS han representado tasas de ejecucion pico en secuencias de instrucciones artificiales con pocas ramas mientras que las cargas de trabajo realistas consisten en una combinacion de instrucciones y de aplicaciones algunas de las cuales requieren mas tiempo para ejecutar que otras El rendimiento de la jerarquia de memoria tambien afecta en gran medida al rendimiento del procesador un tema muy poco tenido en cuenta en los calculos de MIPS Debido a estos problemas para este fin se han desarrollado varios examenes estandarizados tales como SPECint muchas veces llamados puntos de referencia para tratar de medir el rendimiento real efectivo en aplicaciones de uso cotidiano El desempeno de procesamiento de las computadoras se incrementa utilizando procesadores multinucleo que en esencia es conectar dos o mas procesadores individuales llamados nucleos en este sentido en un solo circuito integrado 11 Idealmente un procesador de doble nucleo seria casi dos veces tan potente como un procesador de nucleo unico En la practica la ganancia de desempeno es mucho menor solo alrededor del 50 12 debido a la implementacion de algoritmos imperfectos de software 13 El aumento del numero de nucleos en un procesador es decir dual core quad core etc aumenta la carga de trabajo que se puede manejar Esto significa que el procesador ahora puede manejar numerosos eventos asincronos interrupciones etc que pueden tomar un peaje en la CPU Central Processing Unit cuando se abruma Estos nucleos pueden considerarse como diferentes plantas en una planta de procesamiento con el manejo de cada piso una tarea diferente En ocasiones estos nucleos se manejan las mismas tareas que los nucleos adyacentes a ellos si un solo nucleo no es suficiente para manejar la informacion Debido a las capacidades especificas de las CPU modernas como HyperThreading y Uncore que implican el intercambio de recursos reales de la CPU mientras que el objetivo de una mayor utilizacion supervisar los niveles de rendimiento y la utilizacion del hardware se fue convirtiendo gradualmente en una tarea mas compleja Como respuesta algunas CPUs implementan logica de hardware adicional que controla la utilizacion real de las diversas partes de una CPU y proporciona varios contadores accesibles a software un ejemplo es la tecnologia Performance Counter Monitor Monitor de contador de rendimiento de Intel 14 Vease tambien EditarAccelerated processing unit Modos de direccionamiento Complex instruction set computing CISC Bus informatica Ingenieria en computacion Voltaje del nucleo de la CPU Zocalo de CPU Refrigeracion liquida informatica Procesador digital de senal HyperThreading Microprocesador Procesador multinucleo Anillo de seguridad Reduced instruction set computing RISC Referencias Editar First Draft of a Report on the EDVAC en ingles Moore School of Electrical Engineering Universidad de Pennsylvania 1945 Archivado desde el original el 23 de abril de 2004 Enticknap Nicholas Verano de 1998 Computing s Golden Jubilee Jubileo de Oro de la computacion Resurrection en ingles The Computer Conservation Society 20 ISSN 0958 7403 archivado desde el original el 9 de enero de 2012 consultado el 19 de abril de 2008 Weik Martin H 1961 A Third Survey of Domestic Electronic Digital Computing Systems en ingles Ballistic Research Laboratories a b Amdahl G M Blaauw G A amp Brooks F P Jr 1964 Architecture of the IBM System 360 en ingles IBM Research Archivado desde el original el 5 de febrero de 2007 Digital Equipment Corporation noviembre de 1975 LSI 11 Module Descriptions LSI 11 PDP 11 03 user s manual en ingles 2da edicion Maynard Massachusetts Digital Equipment Corporation pp 4 3 Archivado desde el original el 24 de mayo de 2006 a b Excerpts from A Conversation with Gordon Moore Moore s Law PDF en ingles Intel 2005 Archivado desde el original el 29 de octubre de 2012 Consultado el 25 de julio de 2012 Brown Jeffery 2005 Application customized CPU design en ingles IBM developerWorks Consultado el 17 de diciembre de 2005 Garside J D Furber S B amp Chung S H 1999 AMULET3 Revealed en ingles University of Manchester Computer Science Department Archivado desde el original el 10 de diciembre de 2005 Huynh Jack 2003 The AMD Athlon XP Processor with 512KB L2 Cache en ingles University of Illinois Urbana Champaign pp 6 11 Archivado desde el original el 28 de noviembre de 2007 Consultado el 6 de octubre de 2007 CPU Frequency CPU World Glossary en ingles CPU World 25 de marzo de 2008 Consultado el 1 de enero de 2010 What is a multi core processor Data Center Definitions en ingles SearchDataCenter com 27 de marzo de 2007 Consultado el 1 de enero de 2010 Guia para configurar y montar un PC Gaming por piezas Consultado el 9 de mayo de 2018 Quad Core Vs Dual Core http www buzzle com Archivado desde el original el 25 de julio de 2015 Consultado el 26 de noviembre de 2014 Thomas Willhalm Roman Dementiev Patrick Fay 18 de diciembre de 2014 Intel Performance Counter Monitor A better way to measure CPU utilization en ingles Consultado el 17 de febrero de 2015 Bibliografia EditarAmdahl G M Blaauw G A amp Brooks F P Jr 1964 Architecture of the IBM System 360 IBM Research Brown Jeffery 2005 Application customized CPU design IBM developerWorks Consultado el 17 de diciembre de 2005 Digital Equipment Corporation noviembre de 1975 LSI 11 Module Descriptions LSI 11 PDP 11 03 user s manual 2da edicion edicion Maynard Massachusetts Digital Equipment Corporation pp 4 3 La referencia utiliza el parametro obsoleto mes ayuda Garside J D Furber S B amp Chung S H 1999 AMULET3 Revealed University of Manchester Computer Science Department Hennessy John A Goldberg David 1996 Computer Architecture A Quantitative Approach Morgan Kaufmann Publishers ISBN 1 55860 329 8 MIPS Technologies Inc 2005 MIPS32 Architecture For Programmers Volume II The MIPS32 Instruction Set MIPS Technologies Inc Archivado desde el original el 18 de marzo de 2006 Smotherman Mark 2005 History of Multithreading Consultado el 19 de diciembre de 2005 von Neumann John 1945 First Draft of a Report on the EDVAC Moore School of Electrical Engineering University of Pennsylvania Archivado desde el original el 23 de abril de 2004 Weik Martin H 1961 A Third Survey of Domestic Electronic Digital Computing Systems Ballistic Research Laboratories Enlaces externos Editar Wikimedia Commons alberga una categoria multimedia sobre Unidad central de procesamiento Disenos de microprocesador Editar Wikiversidad alberga proyectos de aprendizaje sobre Unidad central de procesamiento en ingles Como trabajan los microprocesadores en HowStuffWorks en ingles 25 Microchips que sacudieron al mundo un articulo del Instituto de Ingenieria Electrica y Electronica en ingles Advanced Micro Devices Advanced Micro Devices un disenador de principalmente CPU de la computadora personal compatible con x86 en ingles ARM Ltd ARM Ltd uno de los pocos disenadores de CPU que se benefician unicamente por licenciar sus disenos en lugar de fabricarlos Los microprocesadores de arquitectura ARM se encuentran entre los mas populares en el mundo para aplicaciones embebidas en ingles Freescale Semiconductor antes de Motorola Freescale Semiconductor disenador de varios procesadores embebidos basados en PowerPC y SoC en ingles IBM Microelectronics Division de Microelectronica de IBM que es responsable de mucho en disenos basados en POWER y PowerPC incluyendo muchas de las CPU utilizada en las ultimas consolas de videojuegos de 2012 en ingles Intel Corp un fabricante de varias lineas de CPU notables incluyendo IA 32 IA 64 y XScale Tambien es un fabricante de chips de diferentes perifericos para su uso con su CPU en ingles MIPS Technologies MIPS Technologies desarrolladores de la arquitectura MIPS pionero en disenos RISC en ingles Sun Microsystems Sun Microsystems desarrolladores de la arquitectura SPARC un diseno RISC en ingles Texas Instruments enlace roto disponible en Internet Archive vease el historial la primera version y la ultima Texas Instruments division semiconductores Disena y fabrica varios tipos de microcontroladores de bajo consumo entre sus muchos otros productos semiconductores en ingles Transmeta Transmeta Corporation Creadores de x86 de baja potencia compatibles como Crusoe y Efficeon en ingles Lectura adicional Editar Diseno del procesador Una introduccion Introduccion detallada al diseno de microprocesadores en ingles Como trabajan los microprocesadores en ingles Pipelining An Overview Buena introduccion y vision general acerca de las tecnicas de tuberias de CPU por el personal de Ars Technica en ingles SIMD Architectures Introduccion y explicacion de SIMD sobre todo como se relaciona con las computadoras personales Tambien por Ars Technica en ingles Listado de procesadores Nombres de CPUs y principales caracteristicas en ingles Esta obra contiene una traduccion total derivada de Central processing unit de Wikipedia en ingles concretamente de esta version publicada por sus editores bajo la Licencia de documentacion libre de GNU y la Licencia Creative Commons Atribucion CompartirIgual 3 0 Unported Datos Q5300 Multimedia Microprocessors 1 cyber security software software developer en ingles Obtenido de https es wikipedia org w index php title Unidad central de procesamiento amp oldid 143205902, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos