Análisis de la jerarquía de memoria del Broadway
16:00 | Author: Ricardo Silva Asenjo


El procesador Broadway esta basado en los PowerPC G3 de IBM. He estado buscando informacion mas especifica sobre el procesador de la Wii pero no he conseguido nada. Pongo informacion sobre el PowerPC G3 pero no puedo confirmar si es igual para el procesador Broadway.

Características

  • Cache de datos e instrucciones separadas.
  • 32 Kbytes.
  • Asociativa por conjuntos de 8 vías.
  • Indexada por la dirección efectiva.
  • Tags por la dirección física.
  • Algoritmo pseudo LRU de reemplazamiento.
  • Cada bloque de la cache es de 32 bytes (8 palabras).
  • Dos bits de coherencia en cada bloque de la cache de datos:
  • Modified, Exclusive, Invalid
  • Un bit de coherencia en cada bloque de la cache de instrucciones: Invalid, Valid
Cache de datos

  • Modified: El bloque direccionado está en la cache, y está modificado respecto a lo almacenado en el subsistema de memoria.
  • Exclusive: El bloque direccionado está en la cache, y esta cache tiene propiedad exclusiva sobre el bloque. Sólo se encuentra en la cache de este procesador. Los datos del bloque son coherentes respecto al bloque en el subsistema de memoria.
  • Invalid: El bloque direccionado no contiene datos válidos o no se encuentra en la cache.

Cache L2

  • SRAMs síncronas externas para el almacenamiento de datos de hasta 1 Mbyte.
  • Asociativa por conjuntos de 2 vías con 4096 entradas.
  • Está organizada en líneas de 64 o 128 bytes, sudivididas en bloques de 32 bytes (8 palabras).
  • Cada bloque tiene bits de estado valid y modified.
  • Acepta múltiples accesos simultáneos.
  • Cache de instrucciones: solicitud de instrucción
  • Cache de datos: operación de carga o dos almacenamientos
  • Peticiones desde la cache L1 son buscadas en los tags de la L2 y servidas por la L2 si se encuentran, en caso de fallo, son reenviadas al bus.
  • Soporta sistemas de coherencia de cache a través de snooping.
  • Da servicio a peticiones snoop desde el bus.
  • Establece prioridad para las peticiones.
  • Normalmente trabaja en modo write back.

Predictores de salto en IBM G3

Unidad de procesado de saltoes ( BPU ): predicción estática y dinámica de los saltoes.

Componentes de la BPU

BHT: tabla de histórico de saltoes implementada mediante una caché de 512 entradas y 2 bits por entrada. Predictor local de 2 bits.
BTIC: cache de direcciones de instrucciones de los saltoes (BTB) implementada mediante una caché asociativa por conjuntos de 64 entradas, 4 vías y 16 entradas por conjunto. Almacena los saltoes más recientemente tomados.
Registros de control: CR o registro condicional sobre el cual se realizan la operaciones en los saltoes condicionales, CTR o registro contador que almacena dirección de salto para los “bcctr”, y LR o registro de enlace que almacena la dirección de salto para los “bcl”.

Características de la BPU

Analiza las instrucciones provenientes de caché, 4 instrucciones por ciclo. Es capaz de procesar 1 salto por ciclo, realizando las operaciones necesarias en el registro CR si se trata de un salto condicional.
Si las dependencias de datos impiden resolver el salto inmediatamente se predice el resultado del salto.
El predictor a utilizar, estático o dinámico depende del valor asignado al registro hardware HID0[BHT]:
HID0[BHT] = 1, predicción dinámica
HID0[BHT] = 0, predicción estática
Ante una predicción realizada no se podrá escribir a registro el resultado de la instrucción hasta resolver el salto, ejecución especulativa.
En lo que se resuelve un primer salto se puede hacer la predicción de un segundo salto, pero las nuevas instrucciones a ejecutar han de esperar en la cola de instrucciones hasta saber si la predicción anterior fue correcta.
Tras un salto tomado o predicho como tomado un éxito en la BTIC supone un ahorro de 1 ciclo en la carga de las nuevas instrucciones en la cola.

Predicción estática de los saltos

