stringtranslate.com

Unidad Central de procesamiento

Una unidad central de procesamiento (CPU) fabricada por Intel : un Intel Core i9-14900K
Dentro de una unidad central de procesamiento: el circuito integrado del Xeon 3060 de Intel , fabricado por primera vez en 2006

Una unidad central de procesamiento ( CPU ), también llamada procesador central o procesador principal , es el procesador más importante de una computadora determinada . Su circuito electrónico ejecuta instrucciones de un programa de computadora , como operaciones aritméticas , lógicas, de control y de entrada/salida (E/S). Esta función contrasta con la de los componentes externos, como la memoria principal y los circuitos de E/S, [1] y los coprocesadores especializados , como las unidades de procesamiento de gráficos (GPU).

La forma, el diseño y la implementación de las CPU han cambiado con el tiempo, pero su funcionamiento fundamental permanece casi sin cambios. Los componentes principales de una CPU incluyen la unidad aritmético-lógica (ALU) que realiza operaciones aritméticas y lógicas , registros de procesador que suministran operandos a la ALU y almacenan los resultados de las operaciones de la ALU, y una unidad de control que organiza la búsqueda (de la memoria), decodificación y ejecución (de instrucciones) dirigiendo las operaciones coordinadas de la ALU, registros y otros componentes. Las CPU modernas dedican gran parte del área de semiconductores a cachés y paralelismo a nivel de instrucciones para aumentar el rendimiento y a modos de CPU para admitir sistemas operativos y virtualización .

La mayoría de las CPU modernas se implementan en microprocesadores de circuito integrado (IC) , con una o más CPU en un único chip IC. Los chips de microprocesador con múltiples CPU son procesadores multinúcleo . Las CPU físicas individuales, núcleos de procesador , también pueden tener subprocesos múltiples para admitir subprocesos múltiples a nivel de CPU. [2]

Un IC que contiene una CPU también puede contener memoria , interfaces periféricas y otros componentes de una computadora; Estos dispositivos integrados se denominan microcontroladores o sistemas en un chip (SoC).

Historia

EDVAC , una de las primeras computadoras con programas almacenados

Las primeras computadoras, como la ENIAC , tuvieron que volver a cablearse físicamente para realizar diferentes tareas, lo que provocó que estas máquinas se denominaran "computadoras de programa fijo". [3] El término "unidad central de procesamiento" se utiliza desde 1955. [4] [5] Dado que el término "CPU" se define generalmente como un dispositivo para la ejecución de software (programa de computadora), los primeros dispositivos que que podrían llamarse con razón CPU surgieron con la llegada de la computadora con programas almacenados .

La idea de una computadora con programa almacenado ya había estado presente en el diseño de la ENIAC de J. Presper Eckert y John William Mauchly , pero inicialmente se omitió para que ENIAC pudiera terminarse antes. [6] El 30 de junio de 1945, antes de que se elaborara la ENIAC, el matemático John von Neumann distribuyó un artículo titulado Primer borrador de un informe sobre el EDVAC . Era el esbozo de una computadora con programa almacenado que finalmente se completaría en agosto de 1949. [7] EDVAC fue diseñado para realizar una cierta cantidad de instrucciones (u operaciones) de varios tipos. Significativamente, los programas escritos para EDVAC debían almacenarse en la memoria de la computadora de alta velocidad en lugar de especificarse mediante el cableado físico de la computadora. [8] Esto superó una grave limitación de ENIAC, que era el considerable tiempo y esfuerzo necesarios para reconfigurar la computadora para realizar una nueva tarea. [9] Con el diseño de von Neumann, el programa que ejecutaba EDVAC podía cambiarse simplemente cambiando el contenido de la memoria. EDVAC no fue la primera computadora con programas almacenados; el Manchester Baby , que era una computadora experimental de programa almacenado a pequeña escala, ejecutó su primer programa el 21 de junio de 1948 [10] y el Manchester Mark 1 ejecutó su primer programa durante la noche del 16 al 17 de junio de 1949. [11]

Las primeras CPU eran diseños personalizados utilizados como parte de una computadora más grande y, a veces, distintiva. [12] Sin embargo, este método de diseñar CPU personalizadas para una aplicación particular ha dado paso en gran medida al desarrollo de procesadores multipropósito producidos en grandes cantidades. Esta estandarización comenzó en la era de las minicomputadoras y mainframes de transistores discretos y se ha acelerado rápidamente con la popularización del circuito integrado (CI). El circuito integrado ha permitido diseñar y fabricar CPU cada vez más complejas con tolerancias del orden de nanómetros . [13] Tanto la miniaturización como la estandarización de las CPU han aumentado la presencia de dispositivos digitales en la vida moderna mucho más allá de la aplicación limitada de las máquinas informáticas dedicadas. Los microprocesadores modernos aparecen en dispositivos electrónicos que van desde automóviles [14] hasta teléfonos móviles [15] y, a veces, incluso en juguetes. [16] [17]

Si bien a von Neumann se le atribuye con mayor frecuencia el diseño de la computadora con programa almacenado debido a su diseño de EDVAC, y el diseño se conoció como la arquitectura von Neumann , otros antes que él, como Konrad Zuse , habían sugerido e implementado ideas similares. [18] La llamada arquitectura Harvard del Harvard Mark I , que se completó antes de EDVAC, [19] [20] también utilizó un diseño de programa almacenado utilizando cinta de papel perforada en lugar de memoria electrónica. [21] La diferencia clave entre las arquitecturas de von Neumann y Harvard es que la última separa el almacenamiento y el tratamiento de las instrucciones y los datos de la CPU, mientras que la primera utiliza el mismo espacio de memoria para ambas. [22] La mayoría de las CPU modernas tienen principalmente un diseño de von Neumann, pero también se ven CPU con la arquitectura Harvard, especialmente en aplicaciones integradas; por ejemplo, los microcontroladores Atmel AVR son procesadores de arquitectura Harvard. [23]

Como elementos de conmutación se utilizaban habitualmente relés y tubos de vacío (tubos termoiónicos); [24] [25] una computadora útil requiere miles o decenas de miles de dispositivos de conmutación. La velocidad general de un sistema depende de la velocidad de los interruptores. Las computadoras de tubo de vacío como EDVAC tendían a tener un promedio de ocho horas entre fallas, mientras que las computadoras de retransmisión (como la más lenta pero anterior Harvard Mark I) fallaban muy raramente. [5] Al final, las CPU basadas en tubos se volvieron dominantes porque las importantes ventajas de velocidad que ofrecían generalmente superaban los problemas de confiabilidad. La mayoría de estas primeras CPU síncronas funcionaban a velocidades de reloj bajas en comparación con los diseños microelectrónicos modernos. Las frecuencias de señal de reloj que oscilaban entre 100 kHz y 4 MHz eran muy comunes en esta época, limitadas en gran medida por la velocidad de los dispositivos de conmutación con los que estaban construidos. [26]

CPU de transistores

Procesador IBM PowerPC 604e

La complejidad del diseño de las CPU aumentó a medida que diversas tecnologías facilitaron la construcción de dispositivos electrónicos más pequeños y confiables. La primera mejora de este tipo se produjo con la llegada del transistor . Las CPU transistorizadas durante las décadas de 1950 y 1960 ya no tenían que construirse con elementos de conmutación voluminosos, poco fiables y frágiles, como tubos de vacío y relés . [27] Con esta mejora, se construyeron CPU más complejas y confiables en una o varias placas de circuito impreso que contienen componentes discretos (individuales).

En 1964, IBM introdujo su arquitectura informática IBM System/360 que se utilizó en una serie de computadoras capaces de ejecutar los mismos programas con diferentes velocidades y rendimientos. [28] Esto fue significativo en un momento en que la mayoría de las computadoras electrónicas eran incompatibles entre sí, incluso aquellas fabricadas por el mismo fabricante. Para facilitar esta mejora, IBM utilizó el concepto de microprograma (a menudo llamado "microcódigo"), que todavía se utiliza ampliamente en las CPU modernas. [29] La arquitectura System/360 fue tan popular que dominó el mercado de las computadoras centrales durante décadas y dejó un legado que continúa en computadoras modernas similares como la IBM zSeries . [30] [31] En 1965, Digital Equipment Corporation (DEC) introdujo otra computadora influyente dirigida a los mercados científicos y de investigación: la PDP-8 . [32]

Placa Fujitsu con procesadores SPARC64 VIIIfx

Las computadoras basadas en transistores tenían varias ventajas distintivas sobre sus predecesoras. Además de facilitar una mayor confiabilidad y un menor consumo de energía, los transistores también permitieron que las CPU funcionaran a velocidades mucho más altas debido al corto tiempo de conmutación de un transistor en comparación con un tubo o un relé. [33] La mayor confiabilidad y el aumento dramático de la velocidad de los elementos de conmutación, que en ese momento eran casi exclusivamente transistores; Durante este período se obtuvieron fácilmente velocidades de reloj de CPU de decenas de megahercios. [34] Además, mientras que las CPU de transistores discretos y de circuitos integrados se usaban mucho, comenzaron a aparecer nuevos diseños de alto rendimiento como procesadores vectoriales de instrucción única y datos múltiples (SIMD) . [35] Estos primeros diseños experimentales dieron lugar más tarde a la era de las supercomputadoras especializadas como las fabricadas por Cray Inc y Fujitsu Ltd. [35]

CPU de integración a pequeña escala

CPU, memoria central e interfaz de bus externo de un DEC PDP-8 /I, fabricados a partir de circuitos integrados de mediana escala

Durante este período, se desarrolló un método para fabricar muchos transistores interconectados en un espacio compacto. El circuito integrado (CI) permitió fabricar una gran cantidad de transistores en un único chip o chip basado en semiconductores . Al principio, sólo se miniaturizaron en circuitos integrados circuitos digitales muy básicos no especializados, como las puertas NOR . [36] Las CPU basadas en estos circuitos integrados "bloques de construcción" generalmente se denominan dispositivos de "integración a pequeña escala" (SSI). Los circuitos integrados SSI, como los utilizados en la computadora de guía Apollo , generalmente contenían hasta unas pocas docenas de transistores. Para construir una CPU completa a partir de circuitos integrados SSI se necesitaban miles de chips individuales, pero aun así consumía mucho menos espacio y energía que los diseños anteriores de transistores discretos. [37]

