63 MÓDULO II FAMILIA DE MICROPROCESADORES, EL COPROCESADOR ARITMÉTICO Y LA TECNOLOGÍA MMX En este módulo se incluyen dos unidades que permiten complementar el estudio de los microprocesadores. En la unidad 5 se presenta la evolución de una familia comercial de microprocesadores, en la búsqueda de mejores prestaciones. Como consecuencia de esta evolución, se han incorporado nuevos elementos y tecnologías que amplían su panorama de uso, tales como el coprocesador aritmético y la tecnología MMX, los cuales son tema de estudio de la unidad 6. Objetivo del Módulo II: Analizar con sentido lógico y creativo, la evolución de una familia de microprocesadores y programas que resuelvan problemas aritméticos. El módulo II está estructurado en dos unidades: Unidad 5: Unidad 6: Familia de microprocesadores. El Coprocesador Aritmético y la Tecnología MMX 64 UNIDAD 5 Familia de Microprocesadores La historia de los microprocesadores (procesadores) ha pasado por diferentes situaciones, siguiendo la lógica evolución de este mundo. Desde aquel primer procesador 4004 del año 1971 hasta el Itanium producido en el 2001. Según la opinión de expertos, para el año 2011 se utilizará procesadores cuyo reloj irá a una velocidad de 10 GHz (10.000 MHz), contendrá mil millones de transistores y será capaz de procesar cerca de 100 mil millones de instrucciones por segundo. El factor responsable del gran aumento de la velocidad del microprocesador es la disminución del tamaño de los componentes del microprocesador; esto reduce la distancia entre componentes, y, por tanto, aumenta la velocidad. Sin embargo, la verdadera ganancia en velocidad en los últimos años se debe a la organización del microprocesador, incluyendo el uso de técnicas para obtener mejores prestaciones de servicio. La unidad 5, presenta la evolución de la Familia de Microprocesadores Intel, profundizando en las mejoras de hardware y software que han desarrollado los diseñadores sobre los miembros de esta familia en la búsqueda de un mejor desempeño. Mediante el conocimiento obtenido, se podrá describir importantes conceptos de diseño que han conducido al desarrollo de computadores más potentes. Objetivo de la Unidad 5: Analizar la evolución de la arquitectura y/o funcionamiento de microprocesadores comerciales, para la descripción de mejoras en sus prestaciones de servicio. Contenido de la Unidad 5: El contenido de la unidad contempla el estudio de los siguientes temas: Los microprocesadores 80186, 80188 y 80286. Los microprocesadores 80386 y 80486. Los microprocesadores Pentium y Pentium Pro. El microprocesador Pentium II 65 Actividades recomendadas para el estudio del contenido de la unidad 5. 1.- Examine la tabla 5.1, en ella puede identificar las lecturas de los temas contentivos de la unidad 5: TÍTULO Los microprocesadores 80186, 80188 y 80286. MATERIAL DE REFERENCIA CONTENIDO Arquitectura de los 80186 / 80188. Programación de las mejoras de los 80186 / El texto Los 80188. Microprocesadores Ejemplo de interfaz con el Intel, B. B. Brey. 80C188EB. CAPITULO 16 Introducción al 80286. Introducción al microprocesador 80386. Registros especiales del 80386 Administración de la memoria del 80386. Los microprocesadores 80386 y 80486. Acceso al modo protegido El texto Los Microprocesadores Modo 8086 virtual. Intel, B. B. Brey. Modo 8086 virtual. 17 Mecanismo de paginación de memoria. Introducción al procesador 80486. Introducción al procesador Pentium. Registros especiales del Pentium. Administración de la Los memoria del Pentium. El texto Los microprocesadores Pentium y Pentium Microprocesadores Nuevas instrucciones del Pentium. Intel, B. B. Brey. Pro. Introducción al microprocesador Pentium Pro. Características especiales del Pentium Pro. Tabla 5.1 18 66 TÍTULO MATERIAL DE REFERENCIA CONTENIDO Introducción al texto Los microprocesador El microprocesador El Pentium II. Microprocesadores Pentium II. Intel, B. B. Brey. Cambios al software del Pentium II. CAPITULO 19 Tabla 5.1 Continuación 2.- Una vez leído el contendido indicado en la tabla 5.1, usted estará en capacidad de responder lo siguiente: 2.1 ¿Cuál fue el primer microprocesador Intel de 32 bits? 2.2 ¿Cuántos períodos del reloj encontramos en un ciclo de bus de los 80186/80188? 2.3 ¿Cuántos bytes de memoria virtual direcciona la administración de memoria del microprocesador 80386? unidad de 2.4 Describa brevemente cómo funciona el sistema de memoria cache. 2.5 ¿A cuánta memoria puede acceder el microprocesador Pentium? 2.6 ¿Cuántas caches encontramos en el Pentium y cuáles son sus tamaños? 2.7 ¿Cuál es la diferencia entre la cache de nivel 2 en el Pentium Pro y la del Pentium II? 67 3.- Estudie la tabla 5.2 mostrada a continuación, la cual resume las especificaciones técnicas de los microprocesadores Intel: Fecha de Velocidad Ancho Número de Memoria Memoria presentación de reloj de bus transistores direccionable virtual Breve descripción 4004 15/11/71 108 KHz. 4 bits 2.300 (10 micras) 640 byte Primer chip con manipulación aritmética 8008 1/4/72 108 KHz. 8 bits 3.500 16 KBytes Manipulación Datos/texto 8080 1/4/74 2 MHz. 8 bits 6.000 64 KBytes 10 veces las (6 micras) prestaciones del 8008 1 MegaByte 10 veces las prestaciones del 8080 5 MHz. 29.000 8086 8/6/78 8 MHz. 16 bits (3 micras) 10 MHz. Idéntico al 8086 excepto en su bus externo de 8 bits 5 MHz. 8088 1/6/79 8 bits 29.000 8 MHz. 8 MHz. 134.000 80286 1/2/82 10 MHz. 16 Bits De 3 a 6 veces las prestaciones del 8086 16 Megabytes 1 Gigabyte 4 Gigabytes Primer chip x86 capaz de 64 manejar juegos Terabytes de datos de 32 bits (1.5 micras) 12 MHz. 16 MHz. Microprocesador 275.000 20 MHz. 17/10/85 Intel 386 DX® 32 Bits 25 MHz. (1 micra) 33 MHz. Microprocesador 275.000 16 MHz. 16/6/88 Intel 386 SX® 16 Bits 20 MHz. Bus capaz de direccionar 16 bits procesando Terabytes 32bits a bajo coste 64 4 gigabytes (1 micra) 25 MHz. Microprocesador 10/4/89 33 MHz. Intel 486 DX® (1 micra, 0.8 32 Bits micras en 50 4 Gigabytes MHz.) 64 Cache de nivel 1 en el chip Terabytes 50 MHz. 16 MHz. Microprocesador 22/4/91 Intel 486 SX® 1.185.000 20 MHz. 32 Bits 25 MHz. 33 MHz. 4 Gigabytes (0.8 micras) Idéntico en diseño al Intel 486DX, pero sin Terabytes coprocesador matemático 64 68 Fecha de Velocidad Ancho Número de Memoria Memoria presentación de reloj de bus transistores direccionable virtual Breve descripción 60 MHz. 66 MHz. 75 MHz. 90 MHz. Procesador 3,1 millones 100 MHz. 22/3/93 Pentium® 32 Bits 120 MHz. Arquitectura escalable. Hasta 5 veces las prestaciones Terabytes del 486 DX a 33 MHz. 64 4 Gigabytes (0.8 micras) 133 MHz. 150 MHz. 166 MHz. 200 MHz. 150 MHz. 5,5 millones Procesador 27/3/95 180 MHz. 4 Gigabytes 64 Bits PentiumPro® (0.32 micras) 200 MHz. 233 MHz. 7,5 millones Procesador 7/5/97 266 MHz. PentiumII® (0.32 micras) 300 MHz. S.E.C., MMX, Doble Bus Indep., Terabytes Ejecución Dinámica 64 4 Gigabytes 64 Bits Arquitectura de ejecución dinámica con procesador de Terabytes altas prestaciones 64 Tabla 5.2. Especificaciones técnicas de los microprocesadores Intel Fuente: http://www.duiops.net/hardware/micros/microshis.htm 4.- En el siguiente ejemplo se muestra el número de caches que se utilizan en los microprocesadores: Ejemplo 5.1: Número de caches en los microprocesadores. Cuando se introdujeron originalmente las caches, un sistema tenía normalmente solo una cache. Más recientemente, se ha convertido en una norma el uso de múltiples caches. El uso de de las memorias caches en los sistemas microprocesadores mejora la velocidad de proceso y sus prestaciones. Habitualmente se dimensionan caches de uno o dos niveles, aunque también hay sistemas con tres niveles. Los modernos microprocesadores tienen: • Caches on-chip (cache de nivel 1, L1): Proporcionan las mejores prestaciones. 69 • Cache off-chip módulo externo (constituye el nivel 2, L2): Tiene tiempos de acceso memores que la memoria principal. Las caches L2. Suelen ser de 512 KBytes o menos. Caches de mayores tamaños no son rentables. 5.- En el ejemplo 5.2, se muestra el número de caches presentes en los microprocesadores de la familia Intel. Ejemplo 5.2: Número de caches en los microprocesadores de la familia Intel. • • • • • 80386: Sin cache on-chip 80486: 8 KBytes de cache unificada. Lineas (bloques) de 16 bytes y organización asociativa en cuatro vías. Pentium (todas las versiones): Dos caches L1 on-chip. Cache partida de 16 KBytes, 8KBytes para datos y 8 KBytes para instrucciones. Pentium III: Se añade una cache L3 en la tarjeta (off-chip). Pentium 4: - Caches L1 de 8 KBytes, líneas (bloques) de 64 bytes, asociativa de 4 vías. - Caches L2: Unificada. Alimenta a las dos cache L1. - 256 KBytes, líneas de 128 bytes, asociativa de 8 vías. - Cache L3 on-chip. Atención: Los microprocesadores Pentium III y Pentium 4, no son objeto de estudio del curso Microprocesadores. . 6.- El ejemplo 5.3, presenta la evolución de la estructura de la cache, en la evolución de los microprocesadores de Intel. Ejemplo 5.3: Evolución de la estructura cache en los microprocesadores Intel. La evolución de la estructura cache se observa claramente en la evolución de los microprocesadores Intel. El 80386 no tiene cache on-chip. El 80486 incluye una sola cache on-chip de 8 KBytes, utilizando un tamaño de línea de 16 bytes y una organización asociativa por conjunto (la memoria cache se divide en conjuntos de n bloques, así al bloque i-ésimo de memoria principal le corresponde el conjunto i módulo (k/n) donde k es el número de bloques de memoria cache) de cuatro vías. En la figura 5.1, se presenta el diagrama de bloques del 80486, en el cual se aprecia la ubicación de la cache. 70 Figura 5.1. Diagrama de bloques del 80486. Fuente: http://www.duiops.net/hardware/micros/microshis.htm El Pentium II incluye dos caches on-chip, una para datos otra para instrucciones. Cada cache es de 8 KBytes, utilizando un tamaño de línea de 32 bytes y una organización asociativa por conjunto de dos vías. Incluye además una cache L2 que alimenta a las dos cache L1. La cache L2 es asociativa por conjunto de cuatro vías, y con tamaños que oscilan entre 256 Kbytes y 1 Mbyte. La figura 5.2 proporciona una visión simplificada de la estructura del Pentium II, resaltando la ubicación de las tres caches. 71 Bus del sistema Caché L2 (256K-1M) Unidad de interfaz del bus Caché de instrucciones L1 (8-16K) Captar Unidad de Captación y decodificación de instrucciones Cache de datos L1 (8-16K) Cargar Unidad de envío y ejecución Memorizar Unidad de retirada Depósito de instrucciones (buffer de reorden-ROB) Figura 5.2. Diagrama de bloques del Pentium II 7.- En el ejemplo 5.4 pone en evidencia la evolución de la arquitectura superescalar en los microprocesadores Intel, y describe la arquitectura superescalar del Pentium II. Ejemplo 5.4: Arquitectura superescalar del microprocesador Pentium II. El microprocesador 80486 no disponía de elementos superescalares, el Pentium original tenía unas características superescalares modestas, que consistían en la utilización de dos unidades de ejecución de enteros independientes. El Pentium Pro introdujo un diseño completamente superescalar. Por su parte, el Pentium II tiene básicamente la misma organización superescalar que el Pentium Pro. En la figura 5.2 mostrada anteriormente, se presenta el diagrama de bloques del Pentium II. Los elementos esenciales de la organización superescalar son: la unidad de captación y decodificación de instrucciones, la unidad de envío y ejecución, y la unidad de retiro. Se describe a continuación la operación de cada una de ellas: 72 Operación de la unidad de captación y decodificación. La figura 5.3 es un esquema simplificado de la unidad de captación y decodificación del Pentium II. La operación de captación consta de tres etapas encauzadas: Desde la cache de instrucciones Camino de 32 bytes IFU1 Buffer de instrucciones (contiene una línea) Siguiente IP 16 bytes Decodificador de longitud de instrucciones IFU2 Predicción dinámica de saltos 16 bytes Etapa de alineación para los decodificadores IFU3 16 bytes ID1 Decodificador 0 (complejas) Decodificador 1 (sencillas) Decodificador 2 (sencillas) Secuenciador de instrucciones de microcódigo 6 x 118 bits ID2 Cola de instrucciones decodificadas 3 x 118 bits 3 x 118 bits RAT Predicción estática de sºaltos Asignador de registros Al ROB Figura 5.3. Unidad de captación/decodificación del Pentium II Etapa IFU1 Capta instrucciones desde la cache de instrucciones, una línea (32 bytes) cada vez. La unidad <<Siguiente IP>> proporciona la dirección de la siguiente instrucción a captar, y se capta en el buffer IFU1 la línea de cache que contiene la instrucción. Esta operación no se calcula sencillamente incrementando el puntero, porque podría haber un salto o una interrupción pendiente que moviese el puntero a una posición diferente. Después el contenido del buffer IFU1 pasa IFU2 (16 bytes cada vez). Etapa IFU2 73 Esta unidad lleva a cabo dos operaciones en paralelo. IFU2 examina los bytes para determinar los límites de las instrucciones; esta es una operación necesaria, debido a que las instrucciones del Pentium son de longitud variable. Si alguna de las instrucciones es de salto, la unidad pasa la dirección de memoria correspondiente a la unidad de predicción dinámica de saltos. IFU2 pasa después el bloque de 16 bytes a IFU3, que es responsable de alinear las instrucciones para presentarlas al decodificador apropiado. Etapa IFU3 Para comprender el funcionamiento de esta etapa, es necesario describir la primera etapa de la unidad de decodificación de instrucciones, ID1. Esta etapa es capaz de manejar tres instrucciones en paralelo. ID1 traduce cada instrucción en de una a cuatro microoperaciones cada una de 118 bits. ID1 contiene tres decodificadores. El primero de ellos puede manejar instrucciones que se traduzcan hasta en cuatro microoperaciones. El segundo y el tercer decodificador maneja instrucciones sencillas que correspondan a una única microoperación (instrucciones registro a registro e instrucciones de carga). Si más de una instrucción es compleja, las instrucciones deben introducirse en ID1 en etapas, de tal modo que el segundo y tercer decodificador no se les dé una instrucción compleja. Las instrucciones que requieren más de cuatro microoperaciones, se transfieren al secuenciador de instrucciones de microcódigo (MIS, microcode instruction sequencer), el cual funciona como unidad microprogramada. La salida de ID1 o MIS se introduce en la segunda etapa de decodificación, ID2, es un bloque de hasta seis microoperaciones a la vez. En este punto, hay una segunda ocasión para predecir saltos. Las microoperaciones encoladas en ID2 pasan a través de una fase de renombramiento de registro (RAT, register allocator). El RAT transforma las referencias a lo 16 registros de la arquitectura. Después el RAT introduce las microoperaciones revisadas al buffer de reordenación (ROB, reorder buffer). Las microoperaciones entran al ROB en orden; después son enviadas desde el ROB a la unidad de envío/ejecución sin orden. Operación unidad de envío/ejecución La figura 5.4 es un esquema simplificado de la unidad de envío/ejecución del Pentium II. La central de reservas (RS, reservation station) es responsable de recuperar las microoperaciones del ROB., enviándolas a su ejecución y guardando los resultados de nuevo en el ROB. La RS busca en el ROB microoperaciones cuyo estado indique que la microoperación dispone de todos sus operandos. Si está disponible la unidad de ejecución que necesita una microoperación, la RS capta esa microoperación y la envía a la unidad de ejecución conveniente. Se pueden enviar hasta cinco microoperaciones en un ciclo. Hay cinco puertos que unen la RS a las cinco unidades de ejecución. El puerto 0 se usa para instrucciones con enteros y coma flotante, con la excepción de las operaciones sencillas con enteros y la gestión de las predicciones de saltos 74 erróneas que se asignan al puerto 1. Las unidades de ejecución MMX se asignan también a estos puertos. Los puertos restantes se utilizan para cargas y almacenamientos en memoria. Cuando se completa una ejecución, se actualiza la entrada adecuada del ROB, y la unidad de ejecución queda disponible para otra microoperación. Puerto 4 A/desde ROB C e Puerto 3 n t r a Puerto 2 l Unidad de ejecución de almacenamientos Unidad de ejecución de almacenamientos A/desde la cache de datos Unidad de ejecución de cargas d e Desplazador MMX ALU MMX R e s e r v a s Puerto 1 IEU (sencillas) Y JEU ALU MMX Multiplicador MMX IEU (complejas) Puerto 0 FPU (complejas) FPU (sencillas) Figura 5.4. Unidad de envío/ejecución del Pentium II Unidad de Retiro La unidad de retiro (RU, retire unit) va procesando el buffer de reordenación para entregar los resultados de la ejecución de instrucciones. En primer lugar la RU debe tener presentes los fallos en las predicciones de salto, y las microoperaciones que se hayan ejecutado pero para las cuales los saltos precedentes no se hayan validado. Una vez que se determina que una microoperación se ha ejecutado y no es vulnerable a eliminación debido a un fallo de predicción se marca como lista para ser retirada. Cuando se ha retirado la instrucción del Pentium previa, y todas las microoperaciones de la siguiente instrucción se han marcado como listas para ser retiradas, la RU actualiza los registros de la arquitectura afectados por esta instrucción, y quita del ROB la microoperación. 75 Ejemplo 5.5: Mejoras incorporadas al sistema de memoria del 80486. Dada la disponibilidad de sistemas de memoria muy grandes, y debido a que los costos de los circuitos son mínimos, muchos fabricantes de tarjetas de memoria han agregado la verificación de paridad a sus tarjetas de memoria RAM. Esto se pone de manifiesto al comparar el sistema de memoria del microprocesador 80386 y del 80486. Ambos sistemas contienen 4 GB, pero el sistema de memoria del 80486 incluye un generador / detector de paridad interno, para determinar si un dato es leído correctamente de una localidad de memoria. Ejercicios propuestos 1.- Explique cómo el modo pipeline alarga el tiempo de acceso para muchos accesos de memoria en un sistema basado en el microprocesador 80386. 2.- El avance de la tecnología ha traído consigo la aparición de una cantidad importante de nuevos bienes y servicios de carácter tecnológico, como los móviles, ordenadores, los servicios de Internet, etc. El desarrollo de la investigación e innovación permite la constante actualización y renovación del sector tecnológico, tal es el caso de la potencia de los microprocesadores la cual se duplica cada 18 meses. Con base a la información anterior analice la evolución de la velocidad de los microprocesadores Intel y describa las mejoras del desempeño obtenidas en la construcción de computadoras personales. Consulta en otros libros [Sayers 1995] trata arquitecturas prácticas de microprocesadores de 8, 16 y 32 bits. [Tokheim, 1995] incluye información sobre microprocesadores de la compañía Intel y Motorola. [Stallings 2000] Destaca las mejoras del diseño de microprocesadores tomando como ejemplos el microprocesador Pentium II y el PowerPC. Además se encuentra información sobre la arquitectura del microprocesador en cualquiera de los textos recomendados 76 Consulta en la Web http://www.duiops.net/hardware/micros/microshis.htm: Presenta la historia de los microprocesadores Intel. http://www.ac.uma.es/educacion/cursos/telecomunicacion/FundCompST/mas_ material/prestaciones/evolucion_80x86_n05.pdf: Muestra un cuadro en donde se resume la evolución de la familia de microprocesadores Intel. http://petra.euitio.uniovi.es/~i1766818/TUTOR/TUTOR06.htm#1: Describe de una manera muy sencilla los microprocesadores Intel a partir del modelo 80486. Ejercicios de Autoevaluación 1.- Si se compara la arquitectura del microprocesador 80386 con la del 80486 no se encontrará diferencias. Sin embargo el tiempo de ejecución de las instrucciones varía significativamente de un microprocesador a otro. Con base a la información analice cómo ha evolucionado el tiempo de ejecución de las instrucciones en estos microprocesadores para la mejora del desempeño. 2.- La unidad de coma flotante del microprocesador Pentium se ha rediseñado totalmente respecto a la que usa el 80486. Este desarrollo ha ocasionado la ejecución más rápida de operaciones aritméticas y de carga de datos. Tome como base lo antes expuesto y realice lo siguiente: - Estudie la construcción de la unidad de coma flotante en el Pentium II y describa las mejoras incluidas en su construcción para un mejor desempeño. Respuesta a los Ejercicios de Autoevaluación 1.- En el 80486 casi la mitad de las instrucciones son ejecutadas en un período de reloj, en vez de los dos períodos que necesita el 80386 para ejecutar instrucciones similares. 2.- La unidad de coma flotante del Pentium II, hace uso de nuevos algoritmos que aceleran la ejecución de las operaciones e incluye nuevos elementos de hardware dedicados, como son: un multiplicador, un sumador y un divisor. 77 UNIDAD 6 El Coprocesador Aritmético y la Tecnología MMX. Los procesadores del tipo 8086 solo podían realizar operaciones aritméticas con números enteros. Para los fraccionarios debían utilizar complicados artificios, por lo que desde el principio se crearon procesadores específicos y costosos para operaciones aritméticas con números fraccionarios. Puesto que la CPU no hace otra cosa que cálculos, el estudiante podría estar preguntándose por qué necesita ayuda para realizarlos. Lo que ocurre es que la CPU solo puede llevar a cabo operaciones aritméticas básicas con números enteros, para procesar operaciones con valores fraccionarios, requiere bastante tiempo lo que disminuye su velocidad considerablemente, debido especialmente a que la CPU tiene que ejecutar también otras tareas simultáneamente. En aquellos campos de aplicación donde se requieren muchas posiciones decimales y los errores de redondeo deben de mantenerse tan insignificantes como sea posible, resulta imprescindible la utilización de un coprocesador aritmético. A partir de la introducción del 80486, Intel incorporó el coprocesador aritmético junto con el procesador principal, por lo que su existencia dejó de ser opcional, convirtiéndose en estándar. Con cada generación de CPU utilizada en sistemas de computadoras personales Intel, también introducía su correspondiente coprocesador. La unidad 5 del presente material incluye el estudio del funcionamiento de la familia de coprocesadores aritméticos etiquetada como 80X87. También se incluye en esta unidad el estudio de la tecnología MMX, introducida por Intel en su línea de procesadores Pentium. Aunque no se pueda considerar la tecnología MMX como un procesador en si mismo, es uno de los mayores pasos que ha dado Intel. Este realce incluye 57 nuevas instrucciones muy optimizadas para tareas multimedia, estas instrucciones usan una técnica conocida como SIMD (single-instruction, multiple-data), es decir una secuencia de instrucciones y múltiples secuencias de datos que posibilita efectuar la misma operación, tal como una suma o una multiplicación con varios elementos de datos a la vez Objetivo de la Unidad 6: Analizar programas que resuelvan problemas aritméticos, para la descripción de la operación del coprocesador aritmético o de la tecnología MMX. Contenido de la Unidad 5: El contenido de la unidad contempla el estudio de los siguientes temas: Formato de datos y arquitectura del coprocesador aritmético. Conjunto de instrucciones y programación del coprocesador aritmético. La tecnología MMX: Tipos de datos y conjunto de instrucciones. 78 Actividades recomendadas para el estudio del contenido de la unidad 6. 1.- Examine la tabla 6.1, en ella puede identificar las lecturas de los temas contentivos de la unidad 6: TÍTULO MATERIAL DE REFERENCIA CONTENIDO CAPITULO Formato de datos para el coprocesador aritmético. Arquitectura de 80X87. El texto Los El Coprocesador Microprocesadores Conjunto de instrucciones. Aritmético y la Intel, B. B. Brey. Tecnología MMX. Programación con el coprocesador aritmético. . 14 Introducción a la tecnología MMX. Tipo de datos e instrucciones. Tabla 6.1 2.- Una vez leído el contendido indicado en la tabla 5.1, usted estará en capacidad de responder lo siguiente: 2.2 ¿Qué tipos de datos maneja el coprocesador? 2.8 ¿Qué tipos de números flotantes soporta el coprocesador? 2.9 ¿Cuáles son las directivas que emplea el coprocesador para almacenar datos? 2.10 ¿Para qué tipo de aplicaciones están diseñadas específicamente las instrucciones MMX? 3.- Estudie los siguientes contenidos teóricos a través de los cuales complementará los conocimientos adquiridos con las lecturas indicadas en la tabla 6.1: El Coprocesador Aritmético Es un microprocesador de instalación opcional, también denominado Unidad de Punto Flotante, que auxilia al microprocesador en el uso eficiente de programas de graficación, cálculos matemáticos complejos y diseño, lo cual al 79 especializarse en dichas funciones acelera la velocidad con que una computadora puede responder a necesidades tan sofisticadas. Los coprocesadores están todavía mas críticamente ajustados a la velocidad del reloj que los procesadores normales. Por lo tanto, debe asegurarse que cualquier coprocesador que se seleccione para un sistema esté diseñado para manejar la frecuencia de reloj de su computadora. Fuente: El autor. Instrucción Simple, Múltiples Datos (SIMD) Las aplicaciones de multimedia y comunicaciones de hoy en día con frecuencia usan ciclos repetitivos que, aunque ocupan el 10 por ciento o menos del código total de la aplicación, pueden ser responsables hasta por el 90 por ciento del tiempo de ejecución. El proceso denomina SIMD (Single Instruction Multiple Data) hace posible que una instrucción realice la misma función sobre múltiples datos, en otras palabras, las instrucciones ejecutan las operaciones simultáneamente en varios datos en paralelo. Un ejemplo de su funcionamiento en la realidad es con el vídeo: En los procesadores conocidos hasta la llegada del MMX llegaban 8 pixeles de datos gráficos de una en una y se procesaban separadamente. En los procesadores MMX, los 8 pixeles llegan al procesador en un paquete de 64 bits y se procesan a todos en una sola instrucción. Otro ejemplo lo tenemos aquí, en una muestra de sonido de 16 bits, podemos manipular hasta 4 muestras al mismo tiempo. Sobre una aplicación estándar, el rendimiento mejora entre un 10 y un 20 por ciento, pero cuando el programa ha sido diseñado específicamente para utilizar todo el potencial del MMX, el rendimiento puede llegar al 40 o 60 por ciento. http://neutron.ing.ucv.ve/revista-e/No3/Ferreira.html Pixel Píxel es la abreviatura de la expresión inglesa Picture Element (Elemento de Imagen), y es la unidad más pequeña que encontraremos en las imágenes compuestas por mapa de bits. El píxel es la unidad mínima en que se divide la retícula de la pantalla del monitor y cada uno de ellos tiene diferente color. Su tono de color se consigue combinando los tres colores básicos (rojo, verde y azul) en distintas proporciones. Un píxel tiene tres características distinguibles: Forma cuadrada Posición relativa al resto de píxeles de un mapa de bits. Profundidad de color (capacidad para almacenar color), que se expresa en bits. http://www2.canalaudiovisual.com/ezine/books/jirimag/1Imag21.htm Instrucciones MMX del Pentium Este conjunto de instrucciones está orientado a programación multimedia. Los datos de vídeo y audio suelen representarse mediante vectores o matrices 80 grandes, compuestos por datos de longitud reducida (8 o 16 bits), mientras que las instrucciones convencionales operan normalmente con datos de 32 o 64 bits. Estos son algunos ejemplos: En gráficos y en vídeo, cada escena consiste en una matriz de puntos de imagen, y hay 8 bits para cada punto de imagen u 8 bits para cada componente de color (rojo, verde, azul) del punto de imagen. Las muestras de audio suelen estar cuantizadas con 16 bits. Para algunos algoritmos de gráficos de 3D es común emplear 32 bits para los tipos de datos básicos. Para posibilitar le procesamiento paralelo con estos tamaños de datos, en MMX se definen tres nuevos tipos de datos. Tienen una longitud de 64 bits, y constan de varios campos de datos más pequeños, cada uno de los cuales contiene un entero de coma fija. Estos tipos de datos son los siguientes: • • • Byte empaquetado: Ocho bytes en una cantidad de 64 bits. Palabra empaquetada: Cuatro palabras de 16 bits empaquetadas en 64 bits. Palabra doble empaquetada: Dos palabras dobles de 32 bits empaquetadas en 64 bits. [Stallings, 2000] 4.- En el siguiente ejemplo se muestra el uso de la instrucción PADDB de la tecnología MMX disponible en el Pentium II: Ejemplo 6.1: Suma con saturación mediante el uso de la instrucción PADDB. La instrucción PADDB toma como operando un byte empaquetado, y realiza en paralelo sumas con cada posición de byte para producir un byte empaquetado de salida. Una característica inusual que presenta el conjunto de instrucciones MMX es la introducción de la aritmética de saturación. Con la aritmética sin signo ordinaria, cuando una operación produce un desbordamiento (es decir, se produce una acarreo en la posición del bit mas significativa) el bit se trunca. Considere, por ejemplo las dos palabras en hexadecimal, F000H y 3000H. Su suma se expresaría como: F000H = +3000H = 1111 0000 0000 0000 0011 0000 0000 0000 1 0010 0000 0000 0000 = 2000H Acarreo 81 Si los dos números representaban intensidad de imagen, el resultado de la suma hace que la combinación de zonas sombreadas oscuras aparezca como más clara. Esto no es lo que se pretende normalmente. Mediante la aritmética con saturación, cuando la suma produce un desbordamiento, o la resta produce un desbordamiento negativo, el resultado se fija respectivamente al mayor o al menor valor representable. Para el ejemplo dado, la aritmética con saturación daría como resultado: F000H = +3000H = 1111 0000 0000 0000 0011 0000 0000 0000 1 0010 0000 0000 0000 = 2000H Acarreo 1111 1111 1111 1111 = FFFFH Suma con saturación 5.- En el ejemplo 6.2 tomado de [Stallings, 2000], se muestra el uso de las instrucciones MMX en una función típica de video. Ejemplo 6.2: Composición de una imagen en una función típica de vídeo mediante el uso de la tecnología MMX. Una función típica de vídeo es el efecto de desvanecimiento o extinción progresiva (fade-out) y reaparición (fade-in), mediante el cual una imagen A se deshace y convierte gradualmente en otra B. Las dos imágenes se combinan mediante una media ponderada: Pixel_resultado = Pixel_A x fade + Pixel_B x (1 – fade) Este cálculo se efectúa para cada posición de punto de imagen en A y B. Si se produce una secuencia de video mientras fade está cambiando progresivamente desde 1 a 0 (con una escala ajustada a un entero de 8 bits), el resultado es una transformación paulatina de la imagen A en la imagen B. La figura 6.1 muestra para un conjunto de puntos de imagen, la secuencia de pasos necesaria. Las componentes de pixel de 8 bits son transformadas en elementos de 16 bits para adaptarlas al tamaño de las multiplicaciones MMX de 16 bits. 82 Alpha Alpha Azul Azul Verde Verde Rojo Rojo Imagen A Imagen B Ar3 1. Desempaquetar bytes de componentes de pixel rojo de las imágenes A y B Ar3 Ar2 Ar2 Ar1 Ar1 Ar0 Br3 Ar0 Br3 Br2 Br2 Br1 Br1 Sustracción 2. Restar la imagen B de la imagen A r3 r2 r1 r0 X X X X fade fade fade fade 3.Multiplicar el resultado por el valor de fade fade x r3 4.Sumar los pixels fade x r2 + + Br3 Br2 fade x r1 + + Br1 Br0 fade x r0 de la imagen B 5.Volver a empaquetar en bytes los nuevos píxels compuestos nuevor3 nuevor2 nuevor1 r3 r2 nuevor0 r1 r0 Figura 6.1 Composición de imagen en una representación de planos de colores Br0 Br0 83 A continuación se presenta el código MMX que ejecuta las operaciones antes indicadas: PXOR MOVQ MM7, MM7 MM3, fad_val MOVD MM0, imagenA MOVD MM1, imagenB PUNPCKBLW PUNPCKBLW PSUBW PMULHW MM0, MM7 MM1, MM7 MM0, MM1 MM0, MM3 PADDDW PACKUSWB MM0, MM1 MM0, MM7 ; poner a cero MM7 ; cargar el valor de fade replicado 4 veces ; cargar las componentes de rojo de 4 pixels de la imagen A ; cargar las componentes de rojo de 4 pixels de la imagen B ; desempaquetar a 16 bits 4 pixels ; desempaquetar a 16 bits 4 pixels ; restar la imagen B de la imagen A ; multiplicar los valores de la resta por el valor de fade ; sumar el resultado a la imagen B ; empaquetar en bytes los resultados de 16 bits Ejercicios propuestos 1.- La siguiente línea corresponde a una sección de un programa escrito para ser ejecutado por el coprocesador aritmético: FST DATA Analice la sección del programa dado y describa cómo la ejecuta el coprocesador. Asuma que DATA está definida como una localidad de memoria de 64 bits. 2.- Describa cómo ocurre la saturación con signo, si las cantidades a sumar son de un byte. Consulta en otros libros [Stallings 2000] Destaca las mejoras del diseño de microprocesadores tomando como ejemplos el microprocesador Pentium II y el PowerPC. 84 Ejercicios de Autoevaluación 1.- El siguiente conjunto de instrucciones, ha sido extraído de un programa desarrollado para ser ejecutado por el coprocesador aritmético: .MODEL SMALL . . . RAD .DD 2.34 . . FLD RAD . . . Analice la sección del programa dado y describa que función realiza la instrucción FLD RAD. 2.- A continuación se presenta la sección de un programa que emplea instrucciones MMX, tales como: PADDB MM1, MM2 Para la instrucción dada, responda lo siguiente: • • ¿Qué tipo de operación permite realizar? Describa qué función realiza esta instrucción. Respuesta a los Ejercicios de Autoevaluación 1.- En la sección del programa dado, la instrucción FLD RD, carga el valor almacenado en RAD en ST. 2.- Solución: • • La instrucción permite realizar la operación aritmética de la suma. Esta instrucción suma el contenido completo de 64 bits del registro MM2 al contenido del registro MM1, byte por byte. El resultado es ubicado en MM1.