En la arquitectura PowerPC esté tipo de predicción está implementada como parte del código de instrucción del propio salto.
Las instrucciones de salto cuentan con un campo denominado BO-field que permite realizar una predicción por software sobre la resolución de cada salto.
El bit menos significativo del campo BO-field, bit “y”, determinará si el salto se toma o no, y = 1 se toma,
y = 0 no se toma.
Se utiliza sólo si HID0[BHT] = 0.

Predicción dinámica de los saltos

Se realiza haciendo uso de la BHT o predictor local de 2 bits que almacena la predicción asociada a cada salto.
Esta caché contiene 512, por lo que se utilizan los 9 bits menos significativos de la instrucción para indexar las predicciones asociadas a cada salto.
Para cada salto la predicción puede ser “fuertemente no tomada”, “no tomada”, “tomada” o “fuertemente tomada”.
Se utiliza sólo si HID0[BHT] = 1.


Para tener mas informacion respecto esta jerarquia se tiene que acceder a los siguientes temas de mo Blog. En ellos se especifica mucho mas afondo todos los distintos aspectos respecto al Broadway.

-RISC vs CISC (Usa la tecnologia RISC)
-CPU de la Wii -Broadway-
-Organizacion y rendimiento de la memoria cache.
COPROCESADORES PARA GRAFICOS
14:48 | Author: Ricardo Silva Asenjo

INTRODUCCION

¿Que son los coprocesadores?

El termino completo es ¨coprocesador matematico¨, con este nombre se puede deducir que no se trata de un elemento central, si no de un asistente. Un coprocesador matemático aumenta la velocidad de una computadora, ocupándose de algunas de las tareas de la CPU. No obstante el coprocesador no es un componente indispensable en una maquina. Se puede instalar un coprocesador en la placa madre, siempre y cuando esta disponga de la ranura correspondiente.


Puesto que lo que hace la CPU no es otra cosa de cálculos, el lector podría estar preguntándose porque 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.


La CPU tiene problemas para procesar operaciones con valores fraccionarios puesto que no son números enteros. Así la CPU requiere bastante tiempopara resolverlas. Siempre deban realizar muchos cálculos complejos (por ejemplo, al calcular funciones tangentes, exponenciales y raíces) puede disminuir su velocidad considerablemente, debido especialmente a la unidad de procesamiento tiene que ejecutar también otras tareas simultáneamente.


Especialmente en aquellas operaciones en las cuales se trabaja con fracciones y cifras muy complicadas en cuestiones aritméticas de coma flotante, el coprocesador muestra su idoneidad. 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.


Un coprocesador puede ser extremadamente útil para realizar este tipo de cálculos. Normalmente, las aplicaciones científicas y técnicas requieren un coprocesador matemático. No obstante, para utilizar un coprocesador los programas deben estar específicamente diseñados para ello. De nuevo el paquete de software que vaya usted a utilizar constituye el factor decisivo que determinara si su sistema debe estar equipado con un coprocesador. Algunos paquetes de programas modernos de CAD/CAM, como AutoCAD, requieren un coprocesador.


Los coprocesadores fueron vistos por primera vez en los mainframes donde se añadían para funcionalidad opcional como el soporte matemático para punto flotante, otro uso muy común era para el control de los canales de Entrada/Salida, aunque este dispositivo se conocía normalmente como controlador de canal, un ejemplo de estos dispositivos lo tenemos en los controladores DMA.


Un coprocesador es también útil para utilizar gráficos vectoriales. Sin embargo, no aumenta el rendimiento de las aplicaciones que utilizan gráficas de puntos.


GPU (Unidad de procesamiento grafico)


La unidad de procesamiento gráfico o GPU es un procesador dedicado exclusivamente al procesamiento de gráficos, para aligerar la carga de trabajo del procesador central en aplicaciones como los videojuegos y o aplicaciones 3D interactivas. De esta forma, mientras gran parte de lo relacionado con los gráficos se procesa en la GPU, la CPU puede dedicarse a otro tipo de cálculos (como la IA o los cálculos en el caso de los videojuegos).

