37
INSTITUTO TECNOLOGICO DE CHIHUACHUA II ING. SISTEMAS COMPUTACIONALES Materia: Arquitectura de computadoras Fecha: 26 de mayo de 2015 Integrantes: Flor Ramos Muñiz Ivonne Diego Yazmin Polanco Johana Gómez Ana Teresa Morales Arredondo Jesús Sánchez

computación paralela

Embed Size (px)

Citation preview

Page 1: computación paralela

INSTITUTO TECNOLOGICO DE CHIHUACHUA II

ING. SISTEMAS COMPUTACIONALES

Materia: Arquitectura de computadoras

Fecha: 26 de mayo de 2015

Integrantes:

Flor Ramos Muñiz

Ivonne Diego

Yazmin Polanco

Johana Gómez

Ana Teresa Morales Arredondo

Jesús Sánchez

Page 2: computación paralela

2

ÍNDICE

Aspectos básicos de la computación paralela…………………………………….3

Computación paralela……………………………………………………………………….5

Taxonomía de las arquitecturas………………………………………………………8 Sistema secuencial…………………………………………………………………………13

Taxonomía de Flynn………………………………………………………………………… 14

Organización del espacio de direcciones de memoria……………………… 17

Sistemas de memoria distribuida. Multicomputadoras Clusters……….. 23

Redes De Interconexión Estática……………………………………………………….. 24

Clúster………………………………………………………………………………………………. 25

Programación De Clúster…………………………………………………………………… 27

Consideraciones Sobre Rendimiento De Los Clúster………………………….. 27

Coherencia de cache…………………………………………………………………………. 27

Mecanismos para la coherencia de la cache……………………………………… 29

Modelos de Coherencia…………………………………………………………………….. 31

Consideraciones sobre el rendimiento de los clusters……………………….. 31

Casos de estudio…………………………………………………………………………………34

Bibliografía………………………………………………………………………………………… 36

Page 3: computación paralela

3

Page 4: computación paralela

4

4.1 Aspectos básicos de la computación paralela.

La computación paralela es una forma de cómputo en la que

muchas instrucciones se ejecutan simultáneamente, operando sobre el

principio de que problemas grandes, a menudo se pueden dividir en unos

más pequeños, que luego son resueltos simultáneamente (en paralelo). Hay

varias formas diferentes de computación paralela: paralelismo a nivel de bit,

paralelismo a nivel de instrucción, paralelismo de datos y paralelismo de

tareas. El paralelismo se ha empleado durante muchos años, sobre todo en la

computación de altas prestaciones, pero el interés en ella ha crecido

últimamente debido a las limitaciones físicas que impiden el aumento de la

frecuencia. Como el consumo de energía —y por consiguiente la generación

de calor— de las computadoras constituye una preocupación en los últimos

años, la computación en paralelo se ha convertido en el paradigma

dominante en la arquitectura de computadores, principalmente en forma

de procesadores multinúcleo.

Page 5: computación paralela

5

Las computadoras paralelas pueden clasificarse según el nivel de paralelismo

que admite su hardware: equipos con procesadores multinúcleo y multi-

procesador que tienen múltiples elementos de procesamiento dentro de una

sola máquina y los clústeres, MPPS y grids que utilizan varios equipos para

trabajar en la misma tarea. Muchas veces, para acelerar la tareas específicas,

se utilizan arquitecturas especializadas de computación en paralelo junto a

procesadores tradicionales.

Los programas informáticos paralelos son más difíciles de escribir que los

secuenciales, porque la concurrencia introduce nuevos tipos de errores de

software, siendo las condiciones de carrera los más comunes. La

comunicación y sincronización entre diferentes subtareas son algunos de los

mayores obstáculos para obtener un buen rendimiento del programa

paralelo.

La máxima aceleración posible de un programa como resultado de la

paralelización se conoce como la ley de Amdahl.

Page 6: computación paralela

6

Aspectos a considerar

Diseño de computadores paralelo: Escalabilidad y Comunicaciones.

Diseño de algoritmos eficientes: No hay ganancia si los algoritmos no

se diseñan adecuadamente.

Métodos para evaluar los algoritmos paralelos: ¿Cómo de rápido se

puede resolver un problema usando una máquina paralela? ¿Con qué

eficiencia se usan esos procesadores?.

Lenguajes para computadores paralelos, flexibles para permitir una

implementación eficiente y que sean fáciles de programar.

Herramientas para la programación paralela.

Programas paralelos portables.

Compiladores paralelizantes.

4.2 COMPUTACIÓN PARALELA

La computación paralela es una técnica de programación en la que muchas instrucciones se ejecutan simultáneamente. Se basa en el principio de que los problemas grandes se pueden dividir en partes más pequeñas que pueden resolverse de forma concurrente (“en paralelo”).

TIPOS DE COMPUTACION PARALELA:

PARALELISMO A NIVEL DE BIT

Desde el advenimiento de la integración a gran escala (VLSI) como tecnología de fabricación de chips de computadora en la década de 1970 hasta alrededor de 1986, la aceleración en la arquitectura de computadores se lograba en gran medida duplicando el tamaño de la palabra en la computadora, la cantidad de información que el procesador puede manejar por ciclo. El aumento del tamaño de la palabra reduce el número de instrucciones que el procesador debe ejecutar para realizar una operación en variables cuyos tamaños son mayores que la longitud de la palabra. Por ejemplo, cuando un procesador de 8 bits debe

Page 7: computación paralela

7

sumar dos enteros de 16 bits, el procesador primero debe adicionar los 8 bits de orden inferior de cada número entero con la instrucción de adición, a continuación, añadir los 8 bits de orden superior utilizando la instrucción de adición con acarreo que tiene en cuenta el bit de acarreo de la adición de orden inferior, en este caso un procesador de 8 bits requiere dos instrucciones para completar una sola operación, en donde un procesador de 16 bits necesita una sola instrucción para poder completarla.

PARALELISMO A NIVEL DE INSTRUCCIÓN

Un programa de ordenador es, en esencia, una secuencia de instrucciones ejecutadas por un procesador. Estas instrucciones pueden reordenarse y combinarse en grupos que luego son ejecutadas en paralelo sin cambiar el resultado del programa. Esto se conoce como paralelismo a nivel de instrucción. Los avances en el paralelismo a nivel de instrucción dominaron la arquitectura de computadores desde mediados de 1980 hasta mediados de la década de 1990.

Los procesadores modernos tienen”pipeline” de instrucciones de varias etapas. Cada etapa en el pipeline corresponde a una acción diferente que el procesador realiza en la instrucción correspondiente a la etapa; un procesador con un pipeline de N etapas puede tener hasta n instrucciones diferentes en diferentes etapas de finalización. El ejemplo canónico de un procesador segmentado es un procesador RISC, con cinco etapas: pedir instrucción, decodificar, ejecutar, acceso a la memoria y escritura. El procesador Pentium 4tenía un pipeline de 35 etapas. Además del paralelismo a nivel de instrucción del pipelining, algunos procesadores pueden ejecutar más de una instrucción a la vez. Estos son conocidos como procesadores superes calares. Las instrucciones pueden agruparse juntas sólo si no hay dependencia de datos entre ellas. El scoreboarding y el algoritmo de Tomasulo (que es similar a scoreboarding pero hace uso del ) son dos de las técnicas más comunes para implementar la ejecución fuera de orden y la paralelización a nivel de instrucción.

Page 8: computación paralela

8

PARALELISMO DE DATOS

El paralelismo de datos es el paralelismo inherente en programas con ciclos, que se centra en la distribución de los datos entre los diferentes nodos computacionales que deben tratarse en paralelo. La paralelización de ciclos conduce a menudo a secuencias similares de operaciones (no necesariamente idénticas) o funciones que se realizan en los elementos de una gran estructura de datos. Muchas de las aplicaciones científicas y de ingeniería muestran paralelismo de datos. Una dependencia de terminación de ciclo es la dependencia de una iteración de un ciclo en la salida de una o más iteraciones anteriores. Las dependencias de terminación de ciclo evitan la paralelización de ciclos. Este bucle no se puede paralelizar porque CUR depende de sí mismo (PREV2) y de PREV1, que se calculan en cada iteración del bucle. Dado que cada iteración depende del resultado de la anterior, no se pueden realizar en paralelo. A medida que el tamaño de un problema se hace más grande, la paralelización de datos disponible generalmente también lo hace.

PARALELISMO DE TAREAS El paralelismo de tareas es la característica de un programa paralelo en la que cálculos completamente diferentes se pueden realizar en cualquier conjunto igual o diferente de datos. Esto contrasta con el paralelismo de datos, donde se realiza el mismo cálculo en distintos o mismos grupos de datos. El paralelismo de tareas por lo general no escala con el tamaño de un problema. Durante muchos años, la computación paralela se ha aplicado en la computación de altas prestaciones, pero el interés en ella ha aumentado en los últimos años debido a las restricciones físicas que impiden el escalado en frecuencia. La computación paralela se ha convertido en el paradigma dominante en la arquitectura de computadores, principalmente en los procesadores multinúcleo. Sin embargo, recientemente, el consumo de energía de los ordenadores paralelos se ha convertido en una preocupación. Los ordenadores paralelos se pueden clasificar según el nivel de paralelismo que admite su hardware: los ordenadores multinúcleo y multiproceso tienen varios elementos de procesamiento en una sola máquina, mientras que los clusters, los MPP y los grids emplean varios ordenadores para trabajar en la misma tarea. Los programas de ordenador paralelos son más difíciles de escribir que los secuenciales porque la concurrencia introduce nuevos tipos

Page 9: computación paralela

9

de errores de software, siendo las condiciones de carrera los más comunes. La comunicación y la sincronización entre las diferentes subtareas son típicamente las grandes barreras para conseguir un buen rendimiento de los programas paralelos. El incremento de velocidad que consigue un programa como resultado de la paralelización viene dado por la ley de Amdahl.

Taxonomía de las arquitecturas • Clasificación de Flynn Clasificación clásica de arquitectura de computadores que hace alusión a sistemas con uno o varios procesadores. Flynn la publicó por primera vez en 1966 y por segunda vez en 1970. Esta taxonomía se basa en el flujo que siguen los datos dentro de la máquina y de las instrucciones sobre esos datos. Se define como flujo de instrucciones al conjunto de instrucciones secuenciales que son ejecutadas por un único procesador y como flujo de datos al flujo secuencial de datos requeridos por el flujo de instrucciones. Con estas consideraciones, Flynn clasifica los sistemas en cuatro categorías: • SISD (Single Instruction stream, Single Data stream) Los sistemas de este tipo se caracterizan por tener un único flujo de instrucciones sobre un único flujo de datos, es decir, se ejecuta una instrucción detrás de otra. Este es el concepto de arquitectura serie de Von Neumann donde, en cualquier momento, sólo se ejecuta una única instrucción. Un ejemplo de estos sistemas son las máquinas secuenciales convencionales. • SIMD (Single Instruction stream, Multiple Data stream) Estos sistemas tienen un único flujo de instrucciones que operan sobre múltiples flujos de datos. Ejemplos de estos sistemas los tenemos en las máquinas vectoriales con hardware escalar y vectorial. El procesamiento es síncrono, la ejecución de las instrucciones sigue siendo secuencial como en el caso anterior, todos los elementos realizan una misma instrucción pero sobre una gran cantidad de datos. Por este motivo existirá concurrencia de operación, es decir, esta clasificación es el origen de la máquina paralela. El funcionamiento de este tipo de sistemas es el siguiente. La Unidad de Control manda una misma instrucción a todas las unidades de proceso (ALUs). Las unidades de proceso operan sobre datos diferentes pero con la misma instrucción recibida. 1 Existen dos alternativas distintas que aparecen después de realizarse esta clasificación: • Arquitectura Vectorial con segmentación: Una CPU única particionada en unidades funcionales independientes trabajando sobre flujos de datos concretos • Arquitectura

Page 10: computación paralela

10

Matricial (matriz de procesadores): Varias ALUs idénticas a las que el procesador de instrucciones asigna una única instrucción pero trabajando sobre diferentes partes del programa. • SIMD CON CPU PARTICIONADA En este tipo de sistemas, la CPU se diseña como un conjunto de unidades funcionales independientes que ejecutan simultáneamente varias operaciones aritmético/lógicas. La CPU contiene un único procesador con instrucciones que procesa un único flujo de estas liberando cada instante una. Debido a que las unidades funcionales operan independientemente, es posible liberar nuevas instrucciones antes de que finalice la ejecución de las instrucciones previas. Ejemplos de este tipo de sistemas los encontramos en los computadores CRAY monoprocesador, CYBER 205, FUJITSU, HITACHE, NEC SUPERCOMPUTERS, IBM 390 VF, IBM 9000 VF, ALLIANT FX/1 Y CONVEX C−1. • SIMD CON MULTIPLES ALUS Estos sistemas trabajan en modo lock step, ejecutando o ignorando una misma instrucción para todas las ALUs. Existe un único procesador que maneja el flujo de instrucciones del programa y que transfiere todas las instrucciones a las diferentes unidades aritmético/lógicas. Cada ALU opera sobre un segmento diferente de datos del programa. Ejemplo de funcionamiento del sistema con el siguiente bucle: DO 2000 I=1,N A(I) = B(I) + C(I) 2000 CONTINUE El procesador asigna a cada ALU la operación de suma de B(I) con C(I) y siendo el almacenamiento del resultado en A(I) pero pasando a cada ALU un valor diferente de I. En el caso de que haya menos ALUs que iteraciones del bucle, el procesador ordenará la ejecución hasta que estén procesados todos los valores de I. En el caso de que haya más ALUs que iteraciones, existirá un número de estas que no estén operativas durante la ejecución de las instrucciones del bucle. Una ALU inactiva o en OFF significa que: • La ALU recibe instrucciones pero las ignora • La ALU ejecuta cálculos pero no almacena ningún resultado. • MISD (Multiple Instruction stream, Single Data stream) Sistemas con múltiples instrucciones que operan sobre un único flujo de datos. Este tipo de sistemas no ha tenido implementación hasta hace poco tiempo. Los sistemas MISD se contemplan de dos maneras distintas: • Varias instrucciones operando simultáneamente sobre un único dato. Varias instrucciones operando sobre un dato que se va convirtiendo en un resultado que será la entrada para la siguiente etapa. Se trabaja de forma segmentada, todas las unidades de proceso pueden trabajar de forma concurrente. •

Page 11: computación paralela

11

Ejemplos de estos tipos de sistemas son los arrays sistólicos o arrays de procesadores. También podemos encontrar aplicaciones de redes neuronales en máquinas masivamente paralelas. • MIMD (Multiple Instruction stream, Multiple Data stream) Sistemas con un flujo de múltiples instrucciones que operan sobre múltiples datos. Estos sistemas empezaron a utilizarse a principios de los 80. Son sistemas con memoria compartida que permiten ejecutar varios procesos simultáneamente (sistema multiprocesador). Cuando las unidades de proceso reciben datos de una memoria no compartida estos sistemas reciben el nombre de MULTIPLE SISD (MSISD). En arquitecturas con varias unidades de control (MISD Y MIMD), existe otro nivel superior con una unidad de control que se encarga de controlar todas las unidades de control del sistema. Ejemplo de estos sistemas son las máquinas paralelas actuales. • Categorías de Ordenadores Paralelos Clasificación moderna que hace alusión única y exclusivamente a los sistemas que tienen más de un procesador (i.e máquinas paralelas). Existen dos tipos de sistemas teniendo en cuenta su acoplamiento. Los sistemas fuertemente acoplados son aquellos en los que los procesadores dependen unos de otros. Los sistemas débilmente acoplados son aquellos en los que existe poca interacción entre los diferentes procesadores que forman el sistema. Atendiendo a esta y a otras características, la clasificación moderna divide a los sistemas en dos tipos: Sistemas multiprocesador (fuertemente acoplados) y sistemas multicomputador (débilmente acoplados). • Multiprocesadores Un multiprocesador puede verse como un computador paralelo compuesto por varios procesadores interconectados que comparten un mismo sistema de memoria. Los sistemas multiprocesadores son arquitecturas MIMD con memoria compartida. Tienen un único espacio de direcciones para todos los procesadores y los mecanismos de comunicación se basan en el paso de mensajes desde el punto de vista del programador. 3 Dado que los multiprocesadores comparten diferentes módulos de memoria, pudiendo acceder a un mismo módulo varios procesadores, a los multiprocesadores también se les llama sistemas de memoria compartida. Dependiendo de la forma en que los procesadores comparten la memoria, se clasifican en sistemas multiprocesador UMA, NUMA y COMA. • UMA (Uniform Memory Access) Sistema multiprocesador con acceso uniforme a memoria. La memoria física es uniformemente compartida por todos los procesadores, esto quiere decir

Page 12: computación paralela

12

que todos los procesadores tienen el mismo tiempo de acceso a todas las palabras de la memoria. Cada procesador tiene su propia caché privada y también se comparten los periféricos. Los multiprocesadores son sistemas fuertemente acoplados (tightly−coupled), dado el alto grado de compartición de los recursos (hardware o software) y el alto nivel de interacción entre procesadores, lo que hace que un procesador dependa de lo que hace otro. El sistema de interconexión debe ser rápido y puede ser de uno de los siguientes tipos: • Bus común • Red crossbar • Red multietapa Este modelo es conveniente para aplicaciones de propósito general y de tiempo compartido por varios usuarios. Existen varias categorías de sistemas UMA. • Sistema Simétrico Cuando todos los procesadores tienen el mismo tiempo de acceso a todos los componentes del sistema (incluidos los periféricos), reciben el nombre de sistemas multiprocesador simétrico. Los procesadores tienen el mismo dominio (prioridad) sobre los periféricos y cada procesador tiene la misma capacidad para procesar. • Sistema Asimétrico Los sistemas multiprocesador asimétrico, son sistemas con procesadores maestros y procesadores esclavos, en donde sólo los primeros pueden ejecutar aplicaciones y dónde en tiempo de acceso para diferentes procesadores no es el mismo. Los procesadores esclavos (attached) ejecutan código usuario bajo la supervisión del maestro, por lo tanto cuando una aplicación es ejecutada en un procesador maestro dispondrá de una cierta prioridad. • NUMA (Non Uniform Memory Access) Un sistema multiprocesador NUMA es un sistema de memoria compartida donde el tiempo de acceso varía según donde se encuentre localizado el acceso. El acceso a memoria, por tanto, no es uniforme para diferentes procesadores. Existen memorias locales asociadas a cada procesador y estos pueden acceder a datos de su memoria local de una manera más rápida que a las memorias de otros procesadores, debido a que primero debe aceptarse dicho acceso por el 4 procesador del que depende el módulo de memoria local. Todas las memorias locales conforman la memoria global compartida y físicamente distribuida y accesible por todos los procesadores.

Page 13: computación paralela

13

• Cluster Jerárquico Otro modelo NUMA que nace como la mezcla del modelo UMA explicado anteriormente y el modelo NUMA anterior, es el cluster jerárquico en el que se combinan las memorias locales y las globales obteniendo una cierta escalabilidad del sistema. Los procesadores aparecen distribuidos en clusters (1 sistema UMA o un 1 sistema NUMA). Estos clusters están conectados a la memoria global compartida. El sistema en su totalidad es un sistema NUMA, ya que el acceso a memoria es no uniforme por parte de los clusters. La ventaja de estos sistemas con respecto a los sistemas UMA, es que el acceso a memoria local es mucho más rápido. • COMA (Cache Only Memory Access) Los sistemas COMA son un caso especial de los sistemas NUMA. Este tipo de sistemas no ha tenido mucha transcendencia, al igual que los sistemas SIMD. Las memorias distribuidas son memorias cachés, por este motivo es un sistema muy restringido en cuanto a la capacidad de memoria global. No hay jerarquía de memoria en cada módulo procesador. Todas las cachés forman un mismo espacio global de direcciones. El acceso a las cachés remotas se realiza a través de los directorios distribuidos de las cachés. Dependiendo de la red de interconexión utilizada, se pueden utilizar jerarquías en los directorios para ayudar a la localización de copias de bloques de caché. • Multicomputadores Los sistemas multicomputadores se pueden ver como un computador paralelo en el cual cada procesador tiene su propia memoria local. En estos sistemas la memoria se encuentra distribuida y no compartida como en los sistemas multiprocesador. Los computadores se comunican a través de paso de mensajes, ya que éstos sólo tienen acceso directo a su memoria local y no a las memorias del resto de procesadores. El diagrama de bloques de un sistema multicomputador coincide con el visto para los sistemas UMA, la diferencia viene dada porque la red de interconexión no permite un acceso directo entre memorias, sino que la comunicación se realiza por paso de mensajes. La transferencia de los datos se realiza a través de la red de interconexión que conecta un subconjunto de procesadores con otro subconjunto. La transferencia de unos procesadores a otros se realiza por tanto por múltiples transferencias entre procesadores conectados dependiendo del establecimiento de dicha red. Dado que la memoria está distribuida entre los diferentes elementos de proceso, estos sistemas reciben el nombre de distribuidos. Por otra parte, estos sistemas son débilmente

Page 14: computación paralela

14

acoplados, ya que los módulos funcionan de forma casi independiente unos de otros.

Sistema secuencial

A diferencia de los sistemas combinacionales, en los sistemas secuenciales, los valores de las salidas, en un momento dado, no dependen exclusivamente de los valores de las entradas en dicho momento, sino también de los valores anteriores. El sistema secuencial más simple es el biestable. La mayoría de los sistemas secuenciales están gobernados por señales de reloj. A éstos se los denomina "síncronos" o "sincrónicos", a diferencia de los "asíncronos" o "asincrónicos" que son aquellos que no son controlados por señales de reloj. A continuación se indican los principales sistemas secuenciales que pueden encontrarse en forma de circuito integrado o como estructuras en sistemas programados: * Contador * Registros En todo sistema secuencial nos encontraremos con: a) Un conjunto finito, n, de variables de entrada (X1, X2,..., Xn). b) Un conjunto finito, m, de estados internos, de aquí que los estados secuenciales también sean denominados autómatas finitos. Estos estados proporcionarán m variables internas (Y1,Y2,..., Ym). c) Un conjunto finito, p, de funciones de salida (Z1, Z2,..., Zp). Dependiendo de como se obtengan las funciones de salida, Z, los sistemas secuenciales pueden tener dos estructuras como las que se observan el la siguiente figura, denominadas autómata de Moore, a), y autómata de Mealy, b).

Page 15: computación paralela

15

4.2.2.1 Taxonomía de Flynn

Cuando se analizan las características de las arquitecturas típicas de

computadores y se estudia el grado de paralelismo, es conveniente conocer

la clasificación debida a Flynn (1966), basada en la forma de procesar los

flujos de instrucciones y de datos. Dicha clasificación divide a los

computadores atendiendo a su paralelismo explícito en 4 grupos:

SISD: Flujo único de instrucciones-flujo único de datos.

SIMD: Flujo único de instrucciones-flujo múltiple de datos.

MISD: Flujo múltiple de instrucciones-flujo único de datos.

MIMD: Flujo múltiple de instrucciones-flujo múltiple de datos.

La arquitectura SISD, que esquemáticamente se representa en la siguiente

figura corresponde a la mayoría de los sistemas uniprocesadores actuales.

Esquema simplificado de la arquitectura SISD.

Page 16: computación paralela

16

La memoria principal genera el flujo de instrucciones a la Unidad de Control,

que, tras decodificarlas e interpretarlas, ordena su ejecución en la Unidad

Operativa, compuesta por la ALU y los registros internos de trabajo. El flujo

de datos bidireccional comunica la memoria principal y la Unidad Operativa.

En el Funcionamiento de los computadores SISD sólo hay una corriente de

instrucciones unidireccional y otra de datos bidireccional.

Arquitectura SIMD, de flujo único de instrucciones y flujos múltiples de

datos.

En los computadores con arquitectura SIMD, la única Unidad de Control

existente supervisa el funcionamiento del conjunto de Unidades Operativas

disponible. La estructura corresponde a los llamados procesadores

matriciales. Como se muestra en la figura, la Unidad de Control extrae e

interpreta las instrucciones y envía las correspondientes señales de control a

las Unidades Operativas encargadas de su ejecución. La Unidad de Control

comienza la búsqueda de una nueva instrucción, nada más comenzada la

ejecución de la anterior, siendo posible de esta forma, realizar varias

instrucciones simultáneamente. Cada Unidad Operativa de la figura trabaja

con un flujo de datos concreto, que se obtiene de una memoria compartida

compuesta por varios módulos.

Page 17: computación paralela

17

Arquitectura MISD de múltiple flujo de instrucciones y flujo único de datos.

La estructura MISD consta de varias unidades de Control que reciben

diferentes flujos de instrucciones que son ejecutadas en las correspondientes

Unidades Operativas, las cuales se alimentan de un único flujo de datos. Un

computador MISD se asemeja a una superestructura segmentada en la que

cada procesador realiza una parte del procedimiento sobre el flujo de datos.

Arquitectura MIMD de flujo múltiple de instrucciones y flujo múltiple de

datos.

Finalmente, se muestra un esquema general de la arquitectura MIMD con

flujo múltiple de instrucciones y flujo múltiple de datos. Se trata de la

estructura típica de un sistema multiprocesador, que puede definirse como

Page 18: computación paralela

18

un conjunto de procesadores serie, cuyas unidades operativas soportan un

flujo de datos y las unidades de control, un flujo de instrucciones. Varios

procesadores autónomos que ejecutan simultáneamente instrucciones

diferentes sobre datos diferentes. Los sistemas distribuidos suelen

clasificarse como arquitecturas MIMD; bien sea explotando un único espacio

compartido de memoria, o uno distribuido. Es una técnica empleada para

lograr paralelismo. Las máquinas que usan MIMD tienen un número de

procesadores que funcionan de manera asíncrona e independiente. En

cualquier momento, cualquier procesador puede ejecutar diferentes

instrucciones sobre distintos datos.

4.2.2.2 Organización del espacio de direcciones de memoria

Las memorias consisten en varias celdas (o localidades) , cada una de las

cuales pueden almacenar un elemento de información. Cada celda viene un

número, su dirección, con el cual los programas pueden referirse a ella.

Si una memoria tiene n celdas, tendrán las direcciones 0 a n-1. Todas las

celdas de una memoria contienen el mismo número de bits. Si una celda

consta de k bits, podrá obtener cualquiera de 2ᵏ combinaciones de bits

distintas.

Page 19: computación paralela

19

En la figura 2-9 se muestran 3 diferentes organizaciones para una memoria

de 96 bits. Observe que celdas adyacentes tienen direcciones consecutivas

(por definición).

Las computadoras que emplean el sistema de numeración binario (incluidas

las notaciones octal y hexadecimal para números binarios) expresan las

direcciones de memoria como números binarios. Si una dirección tienen m

bits, el número máximo de celdas direccionables es 2ᵐ.

Por ejemplo, una dirección empleada para referirse a la memoria de la figura

2-9(a) necesita al menos 4 bits para expresar todos los números del 0 al 11.

En cambio, basta una dirección de 3 bits para las figuras 2-9(b) y (c). El

número de bits de la dirección determina el número máximo de celdas

direccionables directamente en la memoria y es independiente del número

de bits por celda. Una memoria que tienen 12¹² celdas de 8 bits cada una, y

una que tiene 2¹² celdas de 64 bits cada una, necesitan ambas direcciones de

12 bits.

Page 20: computación paralela

20

En la figura 2-10 se da el número de bits por celda de algunas computadoras

que se han vendido comercialmente. La importancia de la celda es que es la

unidad direccionable más pequeña. En años recientes casi todos los

fabricantes de computadoras han adoptado como estándar una celda de 8

bits, que recibe el nombre de byte. Los bytes se agrupan en palabras. Una

computadora con palabras de 32 bits tiene 4 bytes/palabra, mientras que

una con palabras de 64 bits tiene 8 bytes/palabra. La importancia de las

palabras es que casi todas las instrucciones operan con palabras enteras; por

ejemplo, suman dos palabras. Así, una máquina de 32 bits tiene registros de

32 bits e instrucciones para manipular palabras de 32 bits, mientras que una

máquina de 64 bits tiene registros de 64 bits e instrucciones para transferir,

sumar, restar, y manipular de otras maneras palabras de 64 bits.

Page 21: computación paralela

21

Page 22: computación paralela

22

Memoria de 8 Bits

Una organización de memoria muy utilizada para construir memorias grandes

en la cual sea posible direccionar palabras individuales se muestra en la

figura 3-29.

Page 23: computación paralela

23

Page 24: computación paralela

24

Este ejemplo ilustra una memoria con cuatro palabras de 3 bits. Cada

operación lee o escribe una palabra de 3 bits completa. Si bien la capacidad

total de memoria de 12 bits apenas rebasa la de nuestro flip-flop octal, este

diseño requiere menos terminales y, lo que es más importante, es fácil

extenderla a memorias grandes. Aunque la memoria de la figura 3-29 podría

parecer complicada a primera vista, en realidad es muy sencilla gracias a su

estructura regular. Este circuito tiene ocho líneas de entrada y tres líneas de

salida. Tres de las entradas son datos: I0, I e I2; dos son para la dirección: A0

y A1; y tres son de control: CS para seleccionar el chip (Chip Select), RD para

distinguir entre lectura (ReaD) y escritura, y OE para habilitar la salida

(Output Enable). Las tres salidas son de datos: D0, D1 y D2. En principio, esta

memoria podría colocarse en un paquete de 14 terminales, incluida la de

potencia y la de tierra, en comparación con 20 terminales para el flip-flop

octal. Para seleccionar este chip de memoria, la lógica externa debe poner CS

en 1 y también poner RD en 1 si se desea leer o en 0 si se desea escribir. Las

dos líneas de dirección deben ajustarse en modo que indique cuál de las

cuatro palabras de 3 bits se desea leer o escribir. En el caso de una operación

de lectura, las líneas de entrada de datos no se usan, pero la palabra

seleccionada se coloca en las líneas de salida de datos. Para una operación de

escritura, los bits presentes en las líneas de entrada de datos se cargan en la

palabra de memoria seleccionada; las líneas de salida de datos no se usan.

4.3 Sistemas de memoria distribuida. Multicomputadoras Clusters. Los sistemas de memoria distribuida o multicomputadores pueden ser de dos tipos básicos. El primer de ellos consta de un único computador con múltiples CPUs comunicadas por un bus de datos mientras que en el segundo se utilizan múltiples computadores, cada uno con su propio procesador, enlazados por una red de interconexión más o menos rápida. Sobre los sistemas de multicomputadores de memoria distribuida, se simula memorias compartidas. Se usan los mecanismos de comunicación y sincronización de sistemas multiprocesadores.

Page 25: computación paralela

25

Un clúster es un tipo de arquitectura paralela distribuida que consiste de un conjunto de computadores independientes interconectados operando de forma conjunta como único recurso computacional sin embargo, cada computador puede utilizarse de forma independiente o separada. En esta arquitectura, el computador paralelo es esencialmente una colección de procesadores secuenciales, cada uno con su propia memoria local, que pueden trabajar conjuntamente. Cada nodo tiene rápido acceso a su propia memoria y acceso a la memoria de otros nodos mediante una red de comunicaciones, habitualmente una red de comunicaciones de alta velocidad.

Los datos son intercambiados entre los nodos como mensajes a través de la red.

Una red de ordenadores, especialmente si disponen de una interconexión de alta velocidad, puede ser vista como un multicomputador de memoria distribuida y como tal ser utilizada para resolver problemas mediante computación paralela.

Redes De Interconexión Estática

Las redes estáticas emplean enlaces directos fijos entre los nodos. Estos enlaces, una vez fabricado el sistema son difíciles de cambiar, por lo que la escalabilidad de estas topologías es baja. Las redes estáticas pueden

Page 26: computación paralela

26

utilizarse con eficiencia en los sistemas en que pueden predecirse el tipo de tráfico de comunicaciones entre sus procesadores. Clases de redes de interconexión: Formación lineal: Se trata de una red unidimensional en que los nodos se conectan cada uno con el siguiente medianteN-1 enlaces formando una línea.

Mallas y toros: Esta red de interconexión es muy utilizada en la práctica. Las redes en toro son mallas en que sus filas y columnas tienen conexiones en anillo, esto contribuye a disminuir su diámetro. Esta pequeña modificación permite convertir a las mallas en estructuras simétricas y además reduce su diámetro a la mitad.

Clúster

Un clúster es un grupo de ordenadores débilmente acoplados que trabajan en estrecha colaboración, de modo que en algunos aspectos pueden considerarse como un solo equipo. Los clústeres se componen de varias máquinas independientes conectadas por una red. Mientras que las máquinas de un clúster no tienen que ser simétricas, de no serlo, el balance de carga es más difícil de lograr.

Page 27: computación paralela

27

El tipo más común de clúster es el cluster Beowulf, que es un clúster implementado con múltiples ordenadores comerciales idénticos conectados a una red de área local TCP/IPEthernet. La tecnología Beowulf fue desarrollada originalmente por Thomas Sterling y Donald Becker. La gran mayoría de los superordenadores TOP500 son clústeres. Se aplica a los conjuntos o conglomerados de computadoras construidos mediante la utilización de hardwares comunes y que se compartan como si fuesen una única computadora. Los clúster son usualmente empleados para mejorar el rendimiento y la disponibilidad por encima de la que es provista por un solo computador típicamente siendo más económico que computadores individuales de rapidez y disponibilidad comparables.De un clúster se espera que presente combinaciones de los siguientes servicios: Alto rendimiento

Alta disponibilidad

Balance de carga

Escalabilidad

La construcción de los ordenadores del clúster es más fácil y económica debido a su flexibilidad: pueden tener toda la misma configuración de hardware y sistema operativo diferente rendimiento pero con arquitectura y sistemas operativos similares o tener diferente hardware y sistema operativo lo que hace más fácil y económica su construcción. Para que un clúster funcione como tal no basta solo con conectar entre si los ordenadores, sino que es necesario proveer un sistema de manejo del clúster, el cual se encargue de interactuar con el usuario y los procesos que ocurren en él para optimizar el funcionamiento. La tecnología clúster permite a las organizaciones incrementar su capacidad de procesamiento usando tecnología estándar tanto en componentes de hardware como de software que pueden adquirirse a un costo relativamente bajo.

Page 28: computación paralela

28

Programación De Clúster Estos clúster están diseñados y optimizados para correr programas paralelos. En este caso, los programas tienen que ser hechos específicamente para funcionar en forma paralela. Típicamente estos programas son modelos que requieren realizar gran cantidad de cálculos numéricos. La ventaja de programarlos de esta manera y correrlos en un clúster es que se reduce drásticamente los tiempos de proceso. En el caso de modelos meteorológicos usados para predecir el tiempo es obvia la necesidad de correrlos en tiempo mínimo. Cuando se programa un modelo en una plataforma multiprocesadores es necesario usar esquemas de programación paralela. Las bibliotecas son las que permiten paralelizacion de tareas. En el caso de los clúster SCALI, portar programas hechos con bibliotecas MPI es directo gracias al uso de biblioteca SCAMPI

Consideraciones Sobre Rendimiento De Los Clúster Para diseñar, implementar, probar y mantener un clúster se requiere un entendimiento básico pero claro de hardware de computadoras, de redes de computadoras y de sistemas operativos y la habilidad para investigar algunos tópicos especializados, como dispositivos de interconexión de Alta velocidad, tal vez reintroducirse a lenguajes de programación como FORTRAN y librerías para el desarrollo de aplicaciones como MPI. Una vez escogido un sistema operativo, dígase Linux, se requiere algo de experiencia en la administración de sistemas Linux y en la forma de realizar conexiones de red. De manera lógica, cada nodo delx clúster tiene una parte de hardware y otra de software. El hardware está compuesto por procesadores, memoria, interfaz de red y discos duros entre otros.

4.3.2 Coherencia de cache

La coherencia de cache hace referencia a la integridad de los datos

almacenados en las caches locales de los recursos compartidos. La

coherencia de la cache es un caso especial de la coherencia de memoria.

Page 29: computación paralela

29

Haciendo referencia al dibujo, si el cliente de arriba tiene una copia de un

bloque de memoria de una lectura previa y el cliente de abajo cambia ese

bloque, el cliente de arriba podría estar trabajando con datos erróneos, sin

tener conocimiento de ello. La coherencia de la cache intenta administrar

estos conflictos y mantener consistencia entre las caches y la memoria.

En un sistema multiprocesador de memoria compartida con una memoria

caché separada para cada procesador, es posible tener muchas copias de

cualquier un operando de instrucción: una copia en la memoria principal y

uno en cada memoria caché. Cuando se modifica una copia de un operando,

las otras copias del operando se debe cambiar también. Coherencia de caché

es la disciplina que asegura que los cambios en los valores de los operandos

compartidos se propagan por todo el sistema en el momento oportuno.

Hay tres niveles diferentes de coherencia de caché:

1. Cada operación de escritura parece ocurrir instantáneamente.

2. Todos los procesadores ver exactamente la misma secuencia de los

cambios de los valores para cada operando separada.

3. Diferentes procesadores pueden ver una operación y asumir diferentes

secuencias de valores.

Tanto en el nivel 2 el comportamiento y el nivel de comportamiento 3, un

programa puede observar datos obsoletos. Recientemente, los diseñadores

de computadoras han llegado a darse cuenta de que la disciplina de

programación requerida para hacer frente a la conducta de nivel 2 es

Page 30: computación paralela

30

suficiente para lidiar también con el comportamiento de nivel 3. Por lo tanto,

en algún momento sólo el nivel 1 y el comportamiento del nivel 3 se verán en

máquinas.

Mecanismos para la coherencia de la cache

Los protocolos basados en directorio mantienen un directorio centralizado de

los bloques que hay en las caches. Se utilizan tanto en multiprocesadores con

memoria físicamente distribuida, como en sistemas con memoria

centralizada con red escalable. Estos protocolos de mantenimiento de

coherencia reducen el tráfico en la red enviando selectivamente órdenes sólo

a aquellas caches que disponen de una copia válida del bloque implicado en

la operación de memoria.

El protocolo Snoopy hace que las caches individualmente monitoreen las

líneas (buses) de direcciones de accesos a memoria con respecto a los

bloques que han copiado. Cuando una operación de escritura es observada

sobre una dirección de un bloque del cual tiene un bloque, el controlador de

cache invalida su copia. También es posible que el controlador de cache

observe la dirección y el dato correspondiente a esa dirección, intentando así

actualizar su copia cuando alguien modifica dicho bloque en la memoria

principal.

El protocolo de memoria distribuida imita a los anteriores en un intento de

mantener la consistencia entre bloques de memoria en sistemas con débil

acoplamiento.

Coherencia basada Directory:

En un sistema basado en directorios, que los datos sean compartidos se

coloca en un directorio común que mantiene la coherencia entre los cachés.

El directorio actúa como un filtro a través del cual el procesador debe pedir

permiso para cargar una entrada de la memoria principal a la memoria caché.

Cuando se modifica una entrada del directorio ni actualizaciones o inválida

las otras cachés con esa entrada.

Page 31: computación paralela

31

IGMP

Es el proceso en el que los cachés individuales monitorear las líneas de

dirección para los accesos a los lugares de memoria que tienen en caché. Se

llama un protocolo de invalidación de escritura cuando se observa una

operación de escritura en un lugar que una caché tiene una copia y el

controlador de memoria caché invalida su propia copia de la posición de

memoria snooped.

Un filtro snoop reduce el tráfico IGMP mediante el mantenimiento de una

pluralidad de entradas, cada uno representando una línea de caché que

puede ser adquirido por uno o más nodos. Cuando sea necesario reemplazar

una de las entradas, el filtro snoop selecciona para el reemplazo de la

entrada representa la línea o líneas de propiedad de los nodos de menor

cantidad, determinada a partir de un vector de presencia en cada una de las

entradas de caché. Un tipo temporal o de otro tipo de algoritmo se utiliza

para refinar la selección si más de una línea de caché es poseído por el menor

número de nodos.

Snarfing

Es donde un controlador de memoria caché observa tanto la dirección y los

datos en un intento de actualizar su propia copia de una ubicación de

memoria cuando un segundo maestro modifica una ubicación en la memoria

principal. Cuando se observa una operación de escritura en un lugar que una

caché tiene una copia, el controlador de memoria caché actualiza su propia

copia de la posición de memoria snarfed con los nuevos datos. Sistemas de

memoria compartida distribuida imitan estos mecanismos en un intento de

mantener la coherencia entre los bloques de memoria en los sistemas

débilmente acoplados.

Los dos tipos más comunes de la coherencia que se estudian normalmente

son IGMP y el Directorio de base, cada uno con sus propias ventajas y

desventajas. Protocolos Snooping tienden a ser más rápido, si hay suficiente

Page 32: computación paralela

32

ancho de banda disponible, ya que todas las transacciones son una respuesta

de solicitud/visto por todos los procesadores.

El inconveniente es que snooping no es escalable. Cada solicitud debe ser

transmitida a todos los nodos en un sistema, lo que significa que a medida

que el sistema se hace más grande, el tamaño del bus y el ancho de banda

que proporciona deben crecer. Directorios, por otra parte, tienden a tener

latencias más largas pero el uso de mucho menos ancho de banda ya que los

mensajes son punto a punto y no transmiten. Por esta razón, muchos de los

sistemas más grandes utilizan este tipo de coherencia de caché.

Modelos de Coherencia

Varios modelos y protocolos han sido desarrollados para mantener la

coherencia de la cache, tales como protocolo MSI, protocolo MESI, protocolo

MOSI y el protocolo MOESI. La elección de un modelo de consistencia es

crucial a la hora de diseñar un sistema de cache coherente. Los modelos de

coherencia difieren en rendimiento y escalabilidad, por lo que deben ser

evaluados para cada sistema diseñado.

Además, las transiciones entre estados en una implementación en concreto

de estos protocolos pueden variar. Por ejemplo una implementación puede

elegir diferentes transiciones para actualizar y actualiza tales como

actualización-en-lectura, actualización-en-escritura, invalidación-en-lectura, o

invalidación-en-escritura.

La elección de una transición puede afectar a la cantidad de tráfico entre

caches, lo que a su vez podría afectar al ancho de banda disponible por las

caches para la operación actual. Esto debe ser tenido en consideración en el

diseño de software distribuido que podría causar problemas de contención

entre caches de múltiples procesadores.

4.4.4 Consideraciones sobre el rendimiento de los clusters

El término clúster (del inglés clúster, "grupo" o "raíz") se aplica a los

conjuntos o conglomerados de computadoras construidos mediante la

Page 33: computación paralela

33

utilización de componentes de hardware comunes y que se comportan como

si fuesen una única computadora.

Hoy en día desempeñan un papel importante en la solución de problemas de

las ciencias, las ingenierías y del comercio moderno. La tecnología de clúster

ha evolucionado en apoyo de actividades que van desde aplicaciones de

súper-cómputo y software de misiones críticas, servidores web y comercio

electrónico, hasta bases de datos de alto rendimiento, entre otros usos.

El cómputo con clúster surge como resultado de la convergencia de varias

tendencias actuales que incluyen la disponibilidad de microprocesadores

económicos de alto rendimiento y redes de alta velocidad, el desarrollo de

herramientas de software para cómputo distribuido de alto rendimiento, así

como la creciente necesidad de potencia computacional para aplicaciones

que la requieran.

Simplemente, un clúster es un grupo de múltiples ordenadores unidos

mediante una red de alta velocidad, de tal forma que el conjunto es visto

como un único ordenador, más potente que los comunes de escritorio.

Los clúster son usualmente empleados para mejorar el rendimiento y/o la

disponibilidad por encima de la que es provista por un solo computador

típicamente siendo más económico que computadores individuales de

rapidez y disponibilidad comparables.

De un clúster se espera que presente combinaciones de los siguientes

servicios:

Alto rendimiento

Alta disponibilidad

Balanceo de carga

Escalabilidad

La construcción de los ordenadores del clúster es más fácil y económica

debido a su flexibilidad: pueden tener todos la misma configuración de

hardware y sistema operativo (clúster homogéneo), diferente rendimiento

Page 34: computación paralela

34

pero con arquitecturas y sistemas operativos similares (clúster

semihomogéneo), o tener diferente hardware y sistema operativo (clúster

heterogéneo), lo que hace más fácil y económica su construcción.

Para que un clúster funcione como tal, no basta solo con conectar entre sí los

ordenadores, sino que es necesario proveer un sistema de manejo del

clúster, el cual se encargue de interactuar con el usuario y los procesos que

corren en él para optimizar el funcionamiento.

Los tipos de clústeres, establecidos de acuerdo con el uso que se dé y los

servicios que ofrecen, determinan el significado del término para el grupo

que lo utiliza.

Los clústeres pueden clasificarse según sus características:

HPCC (High Performance Computing Clusters: clústeres de alto

rendimiento).

HA o HACC (High Availability Computing Clusters: clústeres de alta

disponibilidad).

HT o HTCC (High Throughput Computing Clusters: clústeres de alta

eficiencia).

Alto rendimiento: Son clústeres en los cuales se ejecutan tareas que

requieren de gran capacidad computacional, grandes cantidades de

memoria, o ambos a la vez. El llevar a cabo estas tareas puede comprometer

los recursos del clúster por largos periodos de tiempo.

Alta disponibilidad: Son clústeres cuyo objetivo de diseño es el de proveer

disponibilidad y confiabilidad. Estos clústeres tratan de brindar la máxima

disponibilidad de los servicios que ofrecen. La confiabilidad se provee

mediante software que detecta fallos y permite recuperarse frente a los

mismos, mientras que en hardware se evita tener un único punto de fallos.

Alta eficiencia: Son clústeres cuyo objetivo de diseño es el ejecutar la mayor

cantidad de tareas en el menor tiempo posible. Existe independencia de

datos entre las tareas individuales. El retardo entre los nodos del clúster no

es considerado un gran problema.

Page 35: computación paralela

35

Los clústeres pueden también clasificar en:

clústeres de IT comerciales (de alta disponibilidad y alta eficiencia)

clústeres científicos (de alto rendimiento).

A pesar de las discrepancias a nivel de requisitos de las aplicaciones, muchas

de las características de las arquitecturas de hardware y software, que están

por debajo de las aplicaciones en todos estos clústeres, son las mismas. Más

aún, un clúster de determinado tipo, puede también presentar características

de los otros.

En general, un clúster necesita de varios componentes de software y

hardware para poder funcionar:

Nodos

Almacenamiento

Sistemas operativos

Conexiones de red

Middleware

Protocolos de comunicación y servicios

Aplicaciones

Ambientes de programación paralela

4.5 casos de estudio

La programación paralela involucra muchos aspectos que no se presenta en

la programación convencional (secuencial). El diseño de un programa

paralelo tiene que considerar entre otras cosas, el tipo de arquitectura sobre

la cual se va a ejecutar el programa, las necesidades de tiempo y espacio que

requiere la aplicación, el modelo de programación paralelo adecuado para

implantar la aplicación y la forma de coordinar y comunicar a diferentes

procesadores para que resuelvan un problema común. Existen varias

herramientas disponibles para programación paralela. En el curso

utilizaremos PVM y MPI, dado su alta disponibilidad para computadoras

diferentes y su aceptación en la comunidad académica.

Page 36: computación paralela

36

1. NVIDIA

PYSICS LAYER:

GPU PhysX

CPU PhysX

Graphics Layer:

GPU –Direct X

Windows

2. INTEL

PYSICS LAYER:

No GPU PhysX

CPU Havok

Graphics Layer:

GPU –Direct X

Windows

3. AMD

PYSICS LAYER:

No GPU PhysX

CPU Havok

Graphics Layer:

GPU –Direct X

Windows

Page 37: computación paralela

37

BIBLIOGRAFÍA

https://conceptosarquitecturadecomputadoras.wordpress.com/computacion

-paralela/

http://procesamientoparalelo.blogspot.mx/2013/11/41-aspectos-basicos-de-

la-computacion.html?m=1

https://conceptosarquitecturadecomputadoras.wordpress.com/computacion

-paralela/

http://www.mundodescargas.com/apuntes-

trabajos/informatica/decargar_arquitecturas-avanzadas.pdf

http://arquicomberna.blogspot.mx/2008/12/sistema-secuencial.html

José Ma. Angulo Usategui; Pedro de Miguel Anasagasti. Arquitectura de

Computadoras Fundamentos e Introducción al Paralelismo. 4ª ed. España:

Paraninfo sa, 1995.

Andrew S. Tanenbaum. Organización de Computadoras Un Enfoque

Estructurado. 4ª ed. México: PRENTICE HALL, 2000.

http://es.wikipedia.org/