sábado, 23 de febrero de 2013

EJEMPLOS MULTIPROCESADORES


Multiprocesadores con Memoria Compartida (MMC).- En los MMC, la memoria se organiza en uno o varios modulos, compartidos por todos los procesadores a través de distintos tipos de interconexión, con un acceso constante. A este tipo de arquitectura se le conoce como UMA (Uniform Memory Access).
El acceso a los modulos por parte de los procesadores se realiza en paralelo, pero cada modulo solamente puede atender una petición en cada instante de tiempo.

Caracteristicas: Las principales caracteristicas de los MMC son:
- Tiempos de acceso a memoria uniformes, ya que todos los procesadores se encuentran igualmente comunicados con la memoria principal.
- Las lecturas y escrituras de cada uno de los procesadores tienen exactamente las mismas latencias.
- La programacion es mucho mas facil que en los MMD, debido a que la gestión de la memoria de cada modulo es transparente para el programador.
- Al acceder simultáneamente a la memoria se producen colisiones y esperas, lo cual es un problema.
- Debido a la organización de la arquitectura, es poco escalable en numero de procesadores, debido a que puede surgir un cuello de botella si se aumenta el numero de CPU's.


Ejemplos:
- IBM 370: Para multiprogramación.
- Intel X86: Para cualquier instrucción (de acceso a memoria).
- SPARC (RISC): Operaciones atómicas registro-memoria.
- MIPS, PowerPC, Alpha: Para pareja de instrucciones.


Memoria Distribuida.- Estas tienen su propia memoria local, la informacion se comparte a traves de mensajes (paso de mensajes).
Esta directamente relacionado con procesamiento paralelo masivo (mpp), donde multiples procesadores trabajan en diferentes partes de un programa, donde cada bloque podra tener su propio sistema operativo y memoria, esta arquitectura se emplea en arreglos tipo cluster.

Caracteristicas: Sus caracteristicas son:
- Alta escalabilidad, se puede agregar memoria y procesador a medida que crece la demanda de recursos.
- Accesos a memoria lentos debido a que existe trafico en el bus de conexión.
- Programación Complicada.




Multiprocesadores con Memoria Distribuida Compartida (MMD).- Este tipo de multiprocesadores distribuye la memoria de manera propia y esta conectado mediante una red de interconexion al resto de procesadores. De esta manera, cada procesador podra acceder tanto a su memoria local, como a la memoria remota de cualquiera del resto de procesadores. Este tipo de arquitectura se denomina NUMA (Non-Uniform Memory Access).

Caracteristicas: Las caracteristicas de los MMD son:
- Cada procesador tiene su memoria.
- La comunicación se realiza por intercambio explicito de mensajes a través de una red.


Ejemplos:








jueves, 21 de febrero de 2013

Pipeline, Load/Store, Microprocesador Sparc



TUBERIAS RISC (RISC PIPELINE)




En la historia del hardware de computadora, algunos procesadores RISC usaban una solucion arquitectonica, ahora llamada Risc Pipeline clasico. Esos CPUs eran: MIPS, SPARC, Motorola 88000 y luego DLX.

Cada uno de estos diseños escalares RISC buscaron e intentaron ejecutar una instruccion por ciclo. El concepto principal comun de cada diseño era una ejecucion de 5 etapas de instrucciones de tuberia. Durante la operacion, cada fase de tuberia podria trabajar en una instruccion a la vez.

Cada una de estas fases consisitia de un set inicial de flip-flops y logica combinacional que operaba en las salidas de estos flops.

Las 5 etapas Risc Pipeline



Busqueda de instruccion


La cache de instrucciones en estas maquinas tenia una latencia de un ciclo. Durante la etapa de busqueda de instruccion, una instruccion de 32 bits era buscada desde la cache.
El predictor de la PC envia el contador de programa a la cache de instrucciones para leer la posicion actual. Al mismo tiempo, se predice la direccion de la siguiente instruccion incrementando el contador en 4 (todas las instrucciones tenian 4 bytes de largo). Esta prediccion siempre estaba equivocada en el caso de tomar una rama, saltar o en el caso de una excepcion. Las proximas maquinas usarian algoritmos mas complicados y precisos para adivinar la siguiente direccion de instruccion.

Decodificación


A diferencia de maquinas con microcodigos mas tempranas, la primera maquina RISC no tenia microcodigo. Una vez realizada la busqueda de la cache de instrucciones, los bits de las instrucciones eran desplazadas hacia abajo en la tuberia (pipeline), para que la logica combinacional simple pueda producir, en cada fase de la tuberia, el control de señales para la direccion de datos directamente desde los bits de instrucciones. Como resultado se realiza muy poca decodificación en el estado tradicionalmente llamado fase de decodificación.
Todas las instrucciones MIPS, SPARC y DLX tienen 2 registros de entrada como maximo. Durante la fase de decodificación estos dos nombres de registro son identificados dentro de las instrucciones, y los dos registros nombrados son relidos desde el archivo de registro. En el diseño MIPS, el archivo de registros tenia 32 entradas.
Al mismo tiempo que el archivo de registros era leido, una instruccion logica en esta fase determinaba si la tuberia estaba lista para ejecutar la instruccion en esta fase. Si no lo estaba, la instruccion logica podia causar que las dos fases, la de busqueda y la de decodificacion, se detengan. En un ciclo detenido, las fases podian prevenir a sus flops iniciales de aceptar nuevos bits.
Si la instruccion decodificada era una rama o un salto, la direccion apuntada de la rama o salto era computada en paralelo con la lectura del archivo de registros. El predictor de la PC en la primera fase es asignado al objetivo de la rama en lugar que la direccion incrementada que habia sido computada.