Una GPU implementa ciertas operaciones gráficas llamadas primitivas optimizadas para el procesamiento gráfico. Una de las primitivas más comunes para el procesamiento gráfico en 3D es el antialiasing, que suaviza los bordes de las figuras para darles un aspecto más realista. Adicionalmente existen primitivas para dibujar rectángulos, triángulos, círculos y arcos. Las GPU actualmente disponen de gran cantidad de primitivas, buscando mayor realismo en los efectos.

¿Qué características tiene una GPU moderna?

Una GPU actual suele tener 6 procesadores de vértices trabajando en paralelo, y de 12 a 18 procesadores de fragmentos. El hecho de ser muchos procesadores trabajando en paralelo le da ventaja frente al CPU, ya que los algoritmos de gráficos se pueden paralelizar para hacerlos más eficientes.

También suele tener en la misma tarjeta, memoria de alta velocidad (RAMDAC) exclusivamente dedicada a la GPU.

En cuanto a Hardware, una GPU moderna tiene la capacidad de trabajar junto con otra GPU para repartirse el trabajo, debe tener un excelente sistema antialias, memoria integrada de gran capacidad para almacenar texturas y también de una tasa de transferencia de datos muy elevada.

Actualmente también proveen aceleración para video de alta definición en MPEG-2 y WMV, de manera que el CPU de la computadora pueda estar libre para hacer otras tareas mientras la GPU decodifica y muestra el video, video de alta definición, cómputo preciso de imágenes.

En cuanto a Shaders de vértices, las GPUs actuales tienen soporte para mapeo de desplazamientos, instanciado de geometría, programas de vértices de longitud arbitraria.

Para Shaders de pixels, tienen soporte para “Full Pixel Branching”, múltiples objetivos de dibujado, programas de pixels de longitud arbitraria.

En texturizado, debe tener soporte de múltiples texturas por cada “mano” de dibujado, acceso acelerado a texturas, formatos de punto flotante de 16 y 32 bits, compresión de texturas de DirectX y de S3TC.

Una GPU actual tiene soporte para OpenGL 2.0 y el modelo de Shader 3.0 Microsoft DirectX 9.


GPGPU (Unidad de procesamiento grafico de proposito general)


GPGPU o General-Purpose Computing on Graphics Processing Units es un concepto reciente dentro de informática que trata de estudiar y aprovechar las capacidades de cómputo de una GPU.

Una GPU es un procesador diseñado para los cómputos implicados en la generación de gráficos 3D interactivos. Algunas de sus características (bajo precio en relación a su potencia de cálculo, gran paralelismo, optimización para cálculos en coma flotante), se consideran atractivas para su uso en aplicaciones fuera de los gráficos por computadora, especialmente en el ámbito científico y de simulación. Así, se han desarrollado técnicas para la implementación de simulaciones de fluidos, bases de datos, algoritmos de clustering, etc.


GPGPU se está utilizando actualmente endiversos campos de la computación:

– Simulación física

– Minería de datos

– Visión por computador

– Inteligencia artificial

– Procesamiento de señales

– Criptografía

PPU (Unidad de preocesamiento de fisicas)

Una Unidad de procesamiento físico (en Inglés PPU) es un microprocesador diseñado especialmente para manejar calculos físicos en computación. Su uso esta particularmente extendido en el campo de los motores fisicos y los videojuegos. Algunos ejemplos de cálculos realizados por unidades de procesamiento físico son calculos de dinamica de cuerpos rígidos, detección de colisiones, dinámica de fluidos, simulacion de vestuario y cabello (en computación gráfica), analisis de elementos finitos y fractura de objetos. El propósito de estas unidades de procesamiento fisico es liberar de carga (de procesamiento) a las CPU haciendo estas operaciones.


La arquitectura del procesador physX ha sido diseñada para permitir una aceleración radical de:

-Propiedades de la materia: son características físicas como la densidad, fricción y robustez.

-Movimientos de cuerpos rígidos y detección de colisión.

-Conexiones y resortes: son herramientas para modelar mecanismos complejos.

ORGANIZACION Y RENDIMIENTO DE LA MEMORIA CACHE
8:43 | Author: Ricardo Silva Asenjo

INTRODUCCION

Una memoria caché es una memoria en la que se almacenas una serie de datos para su rápido acceso. Existen muchas memorias caché (de disco, de sistema, incluso de datos, como es el caso de la caché de Google), pero en este tutorial nos vamos a centrar en la caché de los procesadores.



