Buscar en este blog

Tema 3.b: ¿Cómo afectan las decisiones de organización de la memoria caché a su rendimiento?


Ya en otro artículo hicimos referencia muy por encima a la jerarquía de memoria. En este vamos a intentar explicar con un poco más de detalle el concepto que hay detrás. Este tema resulta engañosamente sencillo y se complica muy rápidamente en cuanto profundizamos un poco, así que como estos artículos son más bien de tipo divulgativo intentaré no perderme en tecnicismos y tecnología o conceptos puramente electrónicos.

Para que un procesador pueda hacer un trabajo debe realizar infinidad de operaciones sobre una serie de operandos, la memoria de todo el sistema existe principalmente para proveer al procesador de operandos y almacenar los resultados de las operaciones que efectúa sobre ellos. La situación ideal es que el procesador pueda leer esos datos de forma instantánea pero los límites de la tecnología imponen una velocidad máxima o un tiempo de acceso mínimo que no es posible mejorar sin cambiar la tecnología.

En vista de eso la primera solución que se nos ocurre es usar siempre el tipo de memoria más rápido para construir nuestro sistema. Esto se choca de frente con un problema: el coste. Aparte de otras consideraciones técnicas, el principal problema es que cuanto más rápida es una memoria, más cara resulta y menos densidad de información tiene. El siguiente gráfico extraído de Wikipedia lo expresa muy claramente:

De los apuntes de la asignatura podemos extraer una transparencia que pone de relieve los saltos en velocidades que hay de un escalón de memoria al siguiente:


Como ya habíamos comentado antes, el orden de la memoria desde dentro del procesador hacia fuera es (con una aproximación de los saltos):

Registros -> Velocidad x (1/4), Tamaño x 8 -> Caché -> Vx(1/100) , Tx500 -> Principal -> Vx(1/1000) , Tx300 -> Virtual

La idea básica detrás de la jerarquía de memoria es muy simple y a la vez muy ambiciosa: organizar la memoria de forma que tengamos un sistema que funcione casi a la velocidad de la más rápida de ellas pero con prácticamente el coste de la más barata.

¿Cómo hacemos esto? Eso es lo que veremos ahora con diversas técnicas pero la idea más extendida es usar los periodos de menor actividad para traer los datos de las memorias más lentas hacia las más rápidas con antelación a que el procesador las necesite, de esta forma el procesador sólo tiene que esperar a que los datos le lleguen de los registros en vez de tener que parar la ejecución mientras espera que se extraigan datos de la memoria virtual.

Hoy en día la memoria principal es tan barata y se instalan módulos tan grandes (no es raro ver configuraciones de 4GB x 2 módulos x 3 canales = 24 GB) que a simple vista uno podría creer que se podrían cargar todos los datos necesarios para correr un programa en la memoria principal, sin tener que hacer un solo acceso a disco duro durante su ejecución.

Cuando el procesador necesita un dato primero lo busca en la memoria más cercana, si lo encuentra se produce un acierto y el tiempo empleado es el tiempo necesario para leer de ese tipo de memoria (latencia), que es siempre menor que el correspondiente de escritura. Si no se encuentra se produce un fallo y entonces se traerá del siguiente nivel de memoria un bloque de datos entre los cuales deberá estar el solicitado. El tiempo empleado en esta operación es bastante superior al del caso de acertar, como puede deducirse de las figuras que ya hemos visto. A este tiempo empleado le llamamos penalización por fallo.

El tiempo medio de acceso se puede calcular entonces de acuerdo a la siguiente fórmula (de los apuntes de AGM):


En base a la forma de operar de los procesadores y programas actuales, se pueden postular dos principios que después servirán para diseñar optimizaciones a la jerarquía: el principio de localidad temporal que nos dice que habitualmente los datos usados volverán a usarse en un corto espacio de tiempo, y el de localidad espacial que nos dice que normalmente usaremos datos adyacentes a uno que ya hayamos extraído.

Conviene antes mencionar que en toda jerarquía se deben respetar las propiedades de inclusión (que se consigue replicando todos los datos de la memoria más pequeña en el resto de memorias de la jerarquía) y coherencia (que todas las copias de la misma información sean iguales). 

Vamos a plantar las optimizaciones dividiendo los enfoques en:

-        Política de emplazamiento:
·        Directa
·        Asociativa
·        Por conjuntos
 
-        Política de reemplazamiento
·        Aleatoria
·        LRU (Least Recently Used)
·        FIFO (First In First Out)