Ejecución


Las instrucciones en estas maquinas RISC simples, podian ser divididas en tres clases de latencia segun el tipo de operación:
- Registro de operacion de registro (Latencia de un solo ciclo): Suma, resta, comparación y operaciones logicas. Durante la etapa de ejecucion, los dos argumentos eran direccionados a una ALU simple, que generaba el resultado al final de la fase de ejecución.
- Memoria de referencia (Latencia de dos ciclos). Todas las cargas de la memoria. Durante la etapa de ejecución, la ALU combinaba los dos argumentos (un registro y una compensación constante) para producir una direccion virtual al final del ciclo.
- Instrucciones multi ciclo (Muchos ciclos de latencia). Integrales, multiplicaciones, divisiones y todas las operaciones de punto flotante. Durante la etapa de ejecución, los operandos de estas operaciones fueron enviadas a la unidad de multi-ciclos de multiplicar/dividir. El resto de la tuberia estaba libre para continuar con la ejecución mientras la unidad de multiplicacion/division hacia su trabajo. Para evitar complicaciones a la fase de reescritura, las instrucciones multiciclo escribian sus resultados en un set de registros separado.

Acceso a Memoria


Durante esta etapa, las instrucciones simples de un ciclo de latencia tenian sus resultados dirigidos a la siguiente etapa. Este dirigimiento asegura que las instrucciones de un ciclo y de dos ciclos siempre escriban sus resultados en la misma etapa de la tuberia, asi que solo un puerto de escritura al archivo de registros podia ser usado y este siempre disponible.

Reescritura


Durante esta etapa, las instrucciones de uno y dos ciclos escriben sus resultandos en el archivo de registros.

Riesgos


Hennessy y Patterson acuñaron el termino "riesgo" para situaciones en las cuales una tuberia completamente trivial podia producir respuestas equivocadas.

Riesgos Estructurales


Estos suceden cuando dos instrucciones podrian tratar de usar los mismos recursos al mismo tiempo. Las tuberias clasicas de RISC evitaban estos riesgos replicando hardware. En particular, instrucciones de rama podian haber usado la ALU para computar la direccion apuntada de la rama. Si la ALU era usada en la etapa de decodificación para ese proposito, una instruccion ALU seguida por una rama podrian haber intentado usar la ALU simultaneamente. Es facil resolver este conflicto diseñando un acumulador de objetivos de rama en la fase de decodificación.

Riesgos de Datos


Estos ocurren cuando una instruccion, ciegamente programada, intentaria usar un dato antes que el dato este disponible en el archivo de registros.
Los riesgos de datos son evitados por cualquiera de las siguientes dos maneras:
- Solucion A, Pasar por alto.
- Solucion B, Entrelazado de tuberias.


ARQUITECTURA LOAD/STORE


En ingenieria de computadoras, una arquitectura load/store, solo permite que la memoria sea accedida por operaciones de carga y almacenamiento, y todos los valores para una operacion sean cargados de la memoria y esten presentes en registros. Siguiendo la operación, el resultado necesita ser almacenado de nuevo en la memoria.
Por ejemplo, en un enfoque de load/sotre, ambos operadores para una operacion de suma deben estar en registros. Esto difiere de una arquitectura de registro-memoria en que uno de los operadores de la suma podria estar en la memoria, mientras que el otro esta en un registro.
El anterior ejemplo de una arquitectura load/store fue el de CDC 6600. Casi todos los procesadores vector usaban el enfoque load/store.
Sistemas RISC como PowerPc, SPARC, ARM o MIPS usan la arquitectura load/store.


PROCESADORES SPARC


SPARC es una arquitectura con un conjunto de instrucciones reducidas.
Fue originalmente diseñada por Sun Microsystems y dirigido por el ingeniero Kaa en 1985, se basa en los diseños RISC I y II de la Universidad de California en Berkeley que fueron definidos entre los años 1980 y 1982.
La empresa Sun Microsystems diseñó esta arquitectura y la licenció a otros fabricantes como Texas Instruments, Cypress Semiconductor, Fujitsu, LSI Logic entre otros.
SPARC es la primera arquitectura RISC abierta y como tal, las especificaciones de diseño están publicadas, así otros fabricantes de microprocesadores pueden desarrollar su propio diseño.
Una de las ideas innovadoras de esta arquitectura es la ventana de registros que permite hacer fácilmente compiladores de alto rendimiento y una significativa reducción de memoria en las instrucciones load/store en relación con otras arquitecturas RISC. Las ventajas se aprecian sobre todo en programas grandes.
La cpu SPARC esta compuesta de una unidad entera, UI (Integer Unit) que procesa la ejecución básica y una FPU (Floating-Point Unit) que ejecuta las operaciones y cálculos de reales. La IU y la FPU pueden o no estar integradas en el mismo chip.
Aunque no es una parte formal de la arquitectura, las computadoras basadas en sistemas SPARC de Sun Microsystems tienen una unidad de manejo de memoria (MMU) y un gran caché de direcciones virtuales (para instrucciones y datos) que están dispuestos periféricamente sobre un bus de datos y direcciones de 32 bits.