Está en la página 1de 15
a2 ORGANIZACION DE LOS SISTEMAS DE COMPUTADORA cal 2.1.2. EJECUCION DE INSTRUCCIONES Ji6n en una serie de pasos pequefios. A grandes rasgos, los pas La CPU ejecuta cada instru son los siguientes: 1. Buscar la siguiente instruccién de la memoria y colocarla en el registro de instru ciones. Moditicar el contador de programa de modo que apunte a la siguiente instrucci¢ Determinar el tipo de la instruccién que se trajo. Si la instrucci6n utiliza una palabra de la memoria, determinar dénde est Buscar la palabra, si es necesario, y colocarla en un registro de la CPU Ejecutar la instruccién. Volver al paso 1 para comenzar a ejecutar la siguiente instruccién, Esta sucesién de pasos se conoce como el ciclo de bisqueda-decodificacién-ejecu es fundamental para el funcionamiento de todas las computadoras. Esta descripcidn de eémo funciona una CPU se parece mucho a un programa escrito espafiol. La figura 2-3 muestra este programa informal reescrito como método Java (0 s procedimiento) llamado interpretar. La maquina que se esti interpretando tiene dos regist aque los programas de usuario pueden ver: el contador de programa (PC), para seguit la pi a la direcci6n de la siguiente instrucci6n que debe buscarse, y el acumulador (AC), p acumular resultados aritméticos. También tiene registros internos para retener la instruce en curso durante su ejecucién (instr), el tipo de la instruccién en curso (instr_type) direccién del operando de la instruccién (data_loc) y el operando mismo (data). Se su ne que las instrucciones contienen una sola direccién de memoria. La posicién de meme direccionada contiene el operando; por ejemplo, el dato que debe sumarse al acumulad: El simple hecho de que sea posible escribir un programa capaz de imitar la funci6n tuna CPU demuestra que un programa no tiene que ejecutarse con una CPU de “hardwa gue consista en una caja lena de circuitos. En vez de ello, el programa puede ejecute haciendo que otro programa busque, examine y ejecute sus instrucciones. Un progré (como el de la figura 2-3) que busca, examina y ejecuta las instrucciones de otro program Hama intérprete, como mencionamos en el capitulo 1 Esta equivalencia entre procesadores en hardware ¢ intérpretes tiene importar implicaciones para a organizaci6n de las computadoras y el disefio de los sistemas de com tacién, Después de haber especificado el lenguaje de méquina, L, para una computac nueva, el equipo de diseiio puede decidir si quiere construir un procesador en hardware ejecute directamente los programas en L 0 si prefieren escribir un intérprete que interp programas en L. Si optan por escribir un intérprete, también debersin crear una méquin: hardware que ejecute el intérprete, También son posibles ciertas construcciones hibri public class Interp ( static int PC; 11 contador de programa; contiene dir.de la sig. instruc static int AC; 41 acumulador; registro para efectuar op. aritméticas static int instr; I registro para retener la instruccién en curso static int tipo_instr; J/@\ tipo de instruccién (cédigo de operacién) static int pos_datos; i! a direccién de los datos, 0 ~1 sino hay datos static int datos; JI contiene el operando en curso static boolean bit_ejec true; //bit que puede apagarse para detener la maquina Public static void interpretar(int memorial}, int dir_inicio){ {Este procedimiento interpreta programas para una maquina sencilla cuyas instrucciones ‘tienen un operando en la memoria. La maquina tiene un registro AC (acumulador) que se usa en las operaciones aritméticas. La instruccién ADD suma un entero de la memoria al JAG, por ejemplo. El intérprete contintia ejecutandose hasta que la instruccion HALT ‘! apaga el bit de ejecucién. El estado de un proceso que se ejacuta en esta maquina 1 consiste en la memoria, el contador de programa, ol bitde ejecucién y el AC. Los pardmetros 11 de entrada consisten en la imagen de memoria y la direccion de inicio. PC =dir_inicio: while (bit_ejec) { instr = memorialPC}, /Itraer siguiente instruccién a instr PC=PC+1; iHincrementar contador de programa tipo_instr = obt_tipo_instr(inste); JI determinar tipo de instruccién pos_datos = encontrar_datos(instr,tipo_instr); // localizar los datos (—1 sino hay) if (pos_datos >= 0) 1'8ipos._datos es —1 no hay operando datos = memoria[pos_datos}; I traer los datos ejecutar(tipo_instr, datos); 1 ejecutar la instruccién } } private static int obt_tipo_instr(int direc) {..} private static int encontrar_datos(int instr, int tipo) {..} private static void ejecutar(int tipo, int datos) (..) Figura 2-3. Intérprete para una computadora simple (escrito en Java). Un intérprete descompone las instrucciones de su maquina objetivo en pasos pequefi. Por consiguiente, la méquina en la que el intérprete se ejecuta puede ser mucho ms simple y ‘menos costosa que un procesador en hardware para la maquina objetivo. Este ahorro es més importante ain si la maquina objetivo tiene un gran nimero de instrucciones y éstas son complicadas, con muchas opciones. El ahorro se logra bésicamente por la sustituci6n de hardware por software (el intérprete), Las primeras computadoras tenfan conjuntos de instrucciones pequefios y sencillos, pero la biisqueda de computadoras més potentes llev6, entre otras cosas, a instrucciones indivi- jas a menudo era posible acelerar la ejecucién de los programas, aunque las instruccion individuales tardaran més en ejecutarse. Una instruccién de punto flotante es un ejemplo instruccién més compleja. Otro ejemplo es el apoyo directo para acceder a los elementos de arreglo, A veces la cosa era tan sencilla como observar que con frecuencia ocurrfan las m ‘mas dos instrucciones en sucesién, de modo que una sola instruccién podia realizar el trabe de ambas. Las instrucciones mas complejas eran mejores porque a veces hacfan posible traslapar ejecucién de operaciones individuales o ejecutarlas en paralelo empleando diferente hardwa En las costosas computadoras de alto rendimiento el costo de este hardware adicional por justificarse fécilmente. Fue asi como las computadoras de alto precio y mejor rendimier ‘comenzaron a tener mucho més instrucciones que las de bajo costo. Sin embargo, el c ciente costo de la creacién de software y las necesidades de compatibilidad de las instruce nes hicieron necesario implementar instrucciones complejas incluso en las computadoras, bajo costo en las que el precio era mas importante que la velocidad. Hacia fines de los cincuenta, IBM (que entonces era la compaaiia que dominaba el ca po de las computadoras) se habia dado cuenta de las muchas ventajas, tanto para IBM cor ppara sus clientes, que tenfa que manejar una Sola familia de méquinas, todas las cuales ejec taban las mismas instrucciones. IBM introdujo el término arquitectura para describir © nivel de compatibilidad. Una nueva familia de computadoras tenfa una sola arquitectura px ‘muchas implementaciones diferentes, todas las cuales podian ejecutar el mismo programa tinica diferencia era el precio y la velocidad, Pero, ;c6mo construit una computadora de by costo que pudiera ejecutar todas las complejas instrucciones de las méquinas de alto cost mayor rendimiento? La respuesta fue la interpretacién. Esta técnica, inicialmente sugerida por Wilkes (195 permitié disefiar computadoras sencillas, de bajo costo, capaces de ejecutar un gran nim: de instrucciones. El resultado fue la arquitectura IBM SystenV360, una familia de computado compatibles que abarcaba casi dos drdenes de magnitud, tanto en precio como en capacid Solo se usaba una implementacidn directa en hardware (es decir, no interpretada) en modelos més caros. Las computadoras sencillas con instrucciones interpretadas también tenfan otros bent cios. Los més importantes eran: 1. Lacapacidad para corregir en el campo instrucciones mal implementadas, 0 inc so subsanar deficiencias de disefto en el hardware basico. La oportunidad de afiadir nuevas instrucciones con un costo minimo, aun desp de haber entregado la méquina. 3. Disefio estructurado que permite crear, probar y documentar instrucciones cc plejas de forma eficiente. Cuando el mercado de las computadoras hizo explosién en la década de los setenta, 1 ccapacidad de las méquinas crecié répidamente, la demanda de computadoras de bajo cc ‘némico para los procesadores. Al avanzar a pasos agigantados la tecnologia subyacente « los semiconductores, las ventajas de costo sobrepasaron las oportunidades de lograr may rendimiento, y las arquitecturas basadas en intérpretes se convirtieron en la forma convenci: nal de disefiar computadoras. Casi todas las computadoras nuevas disefiadas en los setent desde las minicomputadoras hasta las mainframes, se basaron en interpretacin. Hacia finales de esa década, el uso de procesadores simples que ejecutaban intérpretes habia extendido a todos los modelos, con excepeidn de los més costosos y répidos como Cray-I y la serie Cyber de Control Data. El uso de un intérprete eliminaba las limitaciones ¢ costo inherentes a las instrucciones complejas, y las arquitecturas comenzaron a explon instrucciones mis complejas, sobre todo las formas de especificar los operandos a utiliza, Latendencia lleg6 a u cenit con la computadora VAX de Digital Equipment Corporatio ue tenia varios cientos de instrucciones y mas de 200 formas distintas de especificar Ic operandos a usar en cada instruccién. Desafortunadamente, la arquitectura VAX se concibi desde el principio para implementarse con un intérprete, sin pensar mucho en la implements ccién de un modelo de alto rendimiento, Esta filosofia llevé a la inclusién de un gran niimer de instrucciones de valor marginal que eran dificiles de ejecutar de manera directa, Est omisi6n result6 fatal para VAX, y en tltima instancia también para DEC (Compag compré DEC en 1998). Si bien los primeros microprocesadores de 8 bits eran méquinas muy sencillas con con juntos de instrucciones muy simples, para fines de la década de los afios setenta incluso lo microprocesadores habjan adoptado disefios basados en intérpretes. Durante este periodo, un de los principales retos que los disefiadores de microprocesadores enfrentaban era controla la creciente complejidad que los circuitos integrados hacfan posible. Una ventaja important del enfoque basado en intérpretes era la posibilidad de disefiar un procesador sencillo, dejan do casi todo lo complejo para la memoria que contenia el imérprete. Asi, un disefio de hardwan complejo podia convertirse en un disefio de software complejo. EL éxito del Motorola 68000, que tenfa un conjunto de instrucciones grande interpretado yeel fracaso concurrente del Zilog 28000 (que tenia un conjunto de instrucciones igualment« grande, pero sin intérprete) demostré las ventajas de los intérpretes para sacar al mercad« répidamente un microprocesador nuevo, Este éxito fue mas sorprendente en vista de la venta ja inicial de Zilog (el predecesor del Z8000, el Z80, era mucho mis popular que el predeceso1 del 68000, el 6800). Desde luego, otros factores influyeron en este desenlace, como la large historia de Motorola como fabricante de chips y la larga historia de Exxon (el duefio de Zilog) como compaiiia petrolera, no como fabricante de chips. Otro factor que actuaba en favor de la interpretacién durante esa era fue la existencia de memorias s6lo de lectura répidas, llamadas almacenes de control, para contener los intérpretes. Supongamos que una instruccién interpretada representativa del 68000 requi- riera 10 instrucciones del intérprete, llamadas microinstrucciones, a 100 ns cada una, y dos referencias a la memoria principal, a 500 ns cada una. El tiempo de ejecucién total era entonces de 2000 ns, sélo el doble de la rapidez maxima que podia lograrse con ejecucin directa. $i no se contara con almacén de control. Ia inctruccién hakria tordoda KANO ne 2.1.3 RISC versus CISC ‘A finales de los setenta se efectuaron muchos experimentos con instrucciones muy comple jas, que eran posibles gracias al intérprete, Los disefladores trataron de salvar la “brech semntica” entre lo que las maquinas podian hacer y lo que los lenguajes de programacién ¢ alto nivel requerfan. A casi nadie se le ocurria disefiar méquinas més sencillas, como ahor casi nadie piensa en disefiar sistemas operativos, redes, procesadores de textos, ete. mene potentes (Io cual tal vez es lamentable). ‘Un grupo que se opuso ala tendencia y traté de incorporar algunas de las ideas de Seymot Cray en una minicomputadora de alto rendimiento fue el encabezado por John Cocke € IBM. Estos trabajos tuvieron como resultado una minicomputadora experimental Tlamac 801. Aunque IBM nunca comercializé esta maquina y los resultados no se publicaron sir hasta varios afios después (Radin, 1982), la informacién se filtrd y otras personas comenz. ron a investigar arquitecturas similares. En 1980, un grupo de Berkeley dirigido por David Patterson y Carlo Séquin comenz6 disefiar chips de CPU VLSI que no utilizaban interpretacién (Patterson, 1985; Patterson Séquin, 1982). Ellos acufiaron el término RISC para este concepto y Hamaron a su chip « CPU RISC J, el cual fue seguido en poco tiempo por el RISC II. Un poco después, en 198 del otro lado de la Bahia de San Francisco en Stanford, John Hennessy diseié y fabrie6 | chip un tanto diferente al que lam MIPS (Hennessy, 1984), Estos chips llegaron a conve tirse en productos importantes desde el punto de vista comercial: SPARC y MIPS, respectiv mente. Estos nuevos procesadores tenfan diferencias significativas respecto a los procesador comerciales de la época. Dado que estas nuevas CPU no tenfan que ser compatibles productos existentes, sus disefiadores estaban en libertad de escoger nuevos conjuntos instrucciones que maximizaran el rendimiento total del sistema. Si bien el hineapié inic fue en instrucciones simples que pudieran ejecutarse con rapidez, pronto se vio que la cla para un buen desempefio era disear instrucciones que pudieran emitirse (iniciarse) répic mente. El tiempo real que una instrucci6n tardaba era menos importante que el ntimero instruceiones que podtan iniciarse por segundo, En la época en que se estaban disefiando por primera vez estos sencillos procesadores caracteristica que llam6 la atencién de todo mundo fue el niimero relativamente pequefio instrucciones disponibles, por lo regular unas 50. Este ntimero era mucho menor que las 2 2 300 que tenfan computadoras establecidas como la DEC VAX y las grandes mainframes IBM. De hecho, el acrénimo RISC significa computadora de conjunto de instrucciot reducido (Reduced Instruction Set Computer), lo que contrasta con CISC, que signif computadora de conjunto de instrucciones complejo (Complex Instruction Set Comput (una referencia poco sutil al VAX, que dominaba los departamentos de ciencias de Ia computac universitarios en ese entonces). Hoy dia, poca gente piensa que el tamafo del conjunto instrucciones sea crucial, pero el nombre ha persistido. Para no hacer muy larga la historia, se desencaden6 una gran guerra de religi6n, con nn da DISC ataranda el orden establecido (VAX, Intel, las grandes mainframes reducido de instrucciones simples que se ejecutaran en un ciclo del camino de datos de la figura 2-2, buscar dos registros, combinarlos de alguna manera (por ejemplo, sumao AND) y almacenar el resultado en un registro nuevamente, Su argumento era que incluso si una mé- quina RISC requerfa cuatro o cinco instrucciones para hacer lo que una maquina CISC hace en una instruccién, si las instrueciones RISC son 10 veces més répidas (porque no se inter- pretan), RISC gana. También vale la pena sefialar que para esas fechas la rapidez de las ‘memorias principales habia alcanzado a la rapidez.de los almacenes de control s6lo de lectu- ra, asf que el castigo por interpretaci6n se habia incrementado considerablemente, lo que favorecfa a las méquinas RISC. Podrfamos pensar que en vista de las ventajas de velocidad de la tecnologia RISC, las méquinas RISC (como la Alpha de DEC) habrian sacado a las méquinas CISC (como la Intel Pentium) del mercado, No ha sucedido tal cosa. ;Por qué? En primer lugar, esté la cuestién de la compatibilidad con lo existente y los miles de millones de délares que las compaffas han invertido en software para la linea Intel. Segundo, aunque parezca sorprendente, Intel ha logrado aplicar las mismas ideas incluso en una arqui- tectura CISC. A partir del 486, las CPU de Intel contienen un nticleo RISC que ejecuta las instrucciones més simples (y casi siempre las mas comunes) en un solo ciclo del camino de datos, al tiempo que interpreta las instrucciones mas complejas de la forma CISC acostum- brada. El resultado neto es que las instrucciones comunes son répidas, y las menos comunes son lentas. Si bien este enfoque hibrido no es tan répido como un disefio RISC puro, ofrece tun desempeiio global competitivo y al mismo tiempo permite la ejecucién de software viejo sin modificacién. 2.1.4 Principios de disefio de las computadoras modernas Ahora, més de una década después de la introduccién de las primeras méquinas RISC, ciertos principios de disefio gozan de aceptacién como una buena forma de disefiar computadoras dado el estado actual de la tecnologia de hardware. Si ocurre un cambio importante en la tecnologfa (digamos que un nuevo proceso de fabricacién hace que un ciclo de memoria tarde 10 veces menos que un ciclo de CPU), cualquier cosa podria suceder. Por tanto, los disefiadores de méquinas siempre deben estar pendientes de los avances tecnol6gicos que podrian afectar el equilibrio entre los componentes. Habiendo dicho eso, existe un conjunto de principios de disefio, a veces Hamados principios de disefio RISC, que los arquitectos de las CPU de propésito general hacen lo posible por seguir. Restricciones externas, como el requisito de ser compatible con alguna arquitectura existente, a menudo requieren concesiones ocasionales, pero estos principios son metas que la mayorfa de los disefiadores se fija. A continuacién analizaremos los prin- cipios més importantes. Todas las instrucciones se ejecutan directamente en hardware El hardware ejecuta directamente todas las instrucciones comunes: éstas no se interpretan de las instruceiones sean répidas. En las computadoras que implementan conjuntos de ins trucciones CISC, las instrucciones més complejas pueden dividirse en partes discretas que Iuego pueden ejecutarse como una sucesién de microinstrucciones. Este paso adicional hace ‘mas lenta a la maquina, pero podrfa ser aceptable en el caso de instrucciones que ocurren cor poca frecuencia, Maximizar el ritmo con que se emiten instrucciones Las computadoras modernas recurren a muchos trucos para maximizar su desempefio, y € principal de ellos es tratar de emitir el mayor ntimero posible de instrueciones por segundo Después de todo, si podemos emitir 500 millones de instrucciones por segundo, habremo construido un procesador de 500 MIPS, sin importar cuanto tarden en ejecutarse realment las instrucciones. (MIPS significa Millones de Instrucciones Por Segundo; el procesado MIPS pretende hacer un juego de palabras con este acrénimo.) Este principio sugiere que ¢ paralelismo puede desempefar un papel importante en el mejoramiento del desempefo, ¥ que sélo es posible emitir un gran nmero de instrucciones lentas en un periodo corto: varias instrucciones pueden ejecutarse simulténeamente. "Aunque las instrucciones siempre se encuentran en el orden que dicta el programa, n siempre se emiten en ese orden (porque algin recurso necesario podria estar ocupado) no tienen que terminar en el orden del programa. Desde luego, sila instruccién 1 asigna u valor a un registro y la instruccién 2 usa ese registro, debe tenerse mucho cuidado de que | instruccién 2 no lea el registro antes de que éste contenga el valor correcto. Para ello ¢ requiere un control estricto, pero el potencial para incrementar la rapidez ejecutando varic instrucciones simulténeamente es grande. Las instrucciones deben ser féciles de decodificar Un limite eritico de la rapidez con que se emiten las instrucciones es la decodificacién de instru ciones individuales para determinar qué recursos necesitan. Todo lo que pueda agilizar este proc sos titi, e incluye hacer que las instrucciones tengan una longitud fija, con un nuimero pequet cde campos. Cuanto menor sea el nimeros de formatos de instrucciones distintos, mejor. ito deben hacer referencia a la memori Sélo las operaciones de carga y almacenat Una de las formas mas sencillas de desglosar las operaciones en pasos individuales requerir que los operandos de casi todas las instrucciones provengan de —y regresen a- registros. La operacién de transferir operandos entre la memoria y los registros puede rea zarse con instrucciones diferentes. Puesto que el acceso a la memoria puede tardar mucho cl retraso es impredecible, la mejor manera de traslapar estas instrucciones con otras cerciorarse de que no hagan mas que transferir operandos entre los registros y la memor . sevaninnae | OAR v STORE deben hacer refere Incluir abundantes registros Puesto que el acceso a la memoria es relativamente lento, es necesario contar con much registros (al menos 32) para que, una vez que se ha obtenido una palabra, se pueda manten en un registro hasta que ya no se necesite. Quedarse sin registros y tener que escribirlos en memoria s6lo para volverlos a cargar después es poco recomendable y debe evitarse « Ja medida de lo posible. La mejor manera de lograr esto es tener suficientes registros, 2.1.5 Paralelismo en el nivel de instrucciones Los arquitectos de computadoras se esfuerzan constantemente por mejorar el desempeiio « las méquinas que disefian. Una forma de hacerlo es aumentar la velocidad de reloj de I chips para que operen con mayor rapidez, pero para cada nuevo diseiio existe un limite pa Jo que es posible lograr con los recursos disponibles en ese momento histérico. Por cons guiente, casi todos los arquitectos de computadoras recurren al paralelismo (hacer dos o mi cosas al mismo tiempo) para sacar el mayor provecho posible a una velocidad de reloj dad El paralelismo adopta dos formas generales: paralelismo en el nivel de instrucciones paralelismo en el nivel de procesador. En el primero, se aprovecha el paralelismo dentro ¢ las instrucciones individuales para Jograr que la maquina ejecute mas instrucciones por st gundo, En él segundo, multiples CPU trabajan juntas en el mismo problema. Cada enfogt tiene sus propios méritos. En esta secci6n examinaremos el paralelismo en el nivel de instruc ciones; en la que sigue veremos el paralelismo en el nivel de procesadores. Filas de procesamiento Se ha sabido desde hace afios que la obtenci6n de instrucciones de la memoria es un impo: tante cuello de botella que afecta la rapidez.de ejecucién de las instrucciones. Para aliviar est problema, computadoras que se remontan por lo menos a la IBM Stretch (1959) han contad con la capacidad de buscar instrucciones de la memoria por adelantado, a fin de tenerle disponibles en el momento en que se necesitan. Esas instrucciones se almacenaban en un serie de registros llamados buffer de prebtisqueda. Asi, cuando se requerfa una instrucci6t casi siempre podfa tomarse del buffer de prebiisqueda en lugar de esperar a que terminara un Jectura de la memoria. Efectivamente, la prebuisqueda divide la ejecucién de instrucciones en dos partes: biis queda y ejecucién propiamente dicha. El concepto de fila de procesamiento (pipeline lleva esta estrategia mucho més lejos. En lugar de dividir la ejecucién de instrucciones en s6l dos partes, a menudo se divide en muchas partes, cada una de las cuales se maneja con u componente de hardware dedicado, y todos estos componentes pueden operar en paralelo. La figura 2-4(a) ilustra una fila de procesamiento con cinco unidades, también llamada etapas. La etapa | busca la instruccién de la memoria y la coloca en un buffer hasta qu senecesita. La etapa 2 decodifica la instruceién, determinando de qué tipo es y qué operando. por el camino de datos de la figura 2-2. Por tiltimo, la etapa 5 escribe el resultado en registro apropiado. st sz 83 sé $5 Unidad do Undad de Unidad de Unidad de Unidad de pusauega de || deceateacion | —+|pasqueda de |—e sjcucen de | escitira de Tnattusciones| [de insuccones| | operandos | [instracciones| | resutados (a) s:: |W|@|IE a s| Mie a 83: fel (By a si fl 86 {E} 4234567 Tempo —~ (b) Figura 2-4, (a) Fila de procesamiento de cinco etapas. (b) Estado de cada etapa en funcidn del tiempo, Se ilustran nueve cielos de reloj En la figura 2-4(b) vemos cémo la fila de procesamiento opera como una funcién tiempo, Durante el ciclo de reloj 1, a etapa S1 esta trabajando en la instrucei6n 1, buseénd en la memoria. Durante el ciclo 2, la etapa S2 decodifica la instrucci6n 1, mientras la etapa busca la instruccién 2. Durante el ciclo 3, la etapa $3 busca los operandos para la instrucci6 la etapa $2 decodifica fa instrucci6n 2 y la etapa S1 busca la tercera instruecién. Durante ciclo 4, la etapa S4 ejecuta la instruccidn 1, $3 busca los operandos para la instruccién 2, decodifica la instruccién 3 y $1 busca la instruccién 4, Por tiltimo, durante el ciclo 5, scribe el resultado de la instruccién 1, mientras las demés etapas trabajan con las instrucc nes subsecuentes. Consideremos una analogia para aclarar el concepto de fila de procesamiento. Imag tuna fbrica de pasteles en la que se separa la preparaciGn de los pasteles y el empacado Estos para su distribucién. Supongamos que el departamento de empacado tiene una la banda transportadora con cinco trabajadores (unidades de procesamiento) formados ju ella, Cada 10 segundos (el ciclo de reloj), el trabajador 1 coloca una caja de pastel vacia e banda, La caja es transportada hasta el trabajador 2, quien coloca un pastel en ella. Pi después, la caja llega al puesto del trabajador 3, donde se le cierra y sella. Luego, la ¢ contimtia hasta donde esté el trabajador 4, quien adhiere una etiqueta a la caja, Por tltime trabajador 5 retira 1a caja de la banda y Ia coloca en un contenedor grande que despué: enviard a un supermercado. Basicamente, ésta es la forma en que funcionan también las f de procesamiento de una computadora: cada instrucciGn (pastel) pasa por varios pasos Volviendo a nuestra fila de procesamiento de la figura 2-4, supongamos que el tiemp ciclo de esta méquina es de 2 ns. Entonces, se requieren 10 ns para que una instruccién por las cinco etapas de la fila de procesamiento. A primera vista, si una instrucci6n tarda I podria parecer que la maquina puede operar a 100 MIPS, pero en realidad trabaja a velocidad mucho mayor. En cada ciclo de reloj (2 ns), se completa una instruccién, asf qu rapidez de procesamiento real es de 500 MIPS, no de 100 MIPS. EL uso de filas de procesamiento permite balancear la latencia (el tiempo que tard ejecutarse una instruccién) y el aneho de banda del procesador (cusntas MIPS puede cutar la CPU). Con un tiempo de ciclo de T ns, y n etapas en la fila de procesamiento, latencia es de nT'ns y el ancho de banda es de 1000/T MIPS (l6gicamente, dado que esta midiendo tiempos en nanosegundos, deberfamos medir el ancho de banda de la CPL MMIPS 0 GIPS, pero nadie lo hace, asf que tampoco lo haremos aqui). Arquitecturas superescalares Si una fila de procesamiento es buena, entonces seguramente dos serdin mejores. En la fig 2-5 se muestra un posible disefio para una CPU con fila de procesamiento dual basado ¢ figura 2-4. Aqui una sola unidad de biisqueda de instrucciones trae pares de instruccion coloca cada una en su propia fila de procesamiento, que cuenta con su propia ALU para pc ‘operar en paralelo, Esto requiere que las dos instrucciones no compitan por el uso de recu (Por ejemplo, registros) y también que una no dependa del resultado de la otra. Al igual con una solo fila de procesamiento, el compilador debe garantizar que se cumpla esta si cién (lo que implica que el hardware no verifica que las instrucciones sean compatible produce resultados incorrectos si no lo son), 0 bien los conflictos se detectan y elimi durante la ejecucién utilizando hardware adicional st $2 S3 S4 S5 Wied] © [Unease] © [Unemaae cocoaies-| | biswose |__| oecaces |_| unceace [| cién de ins: de =| de instruc- Paani unideaae | [‘nvesores | [oprendos ‘lone eiSqvese de Tndagzo] — [Undedse] — [Unmaaae : nswccones| | Gocoaics- |_| busquede |e aca | | Uridod do Sbeae ne. fpusqueda def —>} LOAD }-—* jescrtura« instrucciones| {de instrucciones| | operandos resultadc Punto flotante El concepto de procesador superescalar lleva implicita la idea de que la etapa $3 puede emitir instrucciones con mucho mayor rapidez de la que la etapa S4 puede ejecutarlas. Si la ‘etapa $3 emitiera una instruccién cada 10 ns y todas las unidades funcionales pudieran efec~ tuar su trabajo en 10 ns, s6lo una estarfa ocupada en un momento dado, y la idea no represen- tarfa ninguna ventaja. En realidad, casi todas las unidades funcionales de la etapa 4 tardan mucho més que un ciclo de reloj en ejecutarse, sobre todo las que acceden a la memoria 0 realizan aritmética de punto flotante. Como puede verse en la figura, es posible tener varios ALU en la etapa 4, 2.1.6 Paralelismo en el nivel de procesador La demanda de computadoras més y més répidas parece insaciable. Los astrénomos quieren simular qué sucedié en el primer microsegundo después del big bang, los economistas quie- ren modelar la economfa mundial, y los adolescentes quieren tener juegos multimedia interactivos en 3D por Internet con sus amigos virtuales. Si bien las CPU son cada vez més rpidas, egard el momento en que se topardn con la barrera de la velocidad de la luz, que con toda seguridad no podré rebasar los 20 cm/ns en alambre de cobre o fibra dptica, por mi ingeniosos que sean los ingenieros de Intel. Los chips més rpidos tambign producen més calor, yy su disipacién es un problema. El paralelismo en el nivel de instrucciones ayuda un poco, pero las filas de procesamien- to y el funcionamiento superescalar casi nunca ganan mds que un factor de 5 0 10. Para obtener ganancias de 50, 100 0 més, el tinico camino es disefiar computadoras con miiltiples CPU, por lo que ahora veremos cémo estan organizadas algunas de ellas. Computadoras de matriz, Muchos problemas de las ciencia fisica e ingenieria implican matrices o tienen una estructura altamente regular en algin sentido. En muchos casos los mismos calculos se efectian con muchos conjuntos de datos distintos al mismo tiempo. La regularidad y estructura de estos programas los convierte en candidatos idéneos para una aceleracién por ejecucién en parale- Jo, Se han utilizado dos métodos para ejecutar programas cientificos grandes répidamente. Si bien estos dos sistemas son muy similares en casi todos los sentidos, resulta irdnico que uno de ellos se considere como una extensién de un solo procesador, mientras que el otro se considera como una computadora paralela. Un arreglo de procesadores consiste en un gran ntimero de procesadores idénticos que ejecutan Ja misma secuencia de instrucciones con diferentes conjuntos de datos. El primer arreglo de procesadores del mundo fue la computadora ILLIAC IV de la University of Illinois, que se ilustra en la figura 2-7 (Bouknight et al., 1972). Bl plan original era construir una ‘méquina constituida por cuatro cuadrantes, cada uno de los cuales tenfa una cuadricula 8 x 8 de elementos procesador/memoria. Una sola unidad de control por cuadrante transmitfa ins- trucciones que eran ejecutadas simultsneamente por todos los procesadores, cada uno de los cuales utilizaba sus propios datos de su propia memoria (que se cargaba durante la fase de construirse un cuadrante, pero éste logré un desempeito de 50 megaflops (millones de opera ciones de punto flotante por segundo). Se dice que si se hubiera completado la méquin: original y hubiera alcanzado la meta de desempeito fijada originalmente (1 gigaflop), habri duplicado la capacidad de eémputo de todo el mundo, ‘Unidad de control 7 ono 86888888} S8easeeee| Ssse8eeeq| ses88es8ea nome BBBBESSS cuareua 8 8 de procesadormerot ~se888888 Memoa" FAA BEEaS Bseeg8e888e8) Figura 2-7. Arreglo de procesadotes del tipo ILLIAC IV. Parael programador, un procesador vectorial es muy parecido a un arreglo de procesad res, Al igual que éste, e1 procesador vectorial es muy eficiente al ejecutar una secuencia ¢ operaciones con pares de elementos de datos. Pero, a diferencia del arreglo de procesadh res, todas las operaciones de suma se efecttian en un solo sumador provisto de muchas fila procesamientos. La compaaia fundada por Seymour Cray, Cray Research, produjo mi cchos procesadores vectoriales, comenzando con la Cray-1 en 1974 y continuando hasta I modelos actuales (Cray Research forma parte ahora de SGD). “Tanto los arreglos de procesadores como los procesadores vectoriales trabajan con arr los de datos. Ambos ejecutan instrucciones individuales que, por ejemplo, suman los eleme tos de dos vectores en pares. Pero mientras que el arreglo de procesadores lo hace tenient tantos sumadores como elementos tiene el vector, el procesador vectorial tiene el concepto« registro vectorial, que consiste en un conjunto de registros convencionales que pueden cz «garse desde la memoria con una sola instruccién, la cual en realidad los carga desde la mem. riaen serie, Luego una instrucci6n de sua vectorial realiza la suma por pares de los element de dos vectores de este tipo alimenténdolos a uu sumador con filas de procesamiento des Jos dos registros vectoriales. El resultado del sumador es otro vector, que puede almacenar en un registro vectorial o utilizarse directamente como operando de otra operaci6n vectori Se siguen fabricando arreglos de procesadores, pero ocupan un nicho cada vez. mas F quefio del mercado, ya que s6lo funcionan bien con problemas que requieren realizar el m ‘mo célculo con muchos conjuntos de datos simultsneamente. Los arreglos de procesadot pueden realizar algunas operaciones de forma més eficiente que las computadoras vectorial procesadores vectoriales, en cambio, pueden afiadirse a un procesador convencional. Els sultado es que las partes del programa susceptibles de vectorizarse pueden ejecutarse rp damente aprovechando la unidad vectorial, mientras que el resto del programa puede ejecutar en un procesador tinico convencional Multiprocesadores Los elementos de procesamiento de un arreglo de procesadores no son CPU independiente ya que todos ellos comparten Ja misma unidad de control. Nuestro primer sistema paralel constituido por CPU propiamente dichas es el multiprocesador, un sistema con varias CP’ que comparten una memoria comin, como un grupo de personas en un sal6n que comparte un pizarrén comtin. Puesto que cada CPU puede leer o escribir en cualquier parte de la me moria, deben coordinarse (en software) para no estorbarse mutuamente. Hay varios posibles esquemas de implementacién. El mas sencillo consiste en tener u solo bus con varias CPU y una memoria conectadas a él. En la figura 2-8(a) se muestr tun diagrama de semejante multiprocesador basado en bus. Muchas compaitias fabrican est tipo de sistemas. Memorias locales \ Memoria Memoria compartida ‘compart: cpu| | cpu] | ceu | | cpu opu| | cru] | cpu | | cpu Bus Bus (@) ©) Figura 2-8. (a) Multiprocesador con un solo bus. (b) Multicomputadora con memorias locales, No se necesita mucha imaginacién para darse cuenta de que si hay un gran nimero de procesadores rpidos que constantemente estén tratando de acceder a la memoria por el mism« bus, habré conflictos, Los disefiadores de multiprocesadores han ideado varios esquemas pari reducir esta contenci6n y mejorar el desempefio, Un disefio, que se muestra en la figura 2-8(b) Proporciona a cada procesador un poco de memoria local propia, inaccesible para los dems Esta memoria puede utilizarse para c6digo de. programa y datos que no es necesario que se compartan, El acceso a esta memoria privada no usa el bus principal, lo que reduce considera bblemente el trifico en el bus. Hay otros posibles esquemas (por ejemplo, uso de cachés), Los multiprocesadores tienen la ventaja, respecto a otros tipos de computadoras Parale las. de aue es facil trahaine con el mavlela de nrnaramarién tomada a través de un microscopio. La fotografia digitalizada podria guardarse en la memoria « ‘iin, y a cada procesador se le asignarfa alguna regién de la fotografia para su biisqueda, Puesto.c cada procesador tiene acceso a toda la memoria, uno de ellos no tiene problemas para estudiar célula que comienza en la regién que se le asigné pero que rebasa la frontera con la siguiente regi Multicomputadoras Aunque los multiprocesadores con un mimero reducido de procesadores (S 64) son rele vamente féciles de construir, las dificultades se multiplican de forma sorprendente cuan aumenta el ntimero de procesadores. Lo dificil es conectar todos los procesadores a la men ria, Para superar estos problemas, muchos disefiadores simplemente han abandonado la ic de tener una memoria compartida y se han limitado a construir sistemas que consisten en gran nimero de computadoras interconectadas, cada una de las cuales tiene su propia men Jn que haya una memoria comin. Estos sistemas se llaman multicomputadoras. Las CPU de una multicomputadora se comunican envidndose mutuamente mensaj parecidos al correo electrénico pero mucho més répidos. En sistemas grandes, tener ci ‘computadora conectada a todas las dems no resulta préctico, y se utilizan topologias co reticulas bi y tridimensionales, arboles y anillos. El resultado es que los mensajes de 1 computadora a otra a menudo tienen que pasar por una o més computadoras intermedias 0 © mutadores para llegar del origen al destino. No obstante, es posible aleanzar sin mu dificultad tiempos de paso de mensajes del orden de unos cuantos microsegundos. Se construido multicomputadoras con casi 10,000 CPU, y ya estén funcionando. Puesto que los multiprocesadores son més faciles de programar y las multicomputade son més féciles de construir, se ha investigado asiduamente la posibilidad de disefiar sister hibridos que combinen las propiedades mds atractivas de cada uno. Tales computadoras tra de presentar la ilusién de una memoria compartida, sin hacer el gasto de construirla realmei ria,

También podría gustarte