-        Política de escritura
·        Escritura directa
·        Post-escritura
·        Con asignación en escritura
·        Sin asignación en escritura

Política de emplazamiento: la memoria caché se divide en marcos que pueden alojar bloques de información que provengan de la memoria principal. En la memoria directa le corresponde un único marco donde puede alojarse, en la asociativa puede alojarse en cualquier marco y en la de por conjuntos los marcos se asocian por conjuntos de manera que cada bloque de datos puede alojarse en cualquiera de los marcos que hay en el conjunto que le corresponde.

Política de reemplazamiento: gestiona las actuaciones en caso de fallo; debemos introducir nuevos datos en la memoria pero ¿qué datos eliminamos para hacer sitio? Podemos hacerlo aleatoriamente, eliminando los datos que más tiempo llevan sin usarse o eliminando los que más tiempo llevan en memoria. Vuelvan a leer esa última frase; parece lo mismo pero no lo es.

Política de escritura: las lecturas de memoria son más frecuentes que las escrituras, pero estas últimas son más lentas con lo que conviene gestionarlas adecuadamente. En el modo de escritura directa cada vez que se modifica un bloque se escribe en la memoria caché y en la principal, en el modo post-escritura sólo se modifica en la caché  y se espera a que el bloque sea reemplazado para modificar la memoria principal, además se tiene un bit que indica si se ha modificado ese dato o no en la caché de manera que se actualice en memoria principal sólo cuando cambie.

Para evitar penalizaciones por fallos en la escritura estos pueden ignorarse o no dependiendo del criterio: en el modo con asignación de escritura se tratan igual que los fallos de lectura (es decir; se resuelven) y en el modo “sin” el bloque se modifica directamente en la memoria principal y no se trae a la caché.

Tema 3.d: Tecnologías de memoria DRAM utilizadas en tarjetas gráficas y videoconsolas


DRAM (Dynamic Random Access Memory) es un tipo de memoria dinámica de acceso aleatorio que se usa principalmente en los módulos de memoria RAM y en otros dispositivos, como memoria principal del sistema. Se denomina dinámica, ya que para mantener almacenado un dato, se requiere revisar el mismo y recargarlo, cada cierto período, en un ciclo de refresco. Su principal ventaja es la posibilidad de construir memorias con una gran densidad de posiciones y que todavía funcionen a una velocidad alta. En la actualidad se fabrican integrados con millones de posiciones y velocidades de acceso medidos en millones de bit por segundo. Es una memoria volátil, es decir cuando no hay alimentación eléctrica, la memoria no guarda la información. Inventada a finales de los sesenta, es una de las memorias más usadas en la actualidad.

"Random Access" indica que cada posición de memoria puede ser leída o escrita en cualquier orden. Lo contrario sería el acceso secuencial, en el cual los datos tienen que ser leídos o escritos en un orden predeterminado. Por ejemplo, un disco usa el acceso aleatorio, mientras que una cinta de ‘cassette’ usa un acceso secuencial.

Las posiciones de memoria están organizadas en filas y columnas. Cuando accedemos a la RAM empezamos especificando la fila, después la columna y por último decimos si deseamos escribir o leer en esa posición. En ese momento la RAM pone los datos de esa posición en la salida si el acceso es de lectura, o coge los datos y los almacena en la posición seleccionada si el acceso es de escritura.


Gráficas con memoria dedicada en RAM: 

Es el tipo de memoria utilizada por las gráficas integradas en placa base, de por ejemplo, ordenadores portátiles. En este tipo de gráfica la propia BIOS aparta la RAM que va a ser utilizada como memoria gráfica, siendo posible en muchos casos definir el tamaño de esta, aunque siempre dentro de unos parámetros mínimos y máximos. Este es el motivo por el que, si tenemos una placa base con una gráfica integrada de 128MB y una memoria RAM instalada de 1024MB el sistema nos va a indicar que tenemos 896MB de memoria RAM, si bien la BIOS nos va a reconocer 1024MB (que es el total de memoria RAM que tenemos instalada).

Gráficas con memoria propia: 

Se trata de gráficas que incorporan toda su memoria en la propia tarjeta. Este sistema es el utilizado por casi todas las tarjetas gráficas ISA, VESA, PCI, AGP y PCIe. En este tipo de tarjetas gráficas la totalidad de la memoria está en la propia tarjeta. 

Memorias DRAM en Tarjetas Gráficas:

- DRAM EDO: Este tipo de memoria introduce datos mientras los de salida aún no están colocados en el BUS del sistema, usando una especie de buffer. La máxima velocidad de lectura de la memoria EDO RAM es de 5-2-2-2 ciclos y es difícil crear memorias de este tipo que funcionen a velocidades de reloj superiores a 66Mhz.

- VRAM: Esta memoria es exclusiva de vídeo. Esta memoria era muy similar a la EDO, la principal característica es que se podía acceder a memoria desde dos dispositivos a la vez, tenía un puerto dual, o leer y escribir al mismo tiempo.

- WRAM: Es una VRAM optimizada. Funciona del mismo modo, con puerto dual, pero tiene un tiempo de acceso más rápido y es más barato.

- SGRAM: Es un tipo de especialización de la memoria SDRAM (de ámbito general). Añade mejoras a la hora de escribir en un solo bit sin afectar a otros y utiliza la escritura de línea entera de un mismo "color". Tiene un único puerto de entrada y salida pero puede simular un doble puerto creando dos páginas de memoria.

- MDRAM: Esta arquitectura define la memoria como un conjunto de bloques pequeños (32 KB) en paralelo conectados a un bus. Esto conlleva poder trabajar con accesos a memoria en paralelo.

- 3DRAM: Memoria optimizada para 3D, que integra en la memoria una unida ALU para poder llevar a cabo operaciones (Z-Buffer, por ejemplo) en la misma memoria.

- GDDR (1, 2, 3, 4, 5): Son memorias basadas en la tecnología DDR (dos transferencias por ciclo, en bajada y subida) pero optimizadas para tarjetas gráficas. Los distintos tipos son sucesivas mejoras en rendimiento, velocidad y amplitud de ancho de banda, pero la arquitectura sigue siendo la misma. Las tarjetas gráficas de altas prestaciones actuales usan GDDR5 y las de baja GDDR3. Por poner un ejemplo las tarjetas de memoria GDDR5 tienen velocidades en torno a los 900MHz - 1GHz, con acceso directo al procesador gráfico y un ancho de banda enorme (en el caso de la NVidia 8800GTS es de 62GB/s). 


Chips de memoria, en este caso GDDR4.


Según podemos observar los avances en memoria se dan de manera paralela entre memoria para PC y para gráficos, siempre siendo la de gráficos optimizada. Aunque es evidente que las potentes aplicaciones de diseño gráfico, arquitectura y modelado 3D, así como el entretenimiento de los videojuegos, han hecho que las tarjetas gráficas crecieran a pasos acelerados. Después de catalogar los diferentes tipos de Memorias DRAM en Tarjetas Gráficas pasaremos a analizar qué tipos de memoria utilizan las consolas de la actual generación:

- XBOX 360: GDDR3 RAM a 700 Mhz, es una arquitectura convencional, no es que la tarjeta gráfica sea de baja gamma, simplemente es que no les hace falta más.

Xenos - La consola Microsoft Xbox 360 contiene un chip de gráficos personalizado producido por ATI, conocido como "R500", "C1", o más a menudo como Xenos. Entre sus características se incluye DRAM incrustada en el chip (eDRAM). El Xenos también es la primera gráfica con la "Verdadera Arquitectura de Shader Unificada", que carga y distribuye dinámicamente el proceso de píxeles y vértices en unidades de igual procesamiento. Esto difiere mucho de las anteriores generaciones de chips gráficos para PC que tienen bancos separados de procesadores diseñados para una tarea individual específica (vértice/fragmento). Otra característica presentada en Xenos es la transformación de superficies en mosaicos para dividir una superficie en triángulos pequeños, similares a TRUFORM en términos de funcionalidad, que es una característica avanzada que ya no se incluye en la especificación DirectX 10 actual. La última generación de GPU Radeon R600 básico hereda la mayoría de las características presentes en Xenos, excepto eDRAM.

- PS3: Tiene dos módulos de memoria. Uno GDDR3 para la GPU ( con características similares a la XBOX) y otra XDRRAM, memoria de tipo Rambus RAM que se basa en una comunicación serie de alta velocidad y prestaciones.

- Nintendo Wii: GDDR3 para trabajar con gráficos y una ARAM (memoria de bajas prestaciones) dedicada exclusivamente al audio, para liberar la GDDR3 de datos de audio, aunque por ejemplo ‘El Nintendo GameCube’ (que  es una consola de videojuegos en formato cúbico que lleva un procesador especialmente optimizado de 485 MHz con alta tecnología de semiconductores de cobre) utiliza ‘Flipper’ que contiene un acelerador 3D desarrollado por ArtX, Inc, una compañía adquirida por ATI durante el desarrollo de la GPU. ‘Flipper’ tiene una capacidad similar a un chip acelerador de vídeo de Direct3D 7. Consta de 4 canales de renderizado, T&L por hardware, y un soporte limitado para Pixel Shader. El chip contiene una innovadora memoria 1T-SRAM de 3 MiB para el uso como almacenamiento ultra-rápido de baja latencia (6,2 ns) para texturas y el framebuffer/Z-buffer, que permite 10,4 GB/segundo de ancho de banda. Flipper fue diseñado por miembros del equipo de diseño del Nintendo 64 Reality coprocessor, quienes venían de SGI. El equipo de Flipper pasó a tener mucha influencia en el desarrollo de la Radeon 9700. El sucesor de ‘Flipper’ fue ‘Hollywood’, que es un componente de la última consola de juegos de Nintendo; Wii.

Tema 3.e: Análisis de la jerarquía de memoria de una arquitectura comercial: el Emotion Engine


En otros artículos se ha hecho referencia a la arquitectura de una CPU y de una GPU desde un punto de vista bastante global. En el artículo de hoy el objetivo es centrarse únicamente en la jerarquía de memoria y para ello se ha escogido el Emotion Engine, el “procesador” que puede encontrarse en la Playstation 2.

La Playstation 2 salió al mercado en el año 2000 y a día de hoy sigue siendo la que mayor número de unidades ha vendido, además de esto la comunidad de usuarios activos es muy grande, como lo demuestra el hecho de que se sigan sacando juegos para esta plataforma. Sony ha confirmado que mientras haya demanda seguirá dándole soporte, y ya van 12 años…

La vigencia de este “procesador” no es sólo por el uso que aún tiene la PS2, sino también venía integrado en las primeras versiones de la PS3 que se vendieron en Japón y Estados Unidos para mantener la retro compatibilidad con los juegos anteriores a dicho sistema.

La arquitectura en general de la Playstation 2 es bastante diferente de la de un ordenador personal convencional, está mucho más enfocada a aplicaciones multimedia donde se maneja gran cantidad de datos con una vida muy corta y con un número reducido de instrucciones. Esto tiene que afectar necesariamente a la forma en la que se organiza la memoria del conjunto.

En los siguientes esquemas se puede ver la disposición general:

El Emotion Engine está por tanto compuesto de un núcleo basado en la CPU MIPS III R5900 con 32 registros de 128 bits cada uno, una caché de nivel 1 de 16 Kilobytes para instrucciones y 8 para datos. La Vector Unit 0 comparte con este núcleo 16 Kilobytes de Scratchpad RAM (SPRAM). Aunque algunas personas piensan que el R5900 es un procesador de 128 bits en realidad trabaja con paquetes de 4 datos de 32 bits cada uno que almacena en un único registro de 128 bits. 

La memoria “Scratchpad” está orientada como un lugar de almacenamiento temporal de datos en el que la VU0 y el núcleo realizan operaciones sobre el mismo bloque de información antes de mandarlo más adelante en el cauce.

Las distintas unidades que componen esta arquitectura se asocian por módulos para acometer tareas definidas según este esquema:
Todos los componentes se interconectan entre sí con un bus de 128 bits.
La memoria principal es de 32 MB de RD RAM en modo directo, con un ancho de banda de 3.5 GB/s.

Ambas unidades vectoriales (VU0 y VU1) tienen una arquitectura muy similar que desde el punto de vista de la memoria se compone de 32 registros de coma flotante de 128 bits, 16 registros de 16 bits para operaciones con enteros y una memoria caché local para datos de 4 KB en el VU0 y de 16 en el VU1.

Con el núcleo del sistema trabajando a 300 MHz el bus interno de datos proporciona un ancho de banda teórico de 2,4GB/s. Las transferencias DMA que se hacen sobre este bus consisten en paquetes de 8 palabras de 128 bits cada una que nos dan un ancho de banda usable de 2 GB/S.

Bibliografía:

Tema 3.f: Explicación en detalle de las técnicas de gestión de E/S


Los dispositivos de E/S (Entrada-Salida) son aquellos a través de los cuales un humano u otro dispositivo intercambian información con un ordenador. Como ejemplos más claros de dispositivos de entrada están el ratón o el teclado, y de salida pueden ser por ejemplo una impresora. 

La pantalla se puede considerar un dispositivo de salida en cuanto a que muestra datos al usuario pero es realmente la tarjeta gráfica el dispositivo de salida y la pantalla sólo una extensión del mismo.

La forma en la que gestionemos la comunicación con estos dispositivos podrá tener un mayor o menor efecto en el rendimiento global del ordenador.

Las consideraciones que hay que tener en cuanto al diseñar un sistema de E/S (I/O: Input-Output en inglés) son las siguientes:

  • -        La necesidad de los agentes humanos de introducir información y recibir información en respuesta
  • -        La necesidad de los dispositivos de introducir información y recibirla
  • -        La necesidad de los ordenadores de comunicarse entre sí en red

En el primer caso la cantidad de información introducida por el usuario es muy pequeña pero se requiere que la respuesta sea inmediata (introducir un retardo de 0,5 segundos entre la pulsación de una tecla y la aparición del carácter correspondiente en un procesador de textos es ciertamente frustrante para cualquier usuario). 

En el segundo sin embargo la cantidad de información transmitida es mucho mayor y debe ser tratada en bloques para que resulte eficiente. La velocidad de emisión de información puede no ser la misma que la de consumo y para lidiar con ello existen distintos tipos de buffers.

A continuación vamos a ver los distintos modos de gestión de los eventos de E/S:
-        E/S programada: en este modo el dispositivo lanza un evento y el procesador se pone en modo espera hasta que se resuelve, preguntando constantemente cuál es el estado del dispositivo mientras permanece inactivo. Se puede ver en el siguiente esquema:


-        E/S de sondeo: en este modo el sistema pregunta por turno a cada dispositivo si está listo para emitir o recibir datos. En caso afirmativo gestiona el evento y pasa al siguiente. Este modo suele usarse en sistemas de red para interrogar a los puertos. Un esquema de su lógica puede verse a continuación:


-        E/S de interrupción: como los dispositivos son normalmente mucho más lentos que los procesadores actuales, en otros modos de gestión se pueden gastar muchos ciclos de procesador esperando la respuesta de un dispositivo interrogado. La técnica de interrupción intenta extraer rendimiento de esta situación dejando que el procesador continúe con la ejecución del resto del proceso hasta que el dispositivo está listo para funcionar, en ese momento lanza una interrupción que detiene la ejecución del programa, se guarda el estado en que estaba, se resuelve la operación de E/S y se continúa. Debido a la diferencia de velocidades que hemos comentado antes esta suele ser una muy buena técnica pero dependiendo del número y tipo de dispositivos podemos llegar de nuevo a excesivas interrupciones que ralenticen al procesador de forma apreciable. Existen varios tipos de interrupción: internas, externas y por software.

-      E/S en modo DMA o Data Transfer: el acceso directo a memoria (DMA: Direct Memory Access) permite a cierto tipo de componentes de ordenador acceder a la memoria del sistema para leer o escribir independientemente de la CPU principal. Los subsistemas de hardware que utilizan DMA pueden ser: controladores de disco duro, tarjetas gráficas, tarjetas de red, tarjetas de sonido y tarjetas aceleradoras. También es utilizado para la transferencia de datos dentro del chip en procesadores con múltiples núcleos. Se puede ver su funcionamiento de forma esquemática en la siguiente figura:


Al usar esta técnica el dispositivo y la CPU pueden tener que competir por el acceso al bus, para ello existen varias formas de gestionarlo:
·        DMA por robo de ciclo
·        DMA por ráfagas
·        DMA transparente
·        DMA tipo scatter-gather

-        Procesadores de E/S: el procesador de E/S (IOP en inglés) está conectado al bus principal y ejecuta código propio para controlar la operación de E/S. Surgen para paliar inconvenientes como los que se detallan en la siguiente tabla:



Bibliografía:


Tema 3.h: Comparación de PCI-Express con PCI y AGP


PCI - Peripheral Component Interconnect (PCI, "Interconexión de Componentes Periféricos") consiste en un bus de ordenador estándar para conectar dispositivos periféricos directamente a su placa base. Estos dispositivos pueden ser circuitos integrados ajustados en la placa base o tarjetas de expansión que se ajustan en conectores. Es común en PCs, donde ha desplazado al ISA como bus estándar, pero también se emplea en otro tipo de ordenadores. El bus PCI tiene 32 bits de comunicaciones que trabajan a una frecuencia de 33 MHz, por lo tanto la tasa de transferencias teórica es de 133 Mbits/s. Velocidad de transferencia suficiente para cualquier tarjeta gráfica 2D.

PCI (Interconexión de Componentes Periféricos)

Hay diferentes tipos de PCI dependiendo de los requisitos electrónicos:

-PCI de 5 voltios para PC.
-PCI de 3.3 voltios, más usadas en ordenadores portátiles. Su ranura es diferente a la de 5 voltios.
-PCI Universales, seleccionan el voltaje automáticamente y se utilizan tanto en ordenadores de sobremesa como en portátiles.

Aparte de esto también existen distintas ranuras de acuerdo con los bits que se puedan transportar:
Ranuras de 32 bits: son las normales y más extendidas.
Ranuras de 64 bits: muy recientes, agregan 32 conectores más.

En el bus PCI el procesador puede trabajar en otras tareas más complejas y desentenderse de las tarjetas del PC como pueden ser manipulación de texturas, inteligencia artificial o cálculo de polígonos de escenas 3D.

AGP-( Accelerated Graphics Port o Puerto de Gráficos Acelerados)
Es un Bus para conectar periféricos a la placa base del equipo. Apareció por primera vez en mayo de 1997 para los chipsets Slot One. Luego se lanzó para los chips Super 7, con el objetivo de administrar los flujos de datos gráficos que se habían vuelto demasiado grandes como para ser controlados por el Bus PCI. De esta manera, el bus AGP se conecta directamente al FSB (Front Side Bus o Bus Frontal) del procesador y utiliza la misma frecuencia, es decir, un ancho de banda más elevado.

Los buses AGP trabajan a distintas frecuencias y voltaje (o tienen distintos modos de funcionamiento) pero hay más diferencias entre ellas que en el caso de las PCI.

AGP 1X, frecuencia de 66 MHz y tasa de transferencia de 264 MB/s con un voltaje de 3,3 V.
AGP 2X, frecuencia de 133 MHz y tasa de transferencia de 528 MB/s con un voltaje de 3,3 V.
AGP 4X, frecuencia de 266 MHz y tasa de transferencia de 1 GB/s con un voltaje de 3,3 o 1,5 V, para poder adaptarse al diseño de tarjetas gráficas.

AGP 8X, frecuencia de 533 MHz y tasa de transferencia de 2 GB/s con un voltaje de 0,7 o 1,5 V.

La interfaz AGP se ha creado con el único propósito de conectarle una tarjeta de video. Funciona al seleccionar en la tarjeta gráfica un canal de acceso directo a la memoria (DMA, Direct Memory Access), evitado así el uso del controlador de E/S. En teoría, las tarjetas que utilizan este bus de gráficos necesitan menos memoria integrada ya que poseen acceso directo a la información gráfica (como por ejemplo las texturas) almacenadas en la memoria central. Su coste es aparentemente inferior.

El bus AGP actualmente se utiliza exclusivamente para conectar tarjetas gráficas, por lo que únicamente suele haber una ranura. 

El puerto AGP es de 32 bit como PCI pero cuenta con notables diferencias como 8 canales más adicionales para acceso a la memoria RAM. Además puede acceder directamente a esta a través del NorthBrigde pudiendo emular así memoria de vídeo en la RAM. La velocidad del bus es de 66 MHz.

PCI Express (anteriormente conocido por las siglas 3GIO, en el caso de las "Entradas/Salidas de Tercera Generación") es un nuevo desarrollo del bus PCI que usa los conceptos de programación y los estándares de comunicación existentes, pero se basa en un sistema de comunicación serie mucho más rápido. Este sistema es apoyado principalmente por Intel, que empezó a desarrollar el estándar con nombre de proyecto Arapahoe para después de retirarse del sistema Infiniband.

Ranura de PCI-Express

El PCI Express tiene dos modos de velocidad:

-PCI-Ex 1x (133Mhz), para dispositivos como tarjeta de sonido, de TV, etc.
-PCI-Ex 16x (2128Mhz) para las tarjetas gráficas.

Comparando el AGP con el PCI-Express, una tarjeta gráfica en AGP con el rendimiento de una PCI Express, tendría que ser un hipotético AGP 16x.

El PCI-Express actualmente es el doble de potente que el AGP 8x en su versión para gráficas, y más veloz y el sustituto del PCI normal en su versión 1x. Está disponible en 5 formatos (x1 / x2 / x3 / x4 / x16) para los distintos anchos de banda.

Estructura del PCI Express

Este bus está estructurado como carriles punto a punto, full-duplex, trabajando en serie. En PCIe 1.1 (el más común en 2007) cada carril transporta 250 MB/s en cada dirección. PCIe 2.0 dobla esta tasa a 500 MB/s y PCIe 3.0 la dobla de nuevo (1 GB/s por carril).

Cada ranura de expansión lleva uno, dos, cuatro, ocho o dieciséis carriles de datos entre la placa base y las tarjetas conectadas. El número de carriles se escribe con una x de prefijo (x1 para un carril simple y x16 para una tarjeta con dieciséis carriles); x16 de 500MB/s dan un máximo ancho de banda de 8 GB/s en cada dirección para PCIE 2.x. En el uso más común de x16 para el PCIE 1.1 proporciona un ancho de banda de 4 GB/s (250 MB/s x 16) en cada dirección. En comparación con otros buses, un carril simple es aproximadamente el doble de rápido que el PCI normal; una ranura de cuatro carriles, tiene un ancho de banda comparable a la versión más rápida de PCI-X 1.0, y ocho carriles tienen un ancho de banda comparable a la versión más rápida de AGP.

Una ranura PCi Express 3.0 tiene 1 GB/s direccional y 2 GB/s bidireccional, por lo que logran en el caso de x16 un máximo teórico de 16 GB/s direccionales y 32 GB/s bidireccionales.

PCI Express está pensado para ser usado únicamente como bus local, aunque existen extensores capaces de conectar múltiples placas base mediante cables de cobre o incluso fibra óptica. Debido a que se basa en el bus PCI, las tarjetas actuales pueden ser reconvertidas a PCI Express cambiando solamente la capa física. La velocidad superior del PCI Express permitirá reemplazar casi todos los demás buses, AGP y PCI incluidos. 

PCI Express no es todavía suficientemente rápido para ser usado como bus de memoria. Esto es una desventaja que no tiene el sistema similar HyperTransport, que también puede tener este uso. Además no ofrece la flexibilidad del sistema InfiniBand, que tiene rendimiento similar, y además puede ser usado como bus interno-externo.

Este conector es usado mayormente para conectar tarjetas gráficas. PCI Express en 2006 fue percibido como un estándar de las placas base para PC, especialmente en tarjetas gráficas. Marcas como Advanced Micro Devices (AMD) y nVIDIA entre otras tienen tarjetas gráficas en PCI Express.


Especificaciones de PCI y PCI Express

PCI (en una de sus versiones más común para PC)

Reloj de 33,33 MHz con transferencias síncronas.
Ancho de bus de 32 bits o 64 bits.
Tasa de transferencia máxima de 133 MB por segundo en el bus de 32 bits (33,33 MHz × 32 bits ÷ 8 bits/byte = 133 MB/s).
Tasa de transferencia máxima de 266 MB/s en el bus de 64 bits.
Espacio de dirección de 32 bits (4 GB).
Espacio de puertos I/O de 32 bits (actualmente depreciado).
256 bytes de espacio de configuración.
3,3 V o 5 V, dependiendo del dispositivo.

PCI Express

Al ser un bus compatible con PCI, conserva algunas de las características de éste. Otras de sus características son:
Treinta y dos enlaces de 250MB/s dan el máximo ancho de banda, 8 GB/s (250 MB/s x 32) en cada dirección para PCIE 1.1.
En el uso más común (x16) proporcionan un ancho de banda de 4 GB/s (250 MB/s x 16) en cada dirección.
En comparación con otros buses, un enlace simple es aproximadamente el doble de rápido que el PCI normal.

De esta comparativa de especificaciones técnicas se desprende que el PCI-Express es más veloz que el  PCI (33Mhz) y el AGP (66Mhz), por lo que es el sustituto de estos dos.


Tema 4.a: Explicación en detalle del Xenon


Xenon es el nombre comercial del procesador de la consola XBOX 360 de Microsoft. No, espera; era el procesador de la consola cuando esta salió al mercado. Desde entonces ha pasado por varias revisiones, hagamos un resumen rápido y luego la vemos en detalle:


1.       Xenon (2005-2006): diseño original lanzado en Noviembre de 2005. CPU (IBM), GPU (ATI) y eDRAM separadas y fabricadas por proceso de 90 nm (nanómetros = 10-9 metros). Suministro de 230 W, 12V a 16.5 A. Se calentaba en exceso y dio lugar al famoso fallo “Red Ring of Death” (Anillo Rojo de la Muerte) por el que Microsoft tuvo que reemplazar y retirar las consolas del mercado.

2.       Zephyr (2006-2007): se introduce el soporte a HDMI y se mejora la refrigeración de la GPU. Además permite instalar opcionalmente un disco duro de 120 GB.

3.       Opus (2007): CPU fabricada en 65 nm y eDRAM en 80 nm. Se mejoran la refrigeración de la CPU (que será la misma del siguiente modelo; el Falcon) y de la GPU (la misma que la del modelo anterior; Zephyr). La fuente de alimentación pasa a ser de 175 W, 12V y 14,2A. No tenía puerto HDMI. Esta era la consola que se le daba a los que en su día compraron el modelo Xenon.

4.       Falcon (2007-2008): CPU de 65nm, GPU y eDRAM en 80 nm, puerto HDMI, mejor refrigeración para la CPU. Fuente de alimentación como la Opus.

5.       Jasper (2008-2009): CPU y GPU en 65nm y eDRAM en 80nm. Puerto HDMI, memoria Flash integrada de 16 o 256 MB según versiones. Fuente de alimentación de 150W, 12V y 12.1A.

6.       Valhalla (2010 hasta ahora): la CPU, GPU y eDRAM se condensan en una única “pastilla” (die) de 45nm lo que permite un ahorra de espacio en la placa base de un 30% que a su vez permite rediseñar la consola para que su tamaño sea más reducido. Incluye ahora 5 puertos USB en lugar de los 3 que había antes y uno adicional usado específicamente para Kinect. Incluye un disco duro de 250 GB y WiFi integrada. La reducción del número de componentes, el aumento de los ventiladores y el rediseño de las ranuras de ventilación hacen que esta versión sea la más silenciosa y la que menor consumo tiene.


Ahora vamos con las características del modelo Xenon original, que incluía un procesador llamado originalmente Waternoose diseñado por IBM y fabricado por GlobalFoundries que es una compañía lanzada en común por AMD y ATIC. 



Dicho procesador se basa en el set de instrucciones del PowerPC de IBM y está compuesto por tres núcleos independientes sospechosamente parecidos a los del Cell de Playstation 3 (más tarde se ha sabido que las mismas personas que diseñaron el Cell, trabajaron simultáneamente en el desarrollo del Xenon en el mismo edifico) que funcionan a 3.2 GHz con una caché dedicada de nivel 1 de 32kB para instrucciones y otros 32 para datos. La caché de nivel 2 es compartida por los tres núcleos y tiene un tamaño de 1024 kB. .Su ancho de banda con el bus de sistema es de 21.6Gb/s.

Cada procesador tiene dos hilos de ejecución simétricos (SMT) lo que hace un total de 6 procesadores lógicos disponibles. Como hemos visto, al principio se fabricaron en 90nm CMOS (Complimentary Oxide Metal Semiconductor) con la técnica SOI (Silicon On Insulator) pero finalmente se redujo a 65nm.

En el siguiente esquema pueden verse las unidades de que está compuesto este procesador:


-          FPU: procesador para coma flotante.
-          VMX: unidad vectorial.
-          FXU: unidad para enteros, dos por núcleo.
-          LSU: unidad Load/Store.

La lista de especificaciones que puede verse en varias páginas dice lo siguiente:

·         90 nm process, 65 nm process upgrade in 2007 (codenamed "Falcon"), possible 45 nm process dated around early 2009.
·         165 million transistors
·         Three symmetrical cores, each two way SMT-capable and clocked at 3.2 GHz
·         SIMD: VMX128 with 2× (128×128 bit) register files for each core.
·         1 MiB L2 cache (lockable by the GPU) running at half-speed (1.6 GHz) with a 256-bit bus
·         51.2 gigabytes per second of L2 memory bandwidth (256 bit × 1600 MHz)
·         21.6 GB/s Front-Side Bus
·         Dot product performance: 9.6 billion per second
·         115.2 GFLOPS theoretical peak performance
·         Restricted to In-order code execution
·         eFuse 768bits.
·         ROM (and 64Kbytes SRAM) storing Microsoft's Secure Bootloader, and encryption hypervisor.
·         Big endian architecture.

Además de esto es de destacar que el Xenon es un procesador súper escalar y segmentado de 21 etapas en el cauce que no permite la ejecución fuera de orden, aunque el procesador basado en el núcleo Pentium III Coppermine128 de la Xbox original sí lo permitía.

Aquí podemos ver una foto del procesador completo:


De entre las técnicas que hemos visto en otros artículos, el Xenon dispone de una unidad de predicción de saltos, con 4k entradas por thread de BHT (Branch History Table) además de otras que se han comentado a lo largo del artículo (jerarquía de memoria, segmentación, etc).

Bibliografía: