Arquitectura Multiprocesadores
Enviado por azcatitlan • 22 de Agosto de 2013 • 1.981 Palabras (8 Páginas) • 440 Visitas
Arquitectura Multiprocesadores
A pesar de las grandes mejoras acaecidas en monoprocesadores para algunas aplicaciones no es suficiente. La solución pueden ser los sistemas multiprocesadores debido a que es la solución más sencilla, natural y con mejor coste-prestaciones. Además, las mejoras en microprocesadores cada vez son más complejas; cada avance implica crecer en complejidad, potencia y superficie; quizas se lenta pero es una clara mejora en el software, que permite explotar el paralelismo.
Existen Dos factores clave para la extensión de los multiprocesadores:
1. Flexibilidad: El mismo sistema puede usarse para un único usuario incrementado el rendimiento en la ejecución de una única aplicación o para varios usuarios y aplicaciones en un entorno compartido.
2. Coste-rendimiento: Actualmente estos sistemas se basan en procesadores comerciales, por lo que su coste se ha reducido drásticamente. La inversión más fuerte se hace en la memoria y la red de interconexión.
La unidad de ejecución es el proceso: cada procesador ejecuta un flujo de instrucciones independiente. Pero los procesos pueden resultar costosos en tiempo y memoria, para es la alternativa es utilizar threads (hilos de ejecución).
Los Threads son rutinas concurrentes que comparten el espacio de memoria y las variables globales. Su creación y destrucción es tres órdenes de magnitud menos costosa que la de un proceso por tratarse de entidades más sencillas. Su sincronización a través de variables globales. Son muy importantes para solapar cómputo con operaciones de I/O o comunicaciones.
Hasta ahora nos habíamos centrado en el paralelismo a nivel de instrucción (grano fino), en donde la unidad de ejecución paralela es la instrucción. El hardware detecta instrucciones independientes y planifica su ejecución en paralelo. Pero los multiprocesadores explotan el paralelismo a nivel de proceso (grano grueso); en este caso el paralelismo se detecta a alto nivel, por parte del compilador y del sistema operativo, aunque también puede programarse de forma explícita. Cada thread puede abarcar desde un proceso completo e independiente hasta una única iteración de un bucle.
Redes de Interconexión
Las redes de interconexión entre nodos son un componente fundamental en el rendimiento y escalabilidad de los multiprocesadores.
Estos sistemas permiten conectar los nodos con la memoria y el subsistema de entrada/salida. Las características que se estudian a la hora de diseñar una red son las siguientes:
• Topología: Estructura de interconexión física de la red.
• Algoritmos de encaminamiento: Determina el camino a seguir por un mensaje desde el nodo fuente al destino.
• Estrategia de conmutación: Determina cómo los datos de un paquete atraviesan el camino hacía el destino.
• Mecanismos de control de flujo: Determina cuándo las unidades de información se desplazan a lo largo del camino entre fuente y destino.
Un sistema multiprocesador consta de muchos procesadores independientes unidos por algún mecanismo entre ellos y la memoria. La primera consideración que se hace al desarrollar un sistema multiprocesador es cómo conectar los procesadores entre sí y éstos a la memoria. Los procesadores deben estar conectados o al menos tener una zona de memoria común, pues están haciendo un trabajo cooperativo.
Según el tipo de acceso a memoria de todos los procesadores de la máquina MIMD se caracterizan en dos tipos, que son: UMA (acceso uniforme a memoria) y NUMA (accesso no uniforme a memoria).
UMA significa que todos los procesadores acceden a la misma memoria a la misma velocidad, por ejemplo un sistema SMP es UMA, Por ejemplo los compatibles con x86 tienen una arquitectura con la memoria compartida, global para todos los procesadores, con un solo bus para acceder a memoria que comparten todos los procesadores.
NUMA significa que no los procesadores no pueden acceder a toda la memoria con la misma velocidad. Habrá zonas de memoria a la que se accede más rápido y zonas a las que se accede a menos velocidad. Los procesadores tienen conexión directa con una memoria local, pero también tienen una conexión más lenta a memorias locales de otros procesadores (la memoria local no es memoria cache).
Los sistema UMA a su vez pueden ser de dos tipos dependiendo de la red de interconexión. Así en los multiprocesadores en bus (los procesadores comparten buses de dirección, datos y control) existe un árbitro en este bus que es quien decide quien puede en cada momento acceder a los buses. El problema de esta arquitectura es que los buses se saturan con facilidad, a partir de 64 CPUs el bus es el cuello de botella y aumentar el número de CPUs no aumenta el rendimiento.
Los multiprocesadores con conmutador són la solución para los problemas que conlleva el bus y, evidentemente, es una arquitectura más cara. La memoria se divide en módulos, varios procesadores pueden acceder a memoria de forma simultánea. Las CPUs y las memorias están conectadas a través de puntos de cruce. Si dos procesadores quieren acceder simultáneamente a la misma memoria, tendrán que esperar, en cualquier otro caso el acceso se hace de forma simultánea. El problema que conlleva esta arquitectura es que el número de conmutadores es alto NxM (si N es el número de procesadores y M el número de módulos de memoria) además estos conmutadores son caros pues tienen que ser de alta tecnología para que no se haga más lento el acceso a la memoria.
Para solucionar estos problemas se creó la red Omega que tiene un número menor de conmutadores. Pero en esta red, y por tener menos elementos de conmutación, ocurren más esperas que en una red de barras como la anterior, aunque menos que en una estructura en bus. Para solucionar todos estos es para lo que se creó la estructura NUMA, pero esta estructura necesita algoritmos complejos.
Un problema que estos sistemas MIMD tienen que solventar es la coherencia de las memorias cache. Las memorias cache de cada procesador guardan los datos que este está accediendo más frecuentemente. En la ejecución normal de un procesador se leen los datos de memoria y se dejan en memoria cache, las próximas lecturas o escrituras se realizan
...