Ahora se puede escribir la ecuación básica de las prestaciones en términos del
número de instrucciones (número de instrucciones ejecutadas por el programa), del CPI y del tiempo de ciclo:
o bien, dado que la frecuencia es el inverso del tiempo de ciclo:
Estas fórmulas son especialmente útiles porque distinguen los tres factores claves que influyen en las prestaciones. Estas fórmulas se pueden utilizar para comparar dos realizaciones diferentes o para evaluar un diseño alternativo si se conoce el impacto en estos tres parámetros.
Comparación de segmentos de código
Un diseñador de compiladores está intentando decidir entre dos secuencias de código para una máquina en particular. Los diseñadores del hardware le han proporcionado los siguientes datos:
Para una declaración particular de un lenguaje de alto nivel, el diseñador del compilador está considerando dos secuencias de código que requieren el si- guiente número de instrucciones:
¿Qué secuencia de código ejecuta el mayor número de instrucciones? ¿Cuál será la más rápida? ¿Cuál es el CPI para cada secuencia?
Número de instruccio- nes:número de instruc- ciones ejecutadas por el programa.
Tiempo de ejecución= Número de instrucciones×CPI×Tiempo de ciclo
Tiempo de ejecución Número de instrucciones×CPI
Frecuencia de reloj --- =
EJEMPLO
CPI para instrucciones de esta clase
A B C
CPI 1 2 3
Total de instrucciones por clase Secuencia
de código A B C
1 2 1 2
36 Capítulo 1 Abstracciones y tecnología de los computadores
La secuencia 1 ejecuta 2 + 1 + 2 = 5 instrucciones. La secuencia 2 ejecuta 4 + 1 + 1 = 6 instrucciones. Por lo tanto la secuencia 1 ejecuta el menor nú- mero de instrucciones.
Se puede usar la ecuación para los ciclos de reloj de la CPU basada en el número de instrucciones y el CPI para encontrar el número total de ciclos para cada secuencia:
Y se obtiene
Por lo tanto, la segunda secuencia de código es más rápida, aun cuando ejecuta una instrucción más. Debido a que la secuencia de código 2 necesita menos ciclos totales, pero tiene más instrucciones, debe tener un CPI menor. Los valores del CPI pueden ser calculados así:
La figura 1.14 muestra las medidas básicas a diferentes niveles del com- putador y lo que está siendo medido en cada caso. Se puede ver cómo se combinan estos factores para obtener el tiempo de ejecución medido en segundos
Se ha de tener siempre en cuenta que la única medida completa y fia- ble de las prestaciones de un computador es el tiempo. Por ejemplo, cam- biar el repertorio de instrucciones para disminuir el número total de las mismas podría llevar a una organización con un ciclo de reloj mayor que contrarrestara la mejora en el número de instrucciones. Igualmente, ya que el CPI depende de la mezcla de instrucciones, el código que ejecuta el menor número de instrucciones podría no ser el más rápido.
RESPUESTA
Ciclos de reloj de la CPU (CPIi×Ci) i=1
n
∑
=
Ciclos de reloj de la CPU1= (2×1)+(1×2)+(2×3) = 2+2+6 = 10 ciclos Ciclos de reloj de la CPU2= (4×1)+(1×2)+(1×3) = 4+2+3 = 9 ciclos
CPI Ciclos de reloj de la CPU
Número de instrucciones
---
=
CPI1 Ciclos de reloj de la CPU1 Número de instrucciones1 --- = 10 5 --- 2 = =
CPI2 Ciclos de reloj de la CPU2 Número de instrucciones2 --- = 9 6 --- 1.5 = =
IDEA
clave
Tiempo Segundos Programa --- Instrucciones Programa --- = Ciclos de reloj Instrucción --- Segundos Ciclo de reloj --- × × =1.4 Prestaciones 37
¿Cómo podemos determinar el valor de estos factores en la ecuación de las prestaciones? El tiempo de CPU se puede medir ejecutando un programa, y el tiempo de ciclo normalmente forma parte de la documentación de una máquina. El número de instrucciones y el CPI pueden ser más difíciles de obtener. Eviden- temente, si la frecuencia de reloj y el tiempo de ejecución de CPU son conocidos, sólo necesitaremos conocer o el número de instrucciones, o el CPI, para determi- nar el otro parámetro que falta.
El número de instrucciones se puede determinar utilizando herramientas que analizan la ejecución o usando un simulador de la arquitectura. Alternativamente, se pueden usar contadores hardware, los cuales forman parte de la mayoría de los procesadores con el objetivo de guardar una gran variedad de medidas, incluido el número de instrucciones ejecutadas por el programa, el CPI medio y, a menudo, las fuentes de pérdida de prestaciones. Ya que el número de instrucciones depende de la arquitectura, pero no de la implementación exacta, se puede medir el número de instrucciones sin conocer todos los detalles sobre la implementa- ción. Sin embargo, el CPI depende de una amplia variedad de detalles del diseño de la máquina, que incluyen tanto el sistema de memoria como la estructura del procesador (como se verá en los capítulos 4 y 5), así como de la mezcla de tipos de instrucciones ejecutadas en una aplicación. Por lo tanto, el CPI varía según la aplicación, así como entre las diferentes realizaciones con el mismo repertorio de instrucciones.
El ejemplo anterior muestra el peligro de usar un solo factor (número de ins- trucciones) para evaluar las prestaciones. Cuando se comparan dos máquinas, se deben considerar los tres componentes, los cuales se combinan para formar el tiempo de ejecución. Si algunos de los factores son idénticos, como la frecuencia de reloj en el ejemplo anterior, las prestaciones pueden determinarse comparando los factores diferentes. Ya que la mezcla de instrucciones modifica el CPI, tanto éste como el número de instrucciones deben ser comparados, aunque las frecuen- cias de reloj sean idénticas. En varios ejercicios se le pedirá que estudie una serie de mejoras en el computador y el compilador que afectan a la frecuencia de reloj, el CPI y el número de instrucciones. En la sección 1.8 se examinará una medida de las prestaciones habitual que no incorpora todos los términos y que por lo tanto puede inducir a error.
Componentes de las prestaciones Unidades de medida
Tiempo de ejecución de CPU de un programa Segundos por programa
Número de instrucciones Número de instrucciones ejecutadas por el programa Ciclos por instrucción (CPI) Número medio de ciclos por instrucción
Tiempo de ciclo del reloj Segundos por ciclo de reloj
FIGURA 1.14 Componentes básicos de las prestaciones y cómo se mide cada uno de ellos.
Mezcla de instruccio- nes:medida de la fre- cuencia dinámica de las instrucciones a lo largo de uno o varios programas.
38 Capítulo 1 Abstracciones y tecnología de los computadores
Extensión: Aunque se podría esperar que el valor mínimo para el CPI es 1, como
veremos en el capítulo 4, algunos procesadores buscan y ejecutan varias instrucciones en cada ciclo de reloj; para reflejar este hecho, alguno diseñadores invierten el CPI para obtener el IPC, instrucciones por ciclo. Si un procesador ejecuta una media de 2 instrucciones por ciclo, el IPC es 2 y, por lo tanto, el CPI es 0.5.
Autoevaluación
Una aplicación dada escrita en Java se ejecuta durante 15 segundos en un procesa- dor. Se dispone de un nuevo compilador Java que requiere 0.6 de las instrucciones que necesitaba el viejo compilador. Desafortunadamente, el CPI se incrementa en 1.1. ¿Cuánto tardará la aplicación en ejecutarse utilizando el nuevo compilador?a. b. c.
Comprender
las prestaciones
de los programas
Las prestaciones de un programa depende del algoritmo, del lenguaje, del compilador, de la arquitectura y del hardware real. La siguiente tabla resume de qué manera estos componentes afectan a los distintos factores de la ecuación de las prestaciones.
Componente hardware o
software ¿A qué afecta? ¿Cómo?
Algoritmo Número de instrucciones, posiblemente CPI
El algoritmo determina el número de instrucciones del programa fuente ejecutadas y por lo tanto el número de instrucciones del procesador ejecutadas. El algoritmo puede también afectar al CPI, favoreciendo instrucciones más lentas o más rápidas. Por ejemplo, si el algoritmo utiliza más operaciones en punto flotante, tenderá a tener un mayor CPI.
Lenguaje de programación
Número de instrucciones, CPI
El lenguaje de programación afecta al número de instrucciones, ya que las sentencias del lenguaje son traducidas a
instrucciones del procesador, lo cual determina el número de instrucciones. Las características del lenguaje también pueden afectar al CPI; por ejemplo, un lenguaje con soporte para datos abstractos (p. ej. Java) requerirá llamadas indirectas, las cuales utilizarán instrucciones con un CPI mayor. Compilador Número de
instrucciones, CPI
La eficiencia del compilador afecta tanto al número de instrucciones como al promedio de los ciclos por instrucción, ya que el compilador determina la traducción de las instrucciones del lenguaje fuente a instrucciones del computador. El papel del compilador puede ser muy complejo y afecta al CPI de formas complejas.
Arquitectura del repertorio de instrucciones Número de instrucciones, frecuencia de reloj, CPI
La arquitectura del repertorio de instrucciones afecta a los tres aspectos de las prestaciones de la CPU, ya que afecta a las instrucciones necesarias para realizar una función, al coste en ciclos de cada instrucción, y a la frecuencia del reloj del procesador. 15 0.6× 1.1 --- = 8.2 s2 15 0.6 1.1× × = 9.9 s2 15 1.1× 0.6 --- = 27.5 s2
1.5 El muro de la potencia 39
La figura 1.15 ilustra el incremento en la frecuencia de reloj y el consumo de potencia de ocho generaciones de microprocesadores de Intel en los últimos 25 años. Tanto la frecuencia de reloj como el consumo de potencia crecieron de forma rápida durante décadas, y de forma más moderada recientemente. La razón de este crecimiento conjunto es que están correlacionados, y la razón de un creci- miento moderado más recientemente es que se han alcanzado los límites prácticos de disipación de potencia en los microprocesadores corrientes.
La tecnología dominante en la fabricación de circuitos integrados es la tecnología CMOS (complementary metal oxide semiconductor). En CMOS, la fuente principal de disipación de potencia es la llamada potencia dinámica; es decir, potencia consumida en las transiciones. La disipación de potencia dinámica depende de la carga capacitiva de cada transistor, del voltaje aplicado y de la frecuencia de conmutación del transistor:
Potencia = carga capacitiva × voltaje2 × frecuencia de conmutación
La frecuencia de conmutación depende de la frecuencia de la señal de reloj. La carga capacitiva por transistor es una función del número de transistores conecta- dos a una salida (llamado fanout) y de la tecnología, que determina la capacitancia de las conexiones y los transistores.
¿Cómo es posible que la frecuencia de la señal de reloj crezca un factor 1000 mien- tras la potencia crece sólo un factor 30? La potencia puede reducirse disminuyendo el voltaje, algo que ha ocurrido con cada nueva generación de la tecnología, ya que depende de forma cuadrática del voltaje. Típicamente, el voltaje se ha reducido un
1.5
El muro de la potencia
1.5FIGURA 1.15 Variación de la frecuencia de reloj y la potencia en las últimas 8 genera- ciones en 25 años de microprocesadores x86. La arquitectura Pentium 4 dio un salto muy impor- tante en la frecuencia de reloj y la potencia, pero menos importante en las prestaciones. La línea Pentium 4 se abandonó debido a los problemas térmicos del Prescott. La línea Core 2 vuelve a una segmentación más simple con frecuencias de reloj más bajas y varios procesadores por chip.
2667 12.5 16 2000 200 66 25 3600 75.3 95 29.1 10.1 4.9 4.1 3.3 103 1 10 100 1000 10000 6 8 2 0 8 ) 2 8 9 1( 6 8 3 0 8 ) 5 8 9 1( 6 8 4 0 8 ) 9 8 9 1( m uit n e P ) 3 9 9 1( m uit n e P ) 7 9 9 1( or P 4 m uit n e P ett e m alli W ) 1 0 0 2( 4 m uit n e P tt o c s er P ) 4 0 0 2( 2 er o C dl eif st n e K ) 7 0 0 2( F recuencia de reloj (MHz) 0 20 40 60 80 100 120 P otencia (V atios) Frecuencia de reloj Potencia
40 Capítulo 1 Abstracciones y tecnología de los computadores
15% con cada nueva generación. En 20 años, el voltaje ha disminuido desde 5V a 1V; este el motivo que explica que la potencia sólo se haya incrementado 30 veces.
El problema actualmente es que disminuciones adicionales en el voltaje hacen que el transistor tenga demasiadas fugas, como grifos de agua que no cierran per- fectamente. Hoy en día, aproximadamente el 40% del consumo de potencia es debido a la fuga de corriente. Si las pérdidas de los transistores continuasen cre- ciendo, el proceso completo se volvería difícil de controlar.
En un intento de afrontar el problema de la potencia, los diseñadores ya han ado- sado grandes dispositivos para incrementar la refrigeración, y las partes del chip que no se utilizan en un ciclo de reloj determinado se apagan. Aunque hay otras técnicas para refrigerar los chips y, en consecuencia, aumentar la potencia, por ejemplo a 300 W, estas son demasiado caras para poder ser incluidas en los computadores de sobremesa. Desde que los diseñadores de computadores se encontraron con el muro de la potencia, han necesitado una nueva forma de afrontarlo. Han elegido una forma de diseñar los microprocesadores diferente de la que se utilizó en los primeros 30 años.
Extensión: Aunque la potencia dinámica es la principal fuente de disipación de
potencia en CMOS, hay una disipación estática debida a las fugas de corriente que se producen incluso cuando el transistor está inactivo. Como se ha mencionado anterior- mente, en 2008, la fuga de corriente es la responsable del 40% de la disipación de potencia. De este modo, un aumento en el número de transistores aumenta la poten- cia disipada, incluso si los transistores estuviesen siempre inactivos. Se están empleando diversas técnicas e innovaciones tecnológicas para controlar la fuga de corriente, pero es difícil, conseguir disminuciones adicionales del voltaje.
Potencia relativa
Supongamos que desarrollamos un nuevo procesador más sencillo, cuya carga capacitiva es el 85% de la carga de un procesador anterior más complejo. Supon- gamos, además, que el voltaje es ajustable de modo que puede reducirse en un 15% respecto al procesador anterior, lo que ocasiona una disminución del 15% en la frecuencia de la señal de reloj. ¿Cuál es el impacto en la potencia dinámica?
Así, la relación de potencias es
0.854 = 0.52
Por lo tanto, el nuevo procesador utiliza aproximadamente la mitad de po- tencia que el procesador antiguo.
EJEMPLO
RESPUESTA
PotencianuevoPotenciaantiguo --- =
carga capacitiva×0.85
( )×(voltaje×0.85)2×(frecuencia×0.85)
carga capacitiva×voltaje2×fremcuencia
---
1.6 El gran cambio: el paso de monoprocesadores a multiprocesadores 41
El muro de potencia ha forzado un cambio dramático en el diseño de micropro- cesadores. La figura 1.16 muestra la mejora en el tiempo de respuesta de progra- mas para microprocesadores de computadores de sobremesa en los últimos años. Desde 2002, el factor de aumento ha disminuido desde un factor 1.5 por año hasta un factor menor que 1.2 por año.
En lugar de continuar con la reducción del tiempo de respuesta de un único pro- grama ejecutándose en un único procesador, desde 2006 todas las compañías de com- putadores personales y servidores están incorporando microprocesadores con varios procesadores por chip, con los cuales el beneficio es, a menudo, más patente en la pro- ductividad que en el tiempo de respuesta. Para eliminar la confusión entre las palabras procesador y microprocesador, los fabricantes utilizan el término “núcleo (core)” para referirse a un procesador, y a estos microprocesadores se les denomina habitualmente microprocesadores multinúcleo (multicore). Así, un microprocesador quadcore, es un chip que contiene cuatro procesadores o cuatro núcleos.
La figura 1.17 muestra el número de procesadores (núcleos), potencia y fre- cuencias de reloj de varios microprocesadores recientes. La previsión de muchos fabricantes es doblar el número de núcleos por microprocesador en cada genera- ción de tecnología de semiconductores, es decir, cada dos años (véase capítulo 7). En el pasado, los programadores contaban con las innovaciones en el hardware, la arquitectura y los compiladores para doblar las prestaciones de sus programas cada 18 meses sin tener que cambiar ninguna línea de código. En la actualidad, para obtener mejoras significativas en tiempos de respuesta, los programadores deben reescribir sus programas para extraer las ventajas de disponer de múltiples procesa- dores. Además, para alcanzar los beneficios históricos de ejecuciones más rápidas en nuevos microprocesadores, los programadores tendrán que continuar mejorando las prestaciones de sus códigos a medida que el número de núcleos de duplica.
Para enfatizar la manera en que hardware y software cooperan, a lo largo del libro usamos la sección especial interfaz hardware/software, la primera de las cuales se incluye a continuación. Estos elementos resumen visiones importantes de esta interfaz crítica.
1.6
El gran cambio: el paso de
monoprocesadores a multiprocesadores
1.6Hasta ahora, la mayor parte del software ha sido como la música escrita para un solista; con la actual generación de
microprocesadores, esta-
mos teniendo una pequeña experiencia con duetos y cuartetos y con otros grupos de pocos intérpretes; pero conse- guir un trabajo para una gran orquesta y un coro es un reto diferente.
Brian Hayes, Computing in a Parallel Universe, 2007.
El paralelismo siempre ha sido un elemento crítico para las prestaciones en computa- ción, pero a menudo ha estado oculto. El capítulo 4 aborda la segmentación, una técnica elegante que permite ejecutar más rápidamente los programas mediante el solapamiento de la ejecución de las instrucciones. Este es un ejemplo del paralelismo a nivel de instruc- ciones, donde la naturaleza paralela del hardware está tan oculta que el programador y el compilador creen que el hardware ejecuta las instrucciones secuencialmente.
Conseguir que los programadores estén pendientes del hardware paralelo y rees- criban sus programas explícitamente para ser paralelos había sido la “tercera vía” de la arquitectura de computadores, para aquellas compañías que el pasado depen- dieron de este cambio de conducta fallido (véase sección 7.14 en el CD). Desde esta perspectiva histórica, resulta asombroso que la industria de las Tecnologías de la