Básicamente, la memoria caché de un procesador es un tipo de memoria volátil (del tipo RAM), pero de una gran velocidad.

En la actualidad esta memoria está integrada en el procesador, y su cometido es almacenar una serie de instrucciones y datos a los que el procesador accede continuamente, con la finalidad de que estos accesos sean instantáneos. Estas instrucciones y datos son aquellas a las que el procesador necesita estar accediendo de forma continua, por lo que para el rendimiento del procesador es imprescindible que este acceso sea lo más rápido y fluido posible.

Caché de memoria: De acuerdo a la ubicación física que tienen en elsistema se denominan o identifican por niveles:

-Nivel 1 (L1): Conocido como caché interno, es el nivel más cercano a la CPU (está en el mismo núcleo) con lo que el acceso se produce a la velocidad de trabajo del procesador (la máxima velocidad). Presenta un tamaño muy reducido, en Intel (4 a 32 KB), en VIA/Cyrix (1 a 64 KB), en AMD (8 a 128 KB).
-Nivel 2 (L2): Conocido como caché externo, inicialmente se instalaba en la placa base (en el exterior de la CPU). A partir de los procesadores Pentium 4 vienen incorporado en el procesador (no precisamente en el núcleo). El nivel L2 apareció con el procesador Pentium Pro, es una memoria más lenta que L1, pero de mayor capacidad. Los tamaños típicos de la memoria caché L2 oscilan en la actualidad entre 256 KB y 4 MB.
-Nivel 3 (L3): Se encuentra en algunas placas base, procesadores y tarjetas de interfaz. El procesador de Intel Itanium trae contenida en su cartucho al nivel L3 que soporta un tamaño hasta de 4 MB, y el Itanium 2 tolera hasta 6 MB de caché L3.
-Nivel 4 (L4): Se encuentra ubicado en los periféricos y en algunos procesadores como el Itanium.

Caché de memoria RAM: La memoria principal RAM suele hacer de caché para los dispositivos de almacenamiento y otros tipos de periféricos.

Caché en disco duro: Utilizadas por los navegadores Web y algunos periféricos.
La búsqueda de información comienza por la caché L1, y se va subiendo nivel a nivel en caso de no encontrar lo que se busca en el nivel actual. Cuantas más capas se asciende, mayor es el tiempo de espera. Pero, a mayor cercanía a la CPU, la probabilidad de encontrar lo que se busca es mayor. Esta forma de trabajo resulta una excelente relación de compromiso entre diversos factores, y consigue mejorar el rendimiento del ordenador de forma notable.

DISEÑO DE LA MEMORIA CACHE

En el diseño de la memoria cache se deben considerar varios factores que influyen directamente en el rendimiento de la memoria y por lo tanto en su objetivo de aumentar la velocidad de respuesta de la jerarquía de memoria. Estos factores son las políticas de ubicación, extracción, reemplazo, escritura y el tamaño de la cache y de sus bloques.

Política de ubicación

Decide dónde debe colocarse un bloque de memoria principal que entra en la memoria cache. Las más utilizadas son:

Directa: Al bloque i-ésimo de memoria principal le corresponde la posición i módulo n, donde n es el número de bloques de la memoria cache.
Asociativa: Cualquier bloque de memoria principal puede ir en cualquiera de los n bloques de la memoria cache.

Asociativa por conjuntos: La memoria cache se divide en k conjuntos de bloques, así al bloque i-ésimo de memoria principal le corresponde el conjunto i módulo k. Dicho bloque de memoria podrá ubicarse en cualquier posición de ese conjunto.

Política de extracción

La política de extracción determina cuándo y qué bloque de memoria principal hay que traer a memoria cache. Existen dos políticas muy extendidas:

Por demanda: Un bloque sólo se trae a memoria cache cuando ha sido referenciado y se produzca un fallo.

Con prebúsqueda: Cuando se referencia el bloque i-ésimo de memoria principal, se trae además el bloque (i+1)-esimo. Esta política se basa en la propiedad de localidad espacial de los programas.

Política de reemplazo

Determina qué bloque de memoria cache debe abandonarla cuando no existe espacio disponible para un bloque entrante. Básicamente hay cuatro políticas que son:

Aleatoria: El bloque es reemplazado de forma aleatoria.

FIFO: Se usa un algoritmo First In First Out FIFO (primero en entrar es el primero en salir) para determinar qué bloque debe abandonar la cache. Este algoritmo generalmente es poco eficiente.

Menos recientemente usado (LRU): Se sustituye el bloque que hace más tiempo que no se ha utilizado.

Menos frecuentemente usado (LFU): Se reemplaza el bloque que se ha usado con menos frecuencia.

Siendo la Aleatoria y la LRU las de mejor rendimiento.

Política de escritura

Determina cuándo se actualiza la información en memoria principal cuando se ha escrito en memoria cache. Existen dos políticas principales:

Escritura inmediata o escritura directa: En inglés Write Through. Cuando se escribe en un bloque que se encuentra en memoria cache, la información se modifica también simultáneamente en memoria principal, manteniendo así la coherencia en todo momento. Suele combinarse con la técnica de "No carga en escritura" (No Write Allocation) que significa que, cuando haya que escribir en un bloque que no se encuentra en la cache, la modificación se realizará únicamente en memoria principal, sin traer dicho bloque a cache, y además sólo se actualizará la palabra concreta que haya cambiado.

Escritura aplazada o post-escritura: En inglés Write Back. Cuando se escribe en un bloque que se encuentra en memoria cache, queda marcado como basura usando un bit especial llamado normalmente dirty bit o bit de basura. Cuando el bloque sea desalojado de memoria cache (mediante la correspondiente política de reemplazo), se comprueba el bit de basura, y si está activado se escribe la información de dicho bloque en memoria principal. Esta política suele combinarse con la técnica de "Carga en escritura" (Write Allocation), que significa que, cuando haya que escribir en un bloque que no se encuentra en la cache, traeremos a cache el bloque en cuestión y lo modificaremos ahí.
Benchmark Specviewerf 10.0
3:51 | Author: Ricardo Silva Asenjo

Un benchmark es un conjunto de procedimientos (programas de computación) para evaluar el rendimiento de un ordenador. Hay cuatro categorías generales de pruebas de comparación:

-Pruebas aplicaciones-base (application-based) las ejecuta y las cronometra.
-Pruebas playback (playback test), las cuales usan llamadas al sistema durante actividades especificas de una aplicación(Ej.: Llamados a gráficos o uso del disco) y las ejecuta aisladamente.
-Prueba sintética (synthetic test) , la cual enlaza actividades de la aplicación en subsistemas específicos.
-Prueba de inspección (inspection tests), la cual no intenta imitar la actividad de la aplicación, sino que las ejecuta directamente en los subsistemas específicos.
El benchmark que voy a utilizar se trata del SpecViewPerf10 desarrollado por SPEC (Standard Performance Evaluation Corporation), que es un consorcio de vendedores de computadoras, integradores de sistemas, universidades, grupos de investigación, publicadores y consultores de todo el mundo sin afan de lucro. El SpecViewPerf10 esta destinado a computadoras que usan OpenGL y calcula el rendimiento del renderizado bajo esté.

LA COMPUTADORA

Procesador
Intel Pentium 4 640 / 3.2 GHz
Computación de 64 bits
Características principales del procesador: Hyper-Threading Technology, Intel Extended Memory 64 Technology, Intel Execute Disable Bit, Enhanced Intel SpeedStep Technology

Memoria caché
Tipo: L2
Tamaño instalado: 2 MB
Caché por procesador: 2 MB

Placa principal
Tipo conjunto de chips: Intel 945G Express
Velocidad bus de datos: 800 MHz

Memoria RAM (Tamaño aumentado de 1 a 4GB)
Tamaño instalado: 4 GB (máx.)
Tecnología DDR II SDRAM
Velocidad de memoria: 600 MHz
Conforme a la especificación de memoria: PC2-3200
Factor de forma: DIMM de 240 espigas
Características: Dos canales DDR

Targeta grafica (No es la original instalada por mi)
Reloj del Procesador (MHZ): 540MHz
Reloj de Memoria (MHZ): 533MHz
Memoria Disponible: 512 MB DDR2
Interfaz de Memoria (BUS): 128 Bits
DirectX: DirectX9/DirectX10
Resolución Maxima: 2560 x 1600
Conectores: VGA, DVI, S-Video y HDTV.
OpenGL: OpenGL 2.0

EVAULACION
Se evaluó el rendimiento del sistema a una resolucion de pantalla de1280x1024 obteniendo los siguientes resultados


Se puede observar como la media es de 5 mas o menos en todos ellos pero destaca el tcvis-01 por su bajo resultado y encambio la enorme diferencia con maya que llega a ser 4 veces mas que la media.

ViewsetComposite
no AA
Composite
2X
Composite
4X
Composite
8X
Composite
16X
Composite
32X
3dsmax-045.765.735.585.785.835.47
catia-024.844.874.854.624.874.50
ensight-039.888.047.205.704.793.39
maya-0222.2520.3121.2520.3717.6012.04
proe-046.986.416.816.506.426.31
sw-014.9415.444.255.914.704.37
tcvis-011.340.840.910.700.730.66
ugnx-014.234.333.933.083.352.37

En esta tabla de datos la evaulacion esta tomados activando el Full Scene Antialiasing. En ella podemos observar como al aumentar el nivel del antialiasing disminulle la valoracion en los diferentes modos. Por lo general las "notas" no suelen bajar mas de un punto en total pero encambio en el maya se aprecia una gran caida del rendimiento a causa del Antialiasing. En cambio el proe-04 no tiene una gran caida del rendimiento.


ViewsetComposite
1 thread
Composite
2 thread
Composite
4 thread
3dsmax-045.099.3210.79
catia-024.096.586.13
maya-0219.4420.1118.97
proe-046.398.557.97
sw-015.8210.115.61
tcvis-010.952.592.34

En los siguientes datos la evaulacion se realiza a partir del numero de hilos utilizados. El numero maximo de hilo es 4. En la tabla se puede ver unos datos muy curiosos como en el maya y en el sw-01 que trabajan mejor con 2 hilos que con cuatro, al contrario el 3dmax es capaz de doblar su rendimiento al usar 4 hilos en vez de 1.

Bueno para que os hagais una idea de como son realmente los resultados sobre maquinas de verdad aqui os dejo un resultado realizado sobre un workstation de HP Z800 NVIDIA Quadro FX 4800 SLI. Ahora podreis comparar y observar el gran avismo existente entre lo que yo creia que era un maquinon y lo que realmente lo es.



Si quereis realizar estas pruebas solo teneis que meteros en la pagina http://www.spec.org/ y bajaros el Benchmark y tener unpoco de tiempo ya que tarda lo suyo. Los resultados son mostrados en formato html.

Benchmark F Summary
3:50 | Author: Ricardo Silva Asenjo

Viewperf 10.0

fill in config.txt
fill in config.txt
Viewset Composite Mulitsample Performance
3dsmax-04 5.76 up to 32x
catia-02 4.84 up to 32x
ensight-03 9.88 up to 0x
maya-02 22.25 up to 8x
proe-04 6.98 up to 32x
sw-01 4.94 up to 16x
tcvis-01 1.34 up to 0x
ugnx-01 4.23 up to 4x




Graphics Hardware Configuration
Graphics Accelerator fill in config.txt
Total Graphics Memory
Display Manufacturer/Model
Display Resolution 1280x1024
Display Size/Technology
Display Refresh Rate
Swap on Vertical Retrace
System Hardware Configuration
Processor Type
Number of Populated Processor Sockets
Cores per Processor Socket
Primary Cache per Core (KB)
Secondary Cache per Socket (KB)
Tertiary Cache per Socket (KB)
System Memory (MB)
Memory Type
Memory Speed
Memory Configuration
Disk (GB)
Disk Interface
Disk RPM
Software Configuration
Operating System
O/S Type
Compiler Name
Compiler Version
Window System
OpenGL Version
OpenGL Renderer
OpenGL Vendor
Driver Version
Viewperf Version 10.0
Viewperf Executable Standard
Price, availability, etc
Price
System Class
Test Date
General Availability
Submitted by
Comments