El System/370 de IBM , continuación del System/360, utilizaba circuitos integrados SSI en lugar de módulos de transistores discretos de Solid Logic Technology . [38] [39] Los PDP-8 /I y KI10 PDP-10 de DEC también cambiaron de los transistores individuales utilizados por los PDP-8 y PDP-10 a circuitos integrados SSI, [40] y su extremadamente popular línea PDP-11 fue originalmente construido con circuitos integrados SSI, pero finalmente se implementó con componentes LSI una vez que se volvieron prácticos.

CPU de integración a gran escala

Lee Boysel publicó artículos influyentes, incluido un "manifiesto" de 1967, que describía cómo construir el equivalente de una computadora central de 32 bits a partir de un número relativamente pequeño de circuitos de integración a gran escala (LSI). [41] [42] La única manera de construir chips LSI, que son chips con cien o más puertas, era construirlos utilizando un proceso de fabricación de semiconductores de óxido metálico (MOS) (ya sea lógica PMOS , lógica NMOS o Lógica CMOS ). Sin embargo, algunas empresas continuaron fabricando procesadores a partir de chips de lógica transistor-transistor (TTL) bipolar porque los transistores de unión bipolar eran más rápidos que los chips MOS hasta la década de 1970 (algunas empresas como Datapoint continuaron fabricando procesadores a partir de chips TTL hasta principios de 1970). década de 1980). [42] En la década de 1960, los circuitos integrados MOS eran más lentos e inicialmente se consideraban útiles sólo en aplicaciones que requerían baja potencia. [43] [44] Tras el desarrollo de la tecnología MOS de puerta de silicio por Federico Faggin en Fairchild Semiconductor en 1968, los circuitos integrados MOS reemplazaron en gran medida al TTL bipolar como tecnología de chip estándar a principios de la década de 1970. [45]

A medida que avanzaba la tecnología microelectrónica , se colocó una cantidad cada vez mayor de transistores en los circuitos integrados, lo que disminuyó la cantidad de circuitos integrados individuales necesarios para una CPU completa. Los circuitos integrados MSI y LSI aumentaron el número de transistores a cientos y luego a miles. En 1968, la cantidad de circuitos integrados necesarios para construir una CPU completa se había reducido a 24 circuitos integrados de ocho tipos diferentes, y cada circuito integrado contenía aproximadamente 1000 MOSFET. [46] En marcado contraste con sus predecesores SSI y MSI, la primera implementación LSI del PDP-11 contenía una CPU compuesta por sólo cuatro circuitos integrados LSI. [47]

Microprocesadores

Dentro de una computadora portátil, con la CPU extraída del zócalo

Desde que se introdujeron los microprocesadores, han superado casi por completo a todos los demás métodos de implementación de unidades centrales de procesamiento. El primer microprocesador disponible comercialmente, fabricado en 1971, fue el Intel 4004 , y el primer microprocesador ampliamente utilizado, fabricado en 1974, fue el Intel 8080 . Los fabricantes de mainframes y minicomputadoras de la época lanzaron programas patentados de desarrollo de circuitos integrados para actualizar sus arquitecturas de computadoras más antiguas y, finalmente, produjeron microprocesadores compatibles con conjuntos de instrucciones que eran compatibles con versiones anteriores de su hardware y software más antiguos. Combinado con la llegada y eventual éxito de la omnipresente computadora personal , el término CPU ahora se aplica casi exclusivamente [a] a los microprocesadores. Se pueden combinar varias CPU (denotadas núcleos ) en un solo chip de procesamiento. [48]

Las generaciones anteriores de CPU se implementaron como componentes discretos y numerosos pequeños circuitos integrados (CI) en una o más placas de circuito. [49] Los microprocesadores, por otro lado, son CPU fabricadas con un número muy pequeño de circuitos integrados; normalmente solo uno. [50] El tamaño general más pequeño de la CPU, como resultado de su implementación en un solo chip, significa un tiempo de conmutación más rápido debido a factores físicos como la disminución de la capacitancia parásita de la puerta . [51] [52] Esto ha permitido que los microprocesadores síncronos tengan velocidades de reloj que van desde decenas de megahercios hasta varios gigahercios. Además, la capacidad de construir transistores extremadamente pequeños en un circuito integrado ha aumentado muchas veces la complejidad y la cantidad de transistores en una sola CPU. Esta tendencia ampliamente observada se describe en la ley de Moore , que demostró ser un predictor bastante preciso del crecimiento de la complejidad de la CPU (y otros circuitos integrados) hasta 2016. [53] [54]

Si bien la complejidad, el tamaño, la construcción y la forma general de las CPU han cambiado enormemente desde 1950, [55] el diseño y la función básicos no han cambiado mucho. Casi todas las CPU comunes hoy en día pueden describirse con mucha precisión como máquinas de programa almacenado de von Neumann. [56] [b] Como la ley de Moore ya no se cumple, han surgido preocupaciones sobre los límites de la tecnología de transistores de circuitos integrados. La miniaturización extrema de las puertas electrónicas está provocando que los efectos de fenómenos como la electromigración y las fugas por debajo del umbral se vuelvan mucho más significativos. [58] [59] Estas nuevas preocupaciones se encuentran entre los muchos factores que llevan a los investigadores a investigar nuevos métodos de computación, como la computadora cuántica , así como a expandir el uso del paralelismo y otros métodos que amplían la utilidad del modelo clásico de von Neumann. .

Operación

La operación fundamental de la mayoría de las CPU, independientemente de la forma física que adopten, es ejecutar una secuencia de instrucciones almacenadas que se denomina programa. Las instrucciones a ejecutar se guardan en algún tipo de memoria de la computadora . Casi todas las CPU siguen los pasos de búsqueda, decodificación y ejecución en su operación, que se conocen colectivamente como ciclo de instrucción .

Después de la ejecución de una instrucción, todo el proceso se repite, y el siguiente ciclo de instrucción normalmente recupera la siguiente instrucción en la secuencia debido al valor incrementado en el contador del programa . Si se ejecutó una instrucción de salto, el contador del programa se modificará para contener la dirección de la instrucción a la que se saltó y la ejecución del programa continúa normalmente. En CPU más complejas, se pueden buscar, decodificar y ejecutar varias instrucciones simultáneamente. Esta sección describe lo que generalmente se conoce como " canalización RISC clásica ", que es bastante común entre las CPU simples utilizadas en muchos dispositivos electrónicos (a menudo llamados microcontroladores). Ignora en gran medida la importante función de la memoria caché de la CPU y, por lo tanto, la etapa de acceso de la canalización.

Algunas instrucciones manipulan el contador del programa en lugar de producir datos de resultados directamente; Estas instrucciones generalmente se denominan "saltos" y facilitan el comportamiento del programa como bucles , ejecución condicional del programa (mediante el uso de un salto condicional) y existencia de funciones . [c] En algunos procesadores, algunas otras instrucciones cambian el estado de los bits en un registro de "banderas" . Estos indicadores se pueden utilizar para influir en el comportamiento de un programa, ya que a menudo indican el resultado de varias operaciones. Por ejemplo, en tales procesadores una instrucción de "comparación" evalúa dos valores y establece o borra bits en el registro de banderas para indicar cuál es mayor o si son iguales; Una de estas banderas podría luego ser utilizada por una instrucción de salto posterior para determinar el flujo del programa.

Buscar

La recuperación implica recuperar una instrucción (que está representada por un número o una secuencia de números) de la memoria del programa. La ubicación (dirección) de la instrucción en la memoria del programa está determinada por el contador del programa (PC; llamado "puntero de instrucción" en los microprocesadores Intel x86 ), que almacena un número que identifica la dirección de la siguiente instrucción que se recuperará. Después de recuperar una instrucción, la PC incrementa la longitud de la instrucción para que contenga la dirección de la siguiente instrucción en la secuencia. [d] A menudo, la instrucción que se va a recuperar debe recuperarse de una memoria relativamente lenta, lo que hace que la CPU se detenga mientras espera que se devuelva la instrucción. Este problema se soluciona en gran medida en los procesadores modernos mediante cachés y arquitecturas de canalización (ver más abajo).

Descodificar

La instrucción que la CPU obtiene de la memoria determina lo que hará la CPU. En el paso de decodificación, realizado por un circuito decodificador binario conocido como decodificador de instrucciones , la instrucción se convierte en señales que controlan otras partes de la CPU.

La forma en que se interpreta la instrucción está definida por la arquitectura del conjunto de instrucciones (ISA) de la CPU. [e] A menudo, un grupo de bits (es decir, un "campo") dentro de la instrucción, llamado código de operación, indica qué operación se va a realizar, mientras que los campos restantes generalmente proporcionan información complementaria requerida para la operación, como el operandos. Esos operandos pueden especificarse como un valor constante (llamado valor inmediato) o como la ubicación de un valor que puede ser un registro del procesador o una dirección de memoria, según lo determinado por algún modo de direccionamiento .

En algunos diseños de CPU, el decodificador de instrucciones se implementa como un circuito decodificador binario cableado e inmutable. En otros, se utiliza un microprograma para traducir instrucciones en conjuntos de señales de configuración de CPU que se aplican secuencialmente a lo largo de múltiples pulsos de reloj. En algunos casos la memoria que almacena el microprograma es reescribible, lo que permite cambiar la forma en que la CPU decodifica las instrucciones.

Ejecutar

Después de los pasos de búsqueda y decodificación, se realiza el paso de ejecución. Dependiendo de la arquitectura de la CPU, esto puede consistir en una única acción o una secuencia de acciones. Durante cada acción, señales de control habilitan o deshabilitan eléctricamente varias partes de la CPU para que puedan realizar toda o parte de la operación deseada. Luego se completa la acción, normalmente en respuesta a un pulso de reloj. Muy a menudo, los resultados se escriben en un registro interno de la CPU para un acceso rápido mediante instrucciones posteriores. En otros casos, los resultados se pueden escribir en una memoria principal más lenta, pero menos costosa y de mayor capacidad .

Por ejemplo, si se va a ejecutar una instrucción que realiza una suma, se activan los registros que contienen operandos (números a sumar), al igual que las partes de la unidad aritmético lógica (ALU) que realizan la suma. Cuando ocurre el pulso de reloj, los operandos fluyen desde los registros fuente hacia la ALU y la suma aparece en su salida. En pulsos de reloj posteriores, se habilitan (y deshabilitan) otros componentes para mover la salida (la suma de la operación) al almacenamiento (por ejemplo, un registro o memoria). Si la suma resultante es demasiado grande (es decir, es mayor que el tamaño de la palabra de salida de la ALU), se activará un indicador de desbordamiento aritmético que influirá en la siguiente operación.

Estructura e implementación

Diagrama de bloques de una computadora básica monoprocesador-CPU. Las líneas negras indican flujo de datos, mientras que las líneas rojas indican flujo de control; Las flechas indican las direcciones del flujo.

Integrado en el circuito de una CPU hay un conjunto de operaciones básicas que puede realizar, llamado conjunto de instrucciones . Estas operaciones pueden implicar, por ejemplo, sumar o restar dos números, comparar dos números o saltar a una parte diferente de un programa. Cada instrucción está representada por una combinación única de bits , conocida como código de operación en lenguaje de máquina . Mientras procesa una instrucción, la CPU decodifica el código de operación (a través de un decodificador binario ) en señales de control, que organizan el comportamiento de la CPU. Una instrucción completa en lenguaje de máquina consta de un código de operación y, en muchos casos, bits adicionales que especifican argumentos para la operación (por ejemplo, los números que se suman en el caso de una operación de suma). Subiendo en la escala de complejidad, un programa en lenguaje de máquina es una colección de instrucciones en lenguaje de máquina que ejecuta la CPU.

La operación matemática real para cada instrucción se realiza mediante un circuito lógico combinacional dentro del procesador de la CPU conocido como unidad aritmético-lógica o ALU. En general, una CPU ejecuta una instrucción buscándola de la memoria, usando su ALU para realizar una operación y luego almacenando el resultado en la memoria. Además de las instrucciones para operaciones lógicas y matemáticas con números enteros, existen otras instrucciones de máquina, como aquellas para cargar datos desde la memoria y almacenarlos, operaciones de ramificación y operaciones matemáticas con números de punto flotante realizadas por la unidad de punto flotante de la CPU ( FPU). ). [60]

Unidad de control

La unidad de control (CU) es un componente de la CPU que dirige el funcionamiento del procesador. Le dice a la memoria de la computadora, a la unidad aritmética y lógica y a los dispositivos de entrada y salida cómo responder a las instrucciones que se han enviado al procesador.

Dirige el funcionamiento de las otras unidades proporcionando señales de sincronización y control. La mayoría de los recursos informáticos son administrados por la CU. Dirige el flujo de datos entre la CPU y los otros dispositivos. John von Neumann incluyó la unidad de control como parte de la arquitectura von Neumann . En los diseños de computadoras modernas, la unidad de control suele ser una parte interna de la CPU y su función y funcionamiento generales no han cambiado desde su introducción. [61]

Unidad lógica aritmética

Representación simbólica de una ALU y sus señales de entrada y salida.

La unidad lógica aritmética (ALU) es un circuito digital dentro del procesador que realiza operaciones aritméticas de números enteros y lógica bit a bit . Las entradas a la ALU son las palabras de datos que se van a operar (llamadas operandos ), información de estado de operaciones anteriores y un código de la unidad de control que indica qué operación realizar. Dependiendo de la instrucción que se esté ejecutando, los operandos pueden provenir de registros internos de la CPU , memoria externa o constantes generadas por la propia ALU.

Cuando todas las señales de entrada se han asentado y propagado a través del circuito de la ALU, el resultado de la operación realizada aparece en las salidas de la ALU. El resultado consta tanto de una palabra de datos, que puede almacenarse en un registro o memoria, como de información de estado que normalmente se almacena en un registro interno especial de la CPU reservado para este propósito.

Las CPU modernas suelen contener más de una ALU para mejorar el rendimiento.

Unidad de generación de direcciones

La unidad de generación de direcciones (AGU), a veces también llamada unidad de cálculo de direcciones (ACU), [62] es una unidad de ejecución dentro de la CPU que calcula las direcciones utilizadas por la CPU para acceder a la memoria principal . Al tener los cálculos de direcciones manejados por circuitos separados que operan en paralelo con el resto de la CPU, se puede reducir la cantidad de ciclos de CPU necesarios para ejecutar varias instrucciones de la máquina , lo que genera mejoras en el rendimiento.

Mientras realizan diversas operaciones, las CPU necesitan calcular las direcciones de memoria necesarias para recuperar datos de la memoria; por ejemplo, las posiciones en memoria de los elementos de la matriz deben calcularse antes de que la CPU pueda recuperar los datos de las ubicaciones de memoria reales. Esos cálculos de generación de direcciones implican diferentes operaciones aritméticas de números enteros , como suma, resta, operaciones de módulo o desplazamientos de bits . A menudo, calcular una dirección de memoria implica más de una instrucción de máquina de propósito general, que no necesariamente se decodifica y ejecuta rápidamente. Al incorporar una AGU en un diseño de CPU, junto con la introducción de instrucciones especializadas que utilizan la AGU, se pueden descargar varios cálculos de generación de direcciones del resto de la CPU y, a menudo, se pueden ejecutar rápidamente en un solo ciclo de CPU.

Las capacidades de una AGU dependen de una CPU particular y su arquitectura . Por lo tanto, algunas AGU implementan y exponen más operaciones de cálculo de direcciones, mientras que algunas también incluyen instrucciones especializadas más avanzadas que pueden operar en múltiples operandos a la vez. Algunas arquitecturas de CPU incluyen múltiples AGU, por lo que se puede ejecutar más de una operación de cálculo de direcciones simultáneamente, lo que aporta mayores mejoras de rendimiento debido a la naturaleza superescalar de los diseños de CPU avanzados. Por ejemplo, Intel incorpora múltiples AGU en sus microarquitecturas Sandy Bridge y Haswell , que aumentan el ancho de banda del subsistema de memoria de la CPU al permitir que se ejecuten en paralelo múltiples instrucciones de acceso a la memoria.

Unidad de gestión de memoria (MMU)

Muchos microprocesadores (en teléfonos inteligentes y computadoras de escritorio, portátiles y servidores) tienen una unidad de administración de memoria, que traduce direcciones lógicas en direcciones RAM físicas, brinda protección de memoria y capacidades de paginación , útiles para la memoria virtual . Los procesadores más simples, especialmente los microcontroladores , normalmente no incluyen una MMU.

Cache

Una caché de CPU [63] es una caché de hardware utilizada por la unidad central de procesamiento (CPU) de una computadora para reducir el costo promedio (tiempo o energía) para acceder a los datos desde la memoria principal . Una caché es una memoria más pequeña y más rápida, más cercana al núcleo de un procesador , que almacena copias de los datos de ubicaciones de memoria principal utilizadas con frecuencia . La mayoría de las CPU tienen diferentes cachés independientes, incluidos cachés de instrucciones y de datos , donde el caché de datos suele organizarse como una jerarquía de más niveles de caché (L1, L2, L3, L4, etc.).

Todas las CPU modernas (rápidas) (con pocas excepciones especializadas [f] ) ​​tienen múltiples niveles de cachés de CPU. Las primeras CPU que utilizaron caché tenían solo un nivel de caché; a diferencia de los cachés de nivel 1 posteriores, no se dividió en L1d (para datos) y L1i (para instrucciones). Casi todas las CPU actuales con caché tienen un caché L1 dividido. También tienen cachés L2 y, para procesadores más grandes, también cachés L3. La caché L2 generalmente no está dividida y actúa como un depósito común para la caché L1 ya dividida. Cada núcleo de un procesador multinúcleo tiene una caché L2 dedicada y, por lo general, no se comparte entre los núcleos. La caché L3 y las cachés de nivel superior se comparten entre los núcleos y no se dividen. Una caché L4 es poco común actualmente y generalmente se encuentra en una memoria dinámica de acceso aleatorio (DRAM), en lugar de en una memoria estática de acceso aleatorio (SRAM), en un chip o chip separado. Este también fue el caso históricamente con L1, mientras que los chips más grandes han permitido la integración de este y, en general, de todos los niveles de caché, con la posible excepción del último nivel. Cada nivel adicional de caché tiende a ser mayor y está optimizado de manera diferente.

Existen otros tipos de cachés (que no se cuentan para el "tamaño de caché" de los cachés más importantes mencionados anteriormente), como el búfer de traducción (TLB) que forma parte de la unidad de administración de memoria (MMU) que tienen la mayoría de las CPU.

Los cachés generalmente tienen un tamaño en potencias de dos: 2, 8, 16, etc. KiB o MiB (para tamaños más grandes que no sean L1), aunque el IBM z13 tiene un caché de instrucciones L1 de 96 KiB. [64]

Velocidad de reloj

La mayoría de las CPU son circuitos síncronos , lo que significa que emplean una señal de reloj para controlar sus operaciones secuenciales. La señal del reloj es producida por un circuito oscilador externo que genera un número constante de pulsos cada segundo en forma de onda cuadrada periódica . La frecuencia de los pulsos del reloj determina la velocidad a la que una CPU ejecuta instrucciones y, en consecuencia, cuanto más rápido sea el reloj, más instrucciones ejecutará la CPU cada segundo.

Para garantizar el funcionamiento adecuado de la CPU, el período de reloj es mayor que el tiempo máximo necesario para que todas las señales se propaguen (se muevan) a través de la CPU. Al establecer el período de reloj en un valor muy por encima del retraso de propagación en el peor de los casos , es posible diseñar toda la CPU y la forma en que mueve los datos alrededor de los "bordes" de la señal de reloj ascendente y descendente. Esto tiene la ventaja de simplificar significativamente la CPU, tanto desde una perspectiva de diseño como de recuento de componentes. Sin embargo, también conlleva la desventaja de que toda la CPU debe esperar a sus elementos más lentos, aunque algunas partes de ella sean mucho más rápidas. Esta limitación ha sido compensada en gran medida por varios métodos para aumentar el paralelismo de la CPU (ver más abajo).

Sin embargo, las mejoras arquitectónicas por sí solas no resuelven todos los inconvenientes de las CPU globalmente síncronas. Por ejemplo, una señal de reloj está sujeta a los retrasos de cualquier otra señal eléctrica. Las velocidades de reloj más altas en CPU cada vez más complejas hacen que sea más difícil mantener la señal del reloj en fase (sincronizada) en toda la unidad. Esto ha llevado a muchas CPU modernas a requerir que se proporcionen múltiples señales de reloj idénticas para evitar retrasar una sola señal lo suficiente como para causar un mal funcionamiento de la CPU. Otro problema importante, a medida que las velocidades de reloj aumentan drásticamente, es la cantidad de calor que disipa la CPU . El reloj en constante cambio hace que muchos componentes cambien independientemente de si se están utilizando en ese momento. En general, un componente que está conmutando utiliza más energía que un elemento en estado estático. Por lo tanto, a medida que aumenta la velocidad del reloj, también aumenta el consumo de energía, lo que hace que la CPU requiera más disipación de calor en forma de soluciones de refrigeración de la CPU .

Un método para lidiar con la conmutación de componentes innecesarios se llama sincronización de reloj , que implica apagar la señal de reloj a componentes innecesarios (deshabilitarlos efectivamente). Sin embargo, esto a menudo se considera difícil de implementar y, por lo tanto, no se ve un uso común fuera de los diseños de muy bajo consumo. Un diseño de CPU reciente notable que utiliza una amplia sincronización de reloj es el Xenon basado en IBM PowerPC utilizado en la Xbox 360 ; esto reduce los requisitos de energía de la Xbox 360. [65]

CPU sin reloj

Otro método para abordar algunos de los problemas con una señal de reloj global es eliminar la señal de reloj por completo. Si bien la eliminación de la señal del reloj global hace que el proceso de diseño sea considerablemente más complejo en muchos sentidos, los diseños asíncronos (o sin reloj) conllevan marcadas ventajas en el consumo de energía y la disipación de calor en comparación con diseños síncronos similares. Si bien es algo poco común, se han construido CPU asíncronas completas sin utilizar una señal de reloj global. Dos ejemplos notables de esto son el AMULET compatible con ARM y el MiniMIPS compatible con MIPS R3000. [66]

En lugar de eliminar totalmente la señal de reloj, algunos diseños de CPU permiten que ciertas partes del dispositivo sean asíncronas, como el uso de ALU asíncronas junto con canalización superescalar para lograr algunas ganancias de rendimiento aritmético. Si bien no está del todo claro si los diseños totalmente asincrónicos pueden funcionar a un nivel comparable o mejor que sus contrapartes sincrónicas, es evidente que al menos sobresalen en operaciones matemáticas más simples. Esto, combinado con su excelente consumo de energía y propiedades de disipación de calor, los hace muy adecuados para computadoras integradas . [67]

Módulo regulador de voltaje

Muchas CPU modernas tienen un módulo de administración de energía integrado que regula el suministro de voltaje bajo demanda al circuito de la CPU, lo que le permite mantener el equilibrio entre el rendimiento y el consumo de energía.

rango de enteros

Cada CPU representa valores numéricos de una manera específica. Por ejemplo, algunas de las primeras computadoras digitales representaban los números como valores familiares del sistema numérico decimal (base 10) , y otras han empleado representaciones más inusuales, como el ternario (base tres). Casi todas las CPU modernas representan números en forma binaria , y cada dígito está representado por alguna cantidad física de dos valores, como un voltaje "alto" o "bajo" . [gramo]

Una palabra de seis bits que contiene la representación codificada binaria del valor decimal 40. La mayoría de las CPU modernas emplean tamaños de palabras que son una potencia de dos, por ejemplo, 8, 16, 32 o 64 bits.

Relacionado con la representación numérica está el tamaño y la precisión de los números enteros que una CPU puede representar. En el caso de una CPU binaria, esto se mide por la cantidad de bits (dígitos significativos de un entero codificado en binario) que la CPU puede procesar en una operación, lo que comúnmente se denomina tamaño de palabra , ancho de bit , ancho de ruta de datos , precisión de entero. , o tamaño de número entero . El tamaño entero de una CPU determina el rango de valores enteros en los que puede operar directamente. [h] Por ejemplo, una CPU de 8 bits puede manipular directamente números enteros representados por ocho bits, que tienen un rango de 256 (2 8 ) valores enteros discretos.

El rango de enteros también puede afectar la cantidad de ubicaciones de memoria que la CPU puede direccionar directamente (una dirección es un valor entero que representa una ubicación de memoria específica). Por ejemplo, si una CPU binaria usa 32 bits para representar una dirección de memoria, entonces puede direccionar directamente 2 32 ubicaciones de memoria. Para sortear esta limitación y por varias otras razones, algunas CPU utilizan mecanismos (como el cambio de banco ) que permiten direccionar memoria adicional.

Las CPU con tamaños de palabras más grandes requieren más circuitos y, en consecuencia, son físicamente más grandes, cuestan más y consumen más energía (y por lo tanto generan más calor). Como resultado, en las aplicaciones modernas se utilizan comúnmente microcontroladores más pequeños de 4 u 8 bits , aunque se encuentran disponibles CPU con tamaños de palabras mucho más grandes (como 16, 32, 64 e incluso 128 bits). Sin embargo, cuando se requiere un mayor rendimiento, los beneficios de un tamaño de palabra mayor (rangos de datos y espacios de direcciones más grandes) pueden superar las desventajas. Una CPU puede tener rutas de datos internas más cortas que el tamaño de la palabra para reducir el tamaño y el costo. Por ejemplo, aunque la arquitectura del conjunto de instrucciones IBM System/360 era un conjunto de instrucciones de 32 bits, System/360 Modelo 30 y Modelo 40 tenían rutas de datos de 8 bits en la unidad lógica aritmética, por lo que se requería una adición de 32 bits. cuatro ciclos, uno por cada 8 bits de los operandos, y, aunque el conjunto de instrucciones de la serie Motorola 68000 era un conjunto de instrucciones de 32 bits, el Motorola 68000 y el Motorola 68010 tenían rutas de datos de 16 bits en la unidad lógica aritmética, de modo que una adición de 32 bits requirió dos ciclos.

Para obtener algunas de las ventajas que ofrecen las longitudes de bits más bajas y más altas, muchos conjuntos de instrucciones tienen diferentes anchos de bits para datos enteros y de punto flotante, lo que permite a las CPU que implementan ese conjunto de instrucciones tener diferentes anchos de bits para diferentes partes del dispositivo. Por ejemplo, el conjunto de instrucciones IBM System/360 era principalmente de 32 bits, pero admitía valores de punto flotante de 64 bits para facilitar una mayor precisión y rango en números de punto flotante. [29] El System/360 Modelo 65 tenía un sumador de 8 bits para aritmética binaria decimal y de punto fijo y un sumador de 60 bits para aritmética de punto flotante. [68] Muchos diseños de CPU posteriores utilizan un ancho de bits mixto similar, especialmente cuando el procesador está diseñado para un uso de propósito general donde se requiere un equilibrio razonable entre la capacidad de números enteros y de punto flotante.

Paralelismo

Modelo de CPU subescalar, en el que se necesitan quince ciclos de reloj para completar tres instrucciones

La descripción del funcionamiento básico de una CPU ofrecida en la sección anterior describe la forma más simple que puede adoptar una CPU. Este tipo de CPU, generalmente denominada subescalar , opera y ejecuta una instrucción en uno o dos datos a la vez, es decir, menos de una instrucción por ciclo de reloj ( IPC < 1 ).

Este proceso da lugar a una ineficiencia inherente en las CPU subescalares. Dado que solo se ejecuta una instrucción a la vez, toda la CPU debe esperar a que se complete esa instrucción antes de continuar con la siguiente. Como resultado, la CPU subescalar se "bloquea" en instrucciones que tardan más de un ciclo de reloj en completarse. Incluso agregar una segunda unidad de ejecución (ver más abajo) no mejora mucho el rendimiento; en lugar de colgar una vía, ahora se cuelgan dos vías y aumenta el número de transistores no utilizados. Este diseño, en el que los recursos de ejecución de la CPU pueden operar solo con una instrucción a la vez, solo puede alcanzar un rendimiento escalar (una instrucción por ciclo de reloj, IPC = 1 ). Sin embargo, el rendimiento casi siempre es subescalar (menos de una instrucción por ciclo de reloj, IPC < 1 ).

Los intentos de lograr un rendimiento escalar y mejor han dado como resultado una variedad de metodologías de diseño que hacen que la CPU se comporte menos linealmente y más en paralelo. Cuando se hace referencia al paralelismo en las CPU, generalmente se utilizan dos términos para clasificar estas técnicas de diseño:

Cada metodología difiere tanto en la forma en que se implementan como en la efectividad relativa que brindan para aumentar el rendimiento de la CPU para una aplicación. [i]

Paralelismo a nivel de instrucción

Tubería básica de cinco etapas. En el mejor de los casos, este canal puede mantener una tasa de finalización de una instrucción por ciclo de reloj.

Uno de los métodos más simples para aumentar el paralelismo es comenzar los primeros pasos de búsqueda y decodificación de instrucciones antes de que termine de ejecutarse la instrucción anterior. Esta es una técnica conocida como canalización de instrucciones y se utiliza en casi todas las CPU modernas de uso general. La canalización permite ejecutar múltiples instrucciones a la vez al dividir la ruta de ejecución en etapas discretas. Esta separación se puede comparar con una línea de montaje, en la que una instrucción se completa en cada etapa hasta que sale del proceso de ejecución y se retira.

Sin embargo, la canalización introduce la posibilidad de que se produzca una situación en la que se necesite el resultado de la operación anterior para completar la siguiente; una condición a menudo denominada conflicto de dependencia de datos. Por lo tanto, los procesadores canalizados deben verificar este tipo de condiciones y retrasar una parte del canal si es necesario. Un procesador canalizado puede volverse casi escalar, inhibido sólo por paradas del canal (una instrucción que pasa más de un ciclo de reloj en una etapa).

Un canal superescalar simple. Al buscar y enviar dos instrucciones a la vez, se puede completar un máximo de dos instrucciones por ciclo de reloj.

Las mejoras en la canalización de instrucciones condujeron a reducciones adicionales en el tiempo de inactividad de los componentes de la CPU. Los diseños que se dice que son superescalares incluyen una larga cadena de instrucciones y múltiples unidades de ejecución idénticas , como unidades de carga y almacenamiento , unidades aritmético-lógicas , unidades de punto flotante y unidades de generación de direcciones . [69] En una canalización superescalar, las instrucciones se leen y se pasan a un despachador, que decide si las instrucciones se pueden ejecutar en paralelo (simultáneamente). De ser así, son enviados a unidades de ejecución, resultando su ejecución simultánea. En general, la cantidad de instrucciones que una CPU superescalar completará en un ciclo depende de la cantidad de instrucciones que pueda enviar simultáneamente a las unidades de ejecución.

La mayor parte de la dificultad en el diseño de una arquitectura de CPU superescalar radica en crear un despachador eficaz. El despachador debe poder determinar rápidamente si las instrucciones se pueden ejecutar en paralelo, así como enviarlas de tal manera que mantenga ocupadas tantas unidades de ejecución como sea posible. Esto requiere que la canalización de instrucciones se llene con la mayor frecuencia posible y requiere cantidades significativas de caché de la CPU . También hace que las técnicas para evitar riesgos , como la predicción de ramas , la ejecución especulativa , el cambio de nombre de registros , la ejecución fuera de orden y la memoria transaccional, sean cruciales para mantener altos niveles de rendimiento. Al intentar predecir qué rama (o ruta) tomará una instrucción condicional, la CPU puede minimizar la cantidad de veces que toda la canalización debe esperar hasta que se complete una instrucción condicional. La ejecución especulativa a menudo proporciona aumentos modestos en el rendimiento al ejecutar partes de código que pueden no ser necesarias una vez completada una operación condicional. La ejecución fuera de orden reorganiza en cierta medida el orden en que se ejecutan las instrucciones para reducir los retrasos debidos a las dependencias de datos. Además, en el caso de un solo flujo de instrucciones o múltiples flujos de datos , un caso en el que se deben procesar una gran cantidad de datos del mismo tipo, los procesadores modernos pueden desactivar partes de la canalización de modo que cuando una sola instrucción se ejecuta muchas veces, la CPU se salta las fases de búsqueda y decodificación y, por tanto, aumenta considerablemente el rendimiento en determinadas ocasiones, especialmente en motores de programas muy monótonos, como software de creación de vídeos y procesamiento de fotografías.

Cuando una fracción de la CPU es superescalar, la parte que no lo es sufre una penalización de rendimiento debido a paradas de programación. El Intel P5 Pentium tenía dos ALU superescalares que podían aceptar una instrucción por ciclo de reloj cada una, pero su FPU no. Por tanto, el P5 era un superescalar entero pero no un superescalar de coma flotante. El sucesor de Intel de la arquitectura P5, P6 , agregó capacidades superescalares a sus características de punto flotante.

La canalización simple y el diseño superescalar aumentan el ILP de una CPU al permitirle ejecutar instrucciones a velocidades que superan una instrucción por ciclo de reloj. La mayoría de los diseños de CPU modernos son al menos algo superescalares, y casi todas las CPU de uso general diseñadas en la última década son superescalares. En años posteriores, parte del énfasis en el diseño de computadoras con alto ILP se ha trasladado del hardware de la CPU a su interfaz de software, o arquitectura de conjunto de instrucciones (ISA). La estrategia de la palabra de instrucción muy larga (VLIW) hace que parte del ILP quede implícito directamente en el software, lo que reduce el trabajo de la CPU para impulsar el ILP y, por lo tanto, reduce la complejidad del diseño.

Paralelismo a nivel de tarea

Otra estrategia para lograr rendimiento es ejecutar múltiples subprocesos o procesos en paralelo. Esta área de investigación se conoce como computación paralela . [70] En la taxonomía de Flynn , esta estrategia se conoce como flujo de instrucciones múltiples, flujo de datos múltiples (MIMD). [71]

Una tecnología utilizada para este propósito es el multiprocesamiento (MP). [72] El tipo 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 hardware adicional para mantener una vista de la memoria constantemente actualizada. Al evitar vistas obsoletas de la memoria, las CPU pueden cooperar en el mismo programa y los programas pueden migrar de una CPU a otra. Para aumentar el número de CPU que cooperan más allá de un puñado, en la década de 1990 se introdujeron esquemas como el acceso no uniforme a la memoria (NUMA) y protocolos de coherencia basados ​​en directorios . Los sistemas SMP están limitados a una pequeña cantidad de CPU, mientras que los sistemas NUMA se han construido con miles de procesadores. Inicialmente, el multiprocesamiento se construyó utilizando múltiples CPU y placas discretas para implementar la interconexión entre los procesadores. Cuando todos los procesadores y su interconexión se implementan en un solo chip, la tecnología se conoce como multiprocesamiento a nivel de chip (CMP) y el chip único como procesador multinúcleo .

Más tarde se reconoció que existía un paralelismo más fino con un solo programa. Un único programa puede tener varios subprocesos (o funciones) que podrían ejecutarse por separado o en paralelo. Algunos de los primeros ejemplos de esta tecnología implementaron procesamiento de entrada/salida , como el acceso directo a la memoria como un hilo separado del hilo de cálculo. En la década de 1970 se introdujo un enfoque más general de esta tecnología, cuando los sistemas se diseñaron para ejecutar múltiples subprocesos de cálculo en paralelo. Esta tecnología se conoce como multihilo (MT). El enfoque se considera más rentable que el multiprocesamiento, ya que sólo se replica una pequeña cantidad de componentes dentro de una CPU para admitir MT en lugar de toda la CPU en el caso de MP. En MT, las unidades de ejecución y el sistema de memoria, incluidas las cachés, se comparten entre varios subprocesos. La desventaja de MT es que el soporte de hardware para subprocesos múltiples es más visible para el software que el de MP y, por lo tanto, el software supervisor, como los sistemas operativos, tiene que someterse a cambios más importantes para admitir MT. Un tipo de MT que se implementó se conoce como subproceso múltiple temporal , donde se ejecuta un subproceso hasta que se detiene esperando que los datos regresen de la memoria externa. En este esquema, la CPU cambiaría rápidamente de contexto a otro subproceso que esté listo para ejecutarse, el cambio a menudo se realiza en un ciclo de reloj de la CPU, como el UltraSPARC T1 . Otro tipo de MT es el multiproceso simultáneo , donde las instrucciones de varios subprocesos se ejecutan en paralelo dentro de un ciclo de reloj de la CPU.

Durante varias décadas, desde la década de 1970 hasta principios de la de 2000, el enfoque en el diseño de CPU de propósito general de alto rendimiento se centró en gran medida en lograr un alto ILP a través de tecnologías como canalización, cachés, ejecución superescalar, ejecución fuera de orden, etc. , CPU que consumen mucha energía, como el Intel Pentium 4 . A principios de la década de 2000, los diseñadores de CPU se vieron imposibilitados de lograr un mayor rendimiento con las técnicas ILP debido a la creciente disparidad entre las frecuencias operativas de la CPU y las frecuencias operativas de la memoria principal, así como a la creciente disipación de energía de la CPU debido a técnicas ILP más esotéricas.

Luego, los diseñadores de CPU tomaron prestadas ideas de los mercados informáticos comerciales, como el procesamiento de transacciones , donde el rendimiento agregado de múltiples programas, también conocido como computación de rendimiento , era más importante que el rendimiento de un solo hilo o proceso.

Esta inversión de énfasis se evidencia en la proliferación de diseños de procesadores duales y de más núcleos y, en particular, los diseños más nuevos de Intel que se asemejan a su arquitectura P6 menos superescalar . Los últimos diseños de varias familias de procesadores exhiben CMP, incluidos x86-64 Opteron y Athlon 64 X2 , SPARC UltraSPARC T1 , IBM POWER4 y POWER5 , así como varias CPU de consolas de videojuegos como el diseño PowerPC de triple núcleo de Xbox 360 . y el microprocesador Cell de 7 núcleos de PlayStation 3 .

Paralelismo de datos

Un paradigma de procesadores (y de hecho, de la informática en general) menos común pero cada vez más importante tiene que ver con el paralelismo de datos. Todos los procesadores analizados anteriormente se denominan algún tipo de dispositivo escalar. [j] Como su nombre lo indica, los procesadores vectoriales manejan múltiples datos en el contexto de una instrucción. Esto contrasta con los procesadores escalares, que procesan un dato por cada instrucción. Utilizando la taxonomía de Flynn , estos dos esquemas de tratamiento de datos generalmente se denominan flujo de instrucciones único , flujo de datos múltiples ( SIMD ) y flujo de instrucciones único , flujo de datos único ( SISD ), respectivamente. La gran utilidad de crear procesadores que trabajen con vectores de datos radica en optimizar tareas que tienden a requerir que se realice la misma operación (por ejemplo, una suma o un producto escalar ) sobre un gran conjunto de datos. Algunos ejemplos clásicos de este tipo de tareas incluyen aplicaciones multimedia (imágenes, vídeo y sonido), así como muchos tipos de tareas científicas y de ingeniería. Mientras que un procesador escalar debe completar todo el proceso de buscar, decodificar y ejecutar cada instrucción y valor en un conjunto de datos, un procesador vectorial puede realizar una sola operación en un conjunto de datos comparativamente grande con una sola instrucción. Esto sólo es posible cuando la aplicación tiende a requerir muchos pasos que aplican una operación a un gran conjunto de datos.

La mayoría de los primeros procesadores vectoriales, como el Cray-1 , se asociaban casi exclusivamente con aplicaciones de criptografía e investigación científica . Sin embargo, a medida que la multimedia se ha desplazado en gran medida a los medios digitales, la necesidad de algún tipo de SIMD en los procesadores de uso general se ha vuelto significativa. Poco después de que la inclusión de unidades de punto flotante comenzara a convertirse en algo común en los procesadores de propósito general, también comenzaron a aparecer especificaciones e implementaciones de unidades de ejecución SIMD para procesadores de propósito general. [ ¿ cuando? ] Algunas de estas primeras especificaciones SIMD, como Multimedia Acceleration eXtensions (MAX) de HP y MMX de Intel , eran solo números enteros. Esto resultó ser un impedimento importante para algunos desarrolladores de software, ya que muchas de las aplicaciones que se benefician de SIMD tratan principalmente con números de punto flotante . Progresivamente, los desarrolladores refinaron y rehicieron estos primeros diseños en algunas de las especificaciones SIMD modernas y comunes, que generalmente están asociadas con una arquitectura de conjunto de instrucciones (ISA). Algunos ejemplos modernos notables incluyen Streaming SIMD Extensions (SSE) de Intel y AltiVec relacionado con PowerPC (también conocido como VMX). [k]

Contador de rendimiento del hardware

Muchas arquitecturas modernas (incluidas las integradas) a menudo incluyen contadores de rendimiento de hardware (HPC), que permiten la recopilación, la evaluación comparativa , la depuración o el análisis de bajo nivel (nivel de instrucción) de las métricas del software en ejecución. [73] [74] HPC también se puede utilizar para descubrir y analizar actividades inusuales o sospechosas del software, como vulnerabilidades de programación orientada al retorno (ROP) o programación orientada al retorno (SROP), etc. [75] Esto generalmente se hace por equipos de seguridad de software para evaluar y encontrar programas binarios maliciosos.

Muchos proveedores importantes (como IBM , Intel , AMD y Arm , etc.) proporcionan interfaces de software (normalmente escritas en C/C++) que se pueden utilizar para recopilar datos de los registros de las CPU con el fin de obtener métricas. [76] Los proveedores de sistemas operativos también ofrecen software como perf(Linux) para registrar, comparar o rastrear eventos de CPU que ejecutan núcleos y aplicaciones.

Modos privilegiados

La mayoría de las CPU modernas tienen modos privilegiados para admitir sistemas operativos y virtualización.

La computación en la nube puede utilizar la virtualización para proporcionar unidades centrales de procesamiento virtuales [77] ( vCPU ) para usuarios separados. [78]

Un host es el equivalente virtual de una máquina física, en la que funciona un sistema virtual. [79] Cuando hay varias máquinas físicas funcionando en tándem y administradas como un todo, los recursos informáticos y de memoria agrupados forman un clúster . En algunos sistemas, es posible agregar y eliminar dinámicamente de un clúster. Los recursos disponibles a nivel de host y clúster se pueden dividir en grupos de recursos con granularidad fina .

Actuación

El rendimiento o velocidad de un procesador depende, entre muchos otros factores, de la velocidad del reloj (generalmente dada en múltiplos de hercios ) y de las instrucciones por reloj (IPC), que en conjunto son los factores de las instrucciones por segundo (IPS) que el La CPU puede funcionar. [80] Muchos valores de IPS informados han representado tasas de ejecución "máximas" en secuencias de instrucciones artificiales con pocas ramas, mientras que las cargas de trabajo realistas consisten en una combinación de instrucciones y aplicaciones, algunas de las cuales tardan más en ejecutarse que otras. El rendimiento de la jerarquía de memoria también afecta en gran medida al rendimiento del procesador, un tema apenas considerado en los cálculos de IPS. Debido a estos problemas, se han desarrollado varias pruebas estandarizadas, a menudo denominadas "puntos de referencia" para este propósito‍—‌como SPECint‍ —‌para intentar medir el rendimiento efectivo real en aplicaciones de uso común.

El rendimiento de procesamiento de las computadoras aumenta mediante el uso de procesadores multinúcleo , que esencialmente consisten en conectar dos o más procesadores individuales (llamados núcleos en este sentido) en un circuito integrado. [81] Idealmente, un procesador de doble núcleo sería casi el doble de potente que un procesador de un solo núcleo. En la práctica, la ganancia de rendimiento es mucho menor, sólo alrededor del 50%, debido a una implementación y algoritmos de software imperfectos. [82] Aumentar el número de núcleos en un procesador (es decir, doble núcleo, cuatro núcleos, etc.) aumenta la carga de trabajo que se puede manejar. Esto significa que el procesador ahora puede manejar numerosos eventos asincrónicos, interrupciones, etc., lo que puede afectar la CPU cuando se sobrecarga. Estos núcleos pueden considerarse como pisos diferentes en una planta de procesamiento, donde cada piso realiza una tarea diferente. A veces, estos núcleos manejarán las mismas tareas que los núcleos adyacentes si un solo núcleo no es suficiente para manejar la información. Las CPU de múltiples núcleos mejoran la capacidad de una computadora para ejecutar varias tareas simultáneamente al proporcionar potencia de procesamiento adicional. Sin embargo, el aumento de velocidad no es directamente proporcional a la cantidad de núcleos agregados. Esto se debe a que los núcleos necesitan interactuar a través de canales específicos y esta comunicación entre núcleos consume una parte de la velocidad de procesamiento disponible. [83]

Debido a las capacidades específicas de las CPU modernas, como el multithreading y uncore simultáneos , que implican compartir recursos reales de la CPU mientras se busca una mayor utilización, monitorear los niveles de rendimiento y el uso del hardware se convirtió gradualmente en una tarea más compleja. [84] Como respuesta, algunas CPU implementan lógica de hardware adicional que monitorea el uso real de varias partes de una CPU y proporciona varios contadores accesibles al software; un ejemplo es la tecnología Performance Counter Monitor de Intel . [2]

Ver también

Notas

  1. ^ Ahora se utilizan circuitos integrados para implementar todas las CPU, excepto algunas máquinas diseñadas para soportar grandes pulsos electromagnéticos, por ejemplo, de un arma nuclear.
  2. ^ El llamado memorando "von Neumann" expuso la idea de los programas almacenados, [57] que, por ejemplo, pueden almacenarse en tarjetas perforadas , cinta de papel o cinta magnética.
  3. ^ Algunas de las primeras computadoras, como la Harvard Mark I, no admitían ningún tipo de instrucción de "salto", lo que limitaba efectivamente la complejidad de los programas que podían ejecutar. Es en gran parte por esta razón que a menudo se considera que estas computadoras no contienen una CPU adecuada, a pesar de su gran similitud con las computadoras con programas almacenados.
  4. ^ Dado que el contador del programa cuenta direcciones de memoria y no instrucciones , se incrementa según la cantidad de unidades de memoria que contiene la palabra de instrucción. En el caso de palabras de instrucción ISA simples de longitud fija, este es siempre el mismo número. Por ejemplo, una palabra de instrucción ISA de 32 bits de longitud fija que utiliza palabras de memoria de 8 bits siempre incrementaría la PC en cuatro (excepto en el caso de saltos). Los ISA que utilizan palabras de instrucción de longitud variable incrementan la PC en el número de palabras de memoria correspondientes a la longitud de la última instrucción.
  5. ^ Debido a que la arquitectura del conjunto de instrucciones de una CPU es fundamental para su interfaz y uso, a menudo se utiliza como clasificación del "tipo" de CPU. Por ejemplo, una "CPU PowerPC" utiliza alguna variante de PowerPC ISA. Un sistema puede ejecutar una ISA diferente ejecutando un emulador.
  6. ^ Algunas CPU, aceleradores o microcontroladores especializados no tienen caché. Para ser rápidos, si es necesario o deseado, todavía tienen una memoria temporal en el chip que tiene una función similar, mientras se administra por software. Por ejemplo, en microcontroladores, puede ser mejor para un uso intenso en tiempo real tener eso o al menos no tener caché, ya que con un nivel de memoria las latencias de las cargas son predecibles.
  7. ^ El concepto físico de voltaje es analógico por naturaleza y prácticamente tiene un rango infinito de valores posibles. A los efectos de la representación física de números binarios, se definen dos rangos específicos de voltajes, uno para el '0' lógico y otro para el '1' lógico. Estos rangos están dictados por consideraciones de diseño, como los márgenes de ruido y las características de los dispositivos utilizados para crear la CPU.
  8. ^ Si bien el tamaño entero de una CPU establece un límite en los rangos de números enteros, esto puede (y a menudo se logra) superar utilizando una combinación de técnicas de software y hardware. Al utilizar memoria adicional, el software puede representar números enteros de muchas magnitudes mayores que los que puede hacer la CPU. A veces, el conjunto de instrucciones de la CPU incluso facilitará las operaciones con números enteros más grandes de lo que puede representar de forma nativa al proporcionar instrucciones para hacer que la aritmética con enteros grandes sea relativamente rápida. Este método de tratar con números enteros grandes es más lento que utilizar una CPU con un tamaño de entero mayor, pero es una compensación razonable en los casos en los que admitir de forma nativa todo el rango de enteros necesario tendría un costo prohibitivo. Consulte Aritmética de precisión arbitraria para obtener más detalles sobre enteros de tamaño arbitrario puramente compatibles con software.
  9. ^ Ni ILP ni TLP son inherentemente superiores al otro; son simplemente diferentes medios para aumentar el paralelismo de la CPU. Como tales, ambos tienen ventajas y desventajas, que a menudo están determinadas por el tipo de software que debe ejecutar el procesador. Las CPU con alto TLP se utilizan a menudo en aplicaciones que se prestan bien para dividirse en numerosas aplicaciones más pequeñas, los llamados " problemas vergonzosamente paralelos ". Con frecuencia, un problema computacional que se puede resolver rápidamente con estrategias de diseño de alto TLP, como el multiprocesamiento simétrico, requiere mucho más tiempo en dispositivos de alto ILP, como las CPU superescalares, y viceversa.
  10. ^ Anteriormente, el término escalar se utilizaba para comparar el recuento de IPC proporcionado por varios métodos ILP. Aquí el término se utiliza en sentido estrictamente matemático para contrastarlo con los vectores. Ver escalar (matemáticas) y vectorial (geométrica) .
  11. ^ Aunque SSE/SSE2/SSE3 han reemplazado a MMX en los procesadores de uso general de Intel, los diseños posteriores de IA-32 todavía admiten MMX. Esto generalmente se hace proporcionando la mayor parte de la funcionalidad MMX con el mismo hardware que admite conjuntos de instrucciones SSE mucho más amplios.

Referencias

  1. ^ Kuck, David (1978). Computadoras y Computaciones, Vol 1 . John Wiley & Sons, Inc. pág. 12.ISBN _ 978-0471027164.
  2. ^ ab Willhalm, Thomas; Dementiev, romano; Fay, Patrick (18 de diciembre de 2014). "Intel Performance Counter Monitor: una mejor manera de medir la utilización de la CPU". software.intel.com . Archivado desde el original el 22 de febrero de 2017 . Consultado el 17 de febrero de 2015 .
  3. ^ Reagan, Gerard (2008). Una breve historia de la informática. Saltador. pag. 66.ISBN _ 978-1848000834. Consultado el 26 de noviembre de 2014 .
  4. ^ Weik, Martín H. (1955). "Una encuesta sobre los sistemas informáticos digitales electrónicos nacionales". Laboratorio de Investigaciones Balísticas . Archivado desde el original el 26 de enero de 2021 . Consultado el 15 de noviembre de 2020 .
  5. ^ ab Weik, Martin H. (1961). "Una tercera encuesta sobre los sistemas informáticos digitales electrónicos nacionales". Sitio web de misiles Nike de Ed Thelen . Laboratorio de Investigaciones Balísticas . Archivado desde el original el 11 de septiembre de 2017 . Consultado el 16 de diciembre de 2005 .
  6. ^ "Poco a poco". Universidad de Haverford. Archivado desde el original el 13 de octubre de 2012 . Consultado el 1 de agosto de 2015 .
  7. ^ Primer borrador de un informe sobre el EDVAC (PDF) (Informe técnico). Escuela Moore de Ingeniería Eléctrica , Universidad de Pensilvania . 1945. Archivado (PDF) desde el original el 9 de marzo de 2021 . Consultado el 31 de marzo de 2018 .
  8. ^ Universidad de Stanford. "La historia moderna de la informática". La Enciclopedia de Filosofía de Stanford . Consultado el 25 de septiembre de 2015 .
  9. ^ "Cumpleaños de ENIAC". La prensa del MIT. 9 de febrero de 2016. Archivado desde el original el 17 de octubre de 2018 . Consultado el 17 de octubre de 2018 .
  10. ^ Enticknap, Nicholas (verano de 1998), "Computing's Golden Jubilee", Resurrection , The Computer Conservation Society (20), ISSN  0958-7403, archivado desde el original el 17 de marzo de 2019 , recuperado 26 de junio 2019
  11. ^ "El Manchester Mark 1". La Universidad de Manchester . Archivado desde el original el 25 de enero de 2015 . Consultado el 25 de septiembre de 2015 .
  12. ^ "La primera generación". Museo de Historia de la Computación. Archivado desde el original el 22 de noviembre de 2016 . Consultado el 29 de septiembre de 2015 .
  13. ^ "La Historia del Circuito Integrado". Premio Nobel.org . Archivado desde el original el 22 de mayo de 2022 . Consultado el 17 de julio de 2022 .
  14. ^ Turley, Jim (11 de agosto de 2003). "Motorización con microprocesadores". Incorporado. Archivado desde el original el 14 de octubre de 2022 . Consultado el 26 de diciembre de 2022 .
  15. ^ "Guía de procesadores móviles - Verano de 2013". Autoridad de Android. 2013-06-25. Archivado desde el original el 17 de noviembre de 2015 . Consultado el 15 de noviembre de 2015 .
  16. ^ "Sección 250: Microprocesadores y juguetes: Introducción a los sistemas informáticos". La Universidad de Michigan. Archivado desde el original el 13 de abril de 2021 . Consultado el 9 de octubre de 2018 .
  17. ^ "Procesador ARM946". BRAZO. Archivado desde el original el 17 de noviembre de 2015.
  18. ^ "Konrad Zuse". Museo de Historia de la Computación. Archivado desde el original el 3 de octubre de 2016 . Consultado el 29 de septiembre de 2015 .
  19. ^ "Cronología de la historia de la informática: computadoras". Museo de Historia de la Computación. Archivado desde el original el 29 de diciembre de 2017 . Consultado el 21 de noviembre de 2015 .
  20. ^ Blanco, Esteban. "Una breve historia de la informática: computadoras de primera generación". Archivado desde el original el 2 de enero de 2018 . Consultado el 21 de noviembre de 2015 .
  21. ^ "Unidad perforadora de cinta de papel Mark I de la Universidad de Harvard". Museo de Historia de la Computación. Archivado desde el original el 22 de noviembre de 2015 . Consultado el 21 de noviembre de 2015 .
  22. ^ "¿Cuál es la diferencia entre una arquitectura de von Neumann y una arquitectura de Harvard?". BRAZO. Archivado desde el original el 18 de noviembre de 2015 . Consultado el 22 de noviembre de 2015 .
  23. ^ "La arquitectura avanzada optimiza la CPU Atmel AVR". Atmel. Archivado desde el original el 14 de noviembre de 2015 . Consultado el 22 de noviembre de 2015 .
  24. ^ "Interruptores, transistores y relés". BBC. Archivado desde el original el 5 de diciembre de 2016.
  25. ^ "Presentación del transistor de vacío: un dispositivo hecho de la nada". Espectro IEEE . 2014-06-23. Archivado desde el original el 23 de marzo de 2018 . Consultado el 27 de enero de 2019 .
  26. ^ ¿ Qué es el rendimiento de la computadora? Prensa de las Academias Nacionales. 2011. doi : 10.17226/12980. ISBN 978-0-309-15951-7. Archivado desde el original el 5 de junio de 2016 . Consultado el 16 de mayo de 2016 .
  27. ^ "1953: Surgen las computadoras transistorizadas". Museo de Historia de la Computación . Archivado desde el original el 1 de junio de 2016 . Consultado el 3 de junio de 2016 .
  28. ^ "Fechas y características del sistema IBM/360". IBM. 2003-01-23. Archivado desde el original el 21 de noviembre de 2017 . Consultado el 13 de enero de 2016 .
  29. ^ ab Amdahl, gerente general ; Blaauw, Georgia ; Brooks, FP Jr. (abril de 1964). "Arquitectura del IBM System/360". Revista IBM de investigación y desarrollo . IBM . 8 (2): 87-101. doi :10.1147/rd.82.0087. ISSN  0018-8646.
  30. ^ Brodkin, John (7 de abril de 2014). "Hace 50 años, IBM creó una computadora central que ayudó a enviar hombres a la Luna". Ars Técnica . Archivado desde el original el 8 de abril de 2016 . Consultado el 9 de abril de 2016 .
  31. ^ Clarke, Gavin. "¿Por qué no vas a MORIR? El S/360 de IBM y su legado a los 50". El registro . Archivado desde el original el 24 de abril de 2016 . Consultado el 9 de abril de 2016 .
  32. ^ "Página de inicio de PDP-8 en línea, ejecutar un PDP-8". PPD8 . Archivado desde el original el 11 de agosto de 2015 . Consultado el 25 de septiembre de 2015 .
  33. ^ "Transistores, relés y control de cargas de alta corriente". Universidad de Nueva York . ITP Computación Física. Archivado desde el original el 21 de abril de 2016 . Consultado el 9 de abril de 2016 .
  34. ^ Lilly, Paul (14 de abril de 2009). "Una breve historia de las CPU: 31 años increíbles de x86". Jugador de PC . Archivado desde el original el 13 de junio de 2016 . Consultado el 15 de junio de 2016 .
  35. ^ ab Patterson, David A.; Hennessy, John L.; Larus, James R. (1999). Organización y diseño de computadoras: la interfaz hardware/software (tercera impresión de la 2ª ed.). San Francisco, California: Kaufmann. pag. 751.ISBN _ 978-1558604285.
  36. ^ "1962: Los sistemas aeroespaciales son las primeras aplicaciones de los circuitos integrados en las computadoras". Museo de Historia de la Computación . Archivado desde el original el 5 de octubre de 2018 . Consultado el 9 de octubre de 2018 .
  37. ^ "Los circuitos integrados en el programa de alunizaje tripulado Apolo". Administración Nacional de Aeronáutica y Espacio. Archivado desde el original el 21 de julio de 2019 . Consultado el 9 de octubre de 2018 .
  38. ^ "Anuncio del sistema/370". Archivos de IBM . 2003-01-23. Archivado desde el original el 20 de agosto de 2018 . Consultado el 25 de octubre de 2017 .
  39. ^ "System/370 Modelo 155 (Continuación)". Archivos de IBM . 2003-01-23. Archivado desde el original el 20 de julio de 2016 . Consultado el 25 de octubre de 2017 .
  40. ^ "Modelos y opciones". La Corporación de Equipos Digitales PDP-8. Archivado desde el original el 26 de junio de 2018 . Consultado el 15 de junio de 2018 .
  41. ^ Bassett, Ross Knox (2007). Hacia la era digital: laboratorios de investigación, empresas de nueva creación y el auge de la tecnología MOS. Prensa de la Universidad Johns Hopkins . págs. 127-128, 256 y 314. ISBN 978-0-8018-6809-2.
  42. ^ ab Comisario, Ken. "Texas Instruments TMX 1795: el primer microprocesador olvidado". Archivado desde el original el 26 de enero de 2021.
  43. ^ "Velocidad y potencia en familias lógicas". Archivado desde el original el 26 de julio de 2017 . Consultado el 2 de agosto de 2017 ..
  44. ^ Stonham, TJ (1996). Técnicas de lógica digital: principios y práctica. Taylor y Francisco. pag. 174.ISBN _ 9780412549700.
  45. ^ "1968: Tecnología Silicon Gate desarrollada para circuitos integrados". Museo de Historia de la Computación . Archivado desde el original el 29 de julio de 2020 . Consultado el 16 de agosto de 2019 .
  46. ^ Booher, RK (1968). Computadora MOS GP (PDF) . Taller internacional sobre gestión del conocimiento de requisitos. AFIPS . pag. 877. doi :10.1109/AFIPS.1968.126. Archivado (PDF) desde el original el 14 de julio de 2017.
  47. ^ "Descripciones del módulo LSI-11". Manual de usuario LSI-11, PDP-11/03 (PDF) (2ª ed.). Maynard, Massachusetts: Corporación de equipos digitales . Noviembre de 1975. p. 4-3. Archivado (PDF) desde el original el 10 de octubre de 2021 . Consultado el 20 de febrero de 2015 .
  48. ^ Bigelow, Stephen J. (marzo de 2022). "¿Qué es un procesador multinúcleo y cómo funciona?". Objetivo tecnológico. Archivado desde el original el 11 de julio de 2022 . Consultado el 17 de julio de 2022 .
  49. ^ Birkby, Richard. "Una breve historia del microprocesador". computermuseum.li . Archivado desde el original el 23 de septiembre de 2015 . Consultado el 13 de octubre de 2015 .
  50. ^ Osborne, Adán (1980). Introducción a las microcomputadoras. vol. 1: Conceptos básicos (2ª ed.). Berkeley, California: Osborne-McGraw Hill. ISBN 978-0-931988-34-9.
  51. ^ Zhislina, Victoria (19 de febrero de 2014). "¿Por qué ha dejado de crecer la frecuencia de la CPU?". Intel. Archivado desde el original el 21 de junio de 2017 . Consultado el 14 de octubre de 2015 .
  52. ^ "Transistor MOS: ingeniería eléctrica e informática" (PDF) . Universidad de California. Archivado (PDF) desde el original el 9 de octubre de 2022 . Consultado el 14 de octubre de 2015 .
  53. ^ Simonita, Tom. "La ley de Moore ha muerto. ¿Y ahora qué?". Revisión de tecnología del MIT . Archivado desde el original el 22 de agosto de 2018 . Consultado el 24 de agosto de 2018 .
  54. ^ Moore, Gordon (2005). "Extractos de una conversación con Gordon Moore: la ley de Moore" (PDF) (Entrevista). Intel. Archivado desde el original (PDF) el 29 de octubre de 2012 . Consultado el 25 de julio de 2012 .
  55. ^ "Una historia detallada del procesador". Adicto a la tecnología. 15 de diciembre de 2016. Archivado desde el original el 14 de agosto de 2019 . Consultado el 14 de agosto de 2019 .
  56. ^ Eigenmann, Rudolf; Lilja, David (1998). "Computadoras von Neumann". Enciclopedia Wiley de ingeniería eléctrica y electrónica . doi :10.1002/047134608X.W1704. ISBN 047134608X. S2CID  8197337.
  57. ^ Aspray, William (septiembre de 1990). "El concepto de programa almacenado". Espectro IEEE . vol. 27, núm. 9. pág. 51. doi : 10.1109/6.58457.
  58. ^ Saraswat, Krishna. "Tendencias en tecnología de circuitos integrados" (PDF) . Archivado desde el original (PDF) el 24 de julio de 2015 . Consultado el 15 de junio de 2018 .
  59. ^ "Electromigración". Universidad Tecnica del Medio Este. Archivado desde el original el 31 de julio de 2017 . Consultado el 15 de junio de 2018 .
  60. ^ Wienand, Ian (3 de septiembre de 2013). "Ciencias de la Computación desde abajo hacia arriba, Capítulo 3. Arquitectura de computadoras" (PDF) . bottomupcs.com . Archivado (PDF) desde el original el 6 de febrero de 2016 . Consultado el 7 de enero de 2015 .
  61. ^ "Introducción de la Unidad de Control y su Diseño". Geeks para Geeks . 2018-09-24. Archivado desde el original el 15 de enero de 2021 . Consultado el 12 de enero de 2021 .
  62. ^ Van Berkel, Cornelis; Meuwissen, Patrick (12 de enero de 2006). "Unidad de generación de direcciones para un procesador (solicitud de patente US 2006010255 A1)". google.com . Archivado desde el original el 18 de abril de 2016 . Consultado el 8 de diciembre de 2014 .[ se necesita verificación ]
  63. ^ Torres, Gabriel (12 de septiembre de 2007). "Cómo funciona la memoria caché". Secretos de hardware . Consultado el 29 de enero de 2023 .
  64. ^ "Introducción técnica de IBM z13 e IBM z13s" (PDF) . IBM . Marzo de 2016. pág. 20. Archivado (PDF) desde el original el 9 de octubre de 2022.[ se necesita verificación ]
  65. ^ Marrón, Jeffery (2005). "Diseño de CPU personalizado para aplicaciones". IBM DeveloperWorks. Archivado desde el original el 12 de febrero de 2006 . Consultado el 17 de diciembre de 2005 .
  66. ^ Martín, AJ; Nystrom, M.; Wong, CG (noviembre de 2003). "Tres generaciones de microprocesadores asíncronos". Diseño y prueba de computadoras IEEE . 20 (6): 9–17. doi :10.1109/MDT.2003.1246159. ISSN  0740-7475. S2CID  15164301. Archivado desde el original el 3 de diciembre de 2021 . Consultado el 5 de enero de 2022 .
  67. ^ Garside, JD; Furber, SB; Chung, SH (1999). "AMULET3 revelado". Actas, Quinto Simposio Internacional sobre Investigación Avanzada en Circuitos y Sistemas Asíncronos . Departamento de Ciencias de la Computación de la Universidad de Manchester . doi :10.1109/ASYNC.1999.761522. Archivado desde el original el 10 de diciembre de 2005.
  68. ^ Características funcionales de IBM System/360 modelo 65 (PDF) . IBM . Septiembre de 1968. págs. 8–9. A22-6884-3. Archivado (PDF) desde el original el 9 de octubre de 2022.
  69. ^ Huynh, Jack (2003). "El procesador AMD Athlon XP con caché L2 de 512 KB" (PDF) . Urbana – Champaign, Illinois: Universidad de Illinois. págs. 6-11. Archivado desde el original (PDF) el 28 de noviembre de 2007 . Consultado el 6 de octubre de 2007 .
  70. ^ Gottlieb, Allan; Almasi, George S. (1989). Computación altamente paralela. Redwood City, California: Benjamín/Cummings. ISBN 978-0-8053-0177-9. Archivado desde el original el 7 de noviembre de 2018 . Consultado el 25 de abril de 2016 .
  71. ^ Flynn, MJ (septiembre de 1972). "Algunas organizaciones informáticas y su eficacia". Transacciones IEEE en computadoras . C-21 (9): 948–960. doi :10.1109/TC.1972.5009071. S2CID  18573685.
  72. ^ Lu, N.-P.; Chung, C.-P. (1998). "Explotación del paralelismo en multiprocesamiento superescalar". Actas de la IEE: Computadoras y técnicas digitales . 145 (4): 255. doi :10.1049/ip-cdt:19981955.
  73. ^ Uhsadel, Leif; Georges, Andy; Verbauwhede, Ingrid (agosto de 2008). Explotación de los contadores de rendimiento del hardware. 2008 V Taller sobre Diagnóstico de Fallas y Tolerancia en Criptografía. págs. 59–67. doi :10.1109/FDTC.2008.19. ISBN 978-0-7695-3314-8. S2CID  1897883. Archivado desde el original el 30 de diciembre de 2021 . Consultado el 30 de diciembre de 2021 .
  74. ^ Rohou, Erven (septiembre de 2012). Tiptop: contadores de rendimiento de hardware para las masas. 2012 41ª Conferencia Internacional sobre Talleres de Procesamiento Paralelo. págs. 404–413. doi :10.1109/ICPPW.2012.58. ISBN 978-1-4673-2509-7. S2CID  16160098. Archivado desde el original el 30 de diciembre de 2021 . Consultado el 30 de diciembre de 2021 .
  75. ^ Herat, Nishad; Fogh, Anders (2015). "Contadores de rendimiento del hardware de la CPU para seguridad" (PDF) . Estados Unidos: Sombrero Negro. Archivado (PDF) desde el original el 5 de septiembre de 2015.
  76. ^ DeRose, Luiz A. (2001), Sakellariou, Rizos; Gurd, John; Hombre libre, Len; Keane, John (eds.), "The Hardware Performance Monitor Toolkit", Procesamiento paralelo Euro-Par 2001 , Apuntes de conferencias sobre informática, Berlín, Heidelberg: Springer Berlin Heidelberg, vol. 2150, págs. 122-132, doi :10.1007/3-540-44681-8_19, ISBN 978-3-540-42495-6, archivado desde el original el 1 de marzo de 2023 , consultado el 30 de diciembre de 2021
  77. ^ Anjum, Bushra; Perros, Harry G. (2015). "1: Partición del presupuesto de QoS de un extremo a otro en dominios". "Asignación de ancho de banda para vídeo bajo restricciones de calidad de servicio ". Serie de enfoque. John Wiley e hijos. pag. 3.ISBN _ 9781848217461. Consultado el 21 de septiembre de 2016 . [...] computación en la nube donde múltiples componentes de software se ejecutan en un entorno virtual en el mismo blade, un componente por máquina virtual (VM). A cada VM se le asigna una unidad de procesamiento central virtual [...] que es una fracción de la CPU del blade.
  78. ^ Fifield, Tom; Fleming, Diane; Gentil, Ana; Hochstein, Lorin; Proulx, Jonathan; Toews, Everett; Topjian, Joe (2014). "Glosario". Guía de operaciones de OpenStack . Beijing: O'Reilly Media, Inc. p. 286.ISBN _ 9781491906309. Consultado el 20 de septiembre de 2016 . Unidad central de procesamiento virtual (vCPU)[:] Subdivide las CPU físicas. Luego, las instancias pueden usar esas divisiones.
  79. ^ "Descripción general de la arquitectura de infraestructura de VMware: informe técnico" (PDF) . VMware . 2006. Archivado (PDF) desde el original el 9 de octubre de 2022.
  80. ^ "Frecuencia de la CPU". Glosario mundial de CPU . Mundo de la CPU. 25 de marzo de 2008. Archivado desde el original el 9 de febrero de 2010 . Consultado el 1 de enero de 2010 .
  81. ^ "¿Qué es (un) procesador multinúcleo?". Definiciones de centro de datos . SearchDataCenter.com. Archivado desde el original el 5 de agosto de 2010 . Consultado el 8 de agosto de 2016 .
  82. ^ Mlblevins (8 de abril de 2010). "Cuádruple núcleo frente a doble núcleo". Con espíritu tecnológico . Archivado desde el original el 4 de julio de 2019 . Consultado el 7 de noviembre de 2019 .
  83. ^ Marcin, Wieclaw (12 de enero de 2022). "Factores que afectan el rendimiento de los procesadores multinúcleo". Sitio de PC .
  84. ^ Tegtmeier, Martín. "Explicación de la utilización de CPU de arquitecturas multiproceso". Oráculo. Archivado desde el original el 18 de julio de 2022 . Consultado el 17 de julio de 2022 .

enlaces externos