SERVICIOS DE INTERNET



UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO

FACULTAD DE INGENIERÍA
Ingeniería en Computación

ALUMNO: MARTÍNEZ REYES ALEJANDRO



jueves, 25 de febrero de 2016

Tarea 3

Ley de Gustafson


La ley de Gustafson (1988) viene a compensar el pesimismo dejado por la ley de Amdahl. Ésta se refería a problemas con volumen de cálculo fijo en que se aumenta el número de procesadores. 

Sin embargo, en la práctica, el volumen del problema no es independiente del número de procesadores, ya que con mayor número de procesadores se pueden abordar problemas de mayores dimensiones. Por ello, la ley de Gustafson se refiere al crecimiento del volumen de cálculo necesario para resolver un problema. Como veremos a continuación, en la mayoría de los casos, cuando el volumen del problema crece, lo hace sólo en su parte paralela, no en su parte secuencial. Ello hace que el cuello de botella secuencial tienda a cero cuando el volumen del problema aumenta.

La razón de que cierto tipo de problemas adquieran gran volumen de cálculo es la disminución del tamaño de la malla de cálculo o también el aumento la extensión espacio-temporal del problema. Esto hace que el número de puntos aumente de forma cúbica respecto al grado de disminución en la malla, si el problema es tridimensional. Hay muchos problemas en que, además de las tres dimensiones del espacio, también interviene el tiempo, por lo que el aumento del volumen de cálculo es todavía mayor. 


Evidentemente, esto afecta, en general, a la parte paralelizable del problema y no a su parte secuencial, o al menos no en la misma medida. Si suponemos que el número de procesadores crece indefinidamente de la misma forma que las dimensiones del problema tendremos que

1.2


Siendo s y p, respectivamente, las partes secuencial y paralela del problema antes de ser aumentado en relación al número de  procesadores (por ejemplo, incrementando el número de puntos de la malla). Con estas premisas, podremos calcular ahora la ganancia de velocidad para esta nueva situación (la parte paralela del problema ha crecido en la misma proporción que el número de procesadores). Para calcular la ganancia de velocidad supondremos que el tiempo que se tardaría en ejecutar el programa (ya incrementado) en un monoprocesador es:

y en un sistema paralelo sería:

Por tanto, la ganancia en velocidad vendrá dada por:

 1.13

que, teniendo en cuenta la definición de la fracción no paralelizable dada por 1.8, se podrá escribir como

 1.14

En la figura 1.3 puede verse la representación de la ecuación 1.14 para sistemas con diferente número de procesadores. Podría pensarse que hay una aparente contradicción entre las leyes de Amdahl y Gustafson. Esto no es así debido a que las premisas de ambas leyes son distintas: la ley de Amdahl se refiere a procesos con un volumen de cálculo fijo mientras que la ley de Gustafson se refiere a problemas cuyo volumen de cálculo puede aumentar según el número de procesadores (esto se suele denominar escalado del problema). Afortunadamente, esta última situación es más cercana a la realidad.


Fuente:  http://www.infor.uva.es/~bastida/Arquitecturas%20Avanzadas/General.pdf


viernes, 12 de febrero de 2016

Tarea 2

MEJORANDO LOS LENGUAJES

Para poder programar adecuadamente un algoritmo para una máquina paralela, es necesario disponer de un lenguaje de programación que permita explotar al máximo todas las posibilidades de la nueva arquitectura paralela. Esta es la razón de que en los últimos años está habiendo una autentica proliferación de nuevos lenguajes.
En 1998 McGraw y Axelrod identificaron 4 formas distintas para la creación de estos nuevos lenguajes, se puede seguir una de las cuatro vías siguientes:

  1.    Extender o Enriquecer un compilador existente para que traduzca programas secuenciales en programas paralelos.
  2.     Extender o enriquecer un lenguaje existente con nuevas operaciones que permitan a los programadores expresar el paralelismo.
  3.      Agregar una capa de lenguaje paralelo encima de un lenguaje secuencial existente.
  4.      Definir totalmente un nuevo lenguaje paralelo así como su compilador.


En este apartado solo mencionares el punto 3 y 4.

 Agregar una capa de lenguaje paralelo encima de un  lenguaje secuencial existente.

Crear un nuevo lenguaje que solo se utilizara para expresar la concurrencia y la necesaria sincronización, mientras el resto de aplicaciones  básicas  de programación  permanecerían iguales.    Es decir,  sería algo así como un pre-procesador para el manejo de la concurrencia.

La idea es la siguiente: la mayoría del código que existe en la actualidad es correcto y sirve para resolver unos problemas dados. Este código para ser ejecutado en varios multiprocesadores no necesita cambiar en su gran mayoría, tan solo añadirle algunas características de sincronización. De hecho, la mayoría de los errores en programación concurrente aparecen en la sincronización o partición de los datos. Por lo tanto, una posible solución es usar un pequeño lenguaje-compilador para expresarla estructura paralela del programa, dejando que el resto del código se exprese en un lenguaje convencional (Fortran o C, por ejemplo).

Situación actual: Algunos trabajos iniciales se han hecho ya en esta área. Pero esta solución también tiene sus inconvenientes. Uno de los más importantes se refiere a la depuración de programas, ya que debido a la existencia de un pre-procesador es difícil detectar dónde está el fallo cometido.

 Definir totalmente un nuevo lenguaje paralelo así como su  compilador.

Integrar el concepto de concurrencia y sincronización junto con las estructuras de programación tradicionales.

Se trata sin duda de la más radical de las cuatro vías que se han comentado. Evidentemente, es la más cara y la que exige más labor de desarrollo. Como contrapartida la mayoría de los problemas se pueden solucionar mediante un diseño adecuado del sistema lenguaje/compilador.
Los avances realizados hasta la fecha se han orientado en el área de los lenguajes funcionales, como FP o  SISAL. Las principales características de diseño de estos lenguajes son mejorar la claridad de la concurrencia, sin requerir que el programador maneje la sincronización, así como permitir que no dependan de la arquitectura objeto sobre la que se van a implementar.


Otra de las grandes ventajas aparece desde el punto de vista de la depuración de programas. Por el contrario los mayores inconvenientes descansan en la construcción del compilador. Este requiere técnicas muy sofisticadas para realizar con eficacia las funciones que tiene encomendadas, como particionar, mapear y sincronizar el programa. En la actualidad se está teniendo problemas en el manejo dinámico de memoria, ya que las más simples implementaciones requieren grandes cantidades de memoria.



REFERENCIAS: 
  • GarcÍa Carrasco, J. M.(1989): Modelos de arquitecturas, lenguajes y compiladores para procesamiento en paralelo.
  • McGraw, J. R. and Axelrod, T.S. (1988): Exploiting multiprocessors: issues and options. IEEE Software, Vol. 5, (5).




lunes, 8 de febrero de 2016

Tarea 1

ARQUITECTURAS PARALELAS

ARQUITECTURA SISD
• Máquina de Von Neumann
• Un procesador capaz de realizar acciones secuencialmente, controladas por un programa el cual se encuentra almacenado en una memoria conectada al procesador.
• Este hardware está diseñado para dar soporte al procesamiento secuencial clásico, basado en el intercambio de datos entre memoria y registros del procesador, y la realización de operaciones            aritméticas en ellos.
• Algunas máquinas secuenciales “modernas” no corresponden estrictamente al modelo SISD.
• A partir de la introducción de los procesadores RISC se comenzó a utilizar varios conceptos de las arquitecturas paralelas, como pipelining, ejecución paralela de instrucciones no dependientes,              prefetching de los datos, etc., para lograr un incremento en la cantidad de operaciones por ciclo de      instrucción.

ARQUITECTURA SIMD

• Un único programa controla los procesadores.
• Útil en aplicaciones uniformes
• Procesamiento de imágenes.
• Multimedia.
• Aplicaciones numéricas sobre grillas.
• Su aplicabilidad está limitada por las comunicaciones entre procesadores.
• La topología de interconexión es fija.
• Los elementos de procesamiento tienen capacidad de cómputo limitada (1 bit a 8 bits), por lo que se  pueden colocar una gran cantidad por chip (e.g. CM-2 con 64k PEs).
• Fueron los primeros multiprocesadores difundidos comercialmente (en la década de 1980)
• Ejemplos comerciales
• Cray X-MP (computador más potente entre 1983–1985)
• Connection Machine (CM-2, CM-200, década de 1980).
• MasPar MP2 (inicios de la década de 1990).

ARQUITECTURA MISD

• Varias unidades funcionales ejecutan diferentes operaciones sobre el mismo conjunto de datos.
• Las arquitecturas de tipo pipeline pertenecen a esta clasificación
• Aunque no puramente, ya que pueden modificar los datos sobre los que operan.
• Systolic arrays, FPGA celulares.
• También pertenecen los computadores tolerantes a fallos que utilizan ejecución redundante para detectar y enmascarar errores.
• No existen otras implementaciones específicas.

• Los modelos MIMD y SIMD son más apropiados para la aplicación del paralelismo tanto a nivel de   datos como de control.

ARQUITECTURA MIMD

• Consistieron en el “siguiente paso” en la evolución de las arquitecturas paralelas. 
     – Fueron lentamente desplazando al modelo SIMD. 
• A diferencia de los modelos SISD y MISD, las computadoras MIMD pueden trabajar asincrónicamente (los procesadores tienen la capacidad de funcionamiento semi-autónomo). 
• Existen dos tipos de computadores SIMD, de acuerdo al mecanismo utilizado para comunicación y sincronización: 
      – MIMD de memoria compartida (fuertemente acopladas). 
      – MIMD de memoria distribuida (poco acopladas).

MIMD CON MEMORIA COMPARTIDA

• Procesadores autónomos, trabajan asincrónicamente.
• Comunicación entre procesadores a través del recurso compartido.
– Comunicación y sincronización se realiza en forma explícita.
– Emisor escribe y receptor lee de la memoria global.
• Fáciles de construir.
– SO convencionales de los SISD son portables.
• Buena solución para procesamiento transaccional (sistemas multiusuario, etc.)
• Limitación: confiabilidad y escalabilidad.
– Un fallo de memoria de algún componente puede causar un fallo total del sistema.
• Incrementar el número de procesadores puede llevar a problemas en el acceso a memoria.
– Caso de supercomputadores Silicon Graphics).
• El bus (cuello de botella) limita la escalabilidad a un máximo de pocas decenas de procesadores.
– Caches locales introducen problema de “cache coherence”.
• Ejemplos:
– Encore MULTIMAX
– Inicios de la década de 1990, hasta 20 procesadores.
– Sequent Symmetry.
– Década de 1990, de 10 a 30 procesadores.
– Sun SPARCcenter 2000.
– Década de 1990, escalable hasta 20 procesadores.
– Sun-4d (d por dragon, nombre código del SPARCcenter 2000).
• Mecanismos para compartir los datos.
• UMA = Uniform Memory Access
– Acceso uniforme (todos los procesadores acceden a la memoria en el mismo tiempo).
– Multiprocesadores simétricos (SMP).
– Pocos procesadores (32, 64, 128, por problemas de ancho de banda del canal de acceso).
• NUMA = Non-Uniform Memory Access.
– Colección de memorias separadas que forman un espacio de memoria direccionable.
– Algunos accesos a memoria son más rápidos que otros, como consecuencia de la disposición               física de las memorias (distribuidas físicamente).
– Multiprocesadores masivamente paralelos (MPP).


MIMD CON MEMORIA DISTRIBUIDA

• No existe el concepto de memoria global.
• Comunicación y sincronización:
– Mecanismos explícitos de IPC (mensajes) sobre la red (en escenario óptimo, red de alta                        velocidad).
– Tiene mayor costo que en MIMD de memoria compartida.
• Las comunicaciones pueden ser cuellos de botella.
– Influye la topología de conexión.
• Arquitectura escalable para aplicaciones apropiadas para esta topología.
– Decenas de miles de procesadores.
• Ventajas respecto a MIMD de memoria compartida
– Fácilmente escalable.
– Alta disponibilidad (el fallo de una CPU individual no afecta a todo el sistema).
• Ejemplos comerciales
– Connection Machine CM-5 (1991, 16k procesadores).
– IBM SP (IBM Scalable POWER parallel)
– Incluye tecnología High Performance Switch (HPS) para comunicación entre nodos.
– 1991: SP1; 1993: SP2, 1996: POWER2 Super Chip.
– En 1999 incorporan procesadores POWER3, en 2001 POWER4 y en 2004 POWER5.
– Intel Paragon (1992: 2048 procesadores, luego 4000).
– Cray. – Luego de fusión con SGI: Scalable Node SN1, SN2.
– T3E, 1997, hasta 2048 procesadores.

ARQUITECTURA DE UN PROCESADOR VECTORIAL

Un procesador vectorial es un conjunto de recursos para efectuar operaciones sobre vectores. Estas operaciones consistirán en funciones aritméticas y lógicas aplicadas sobre las componentes de los vectores. La diferencia entre un procesador vectorial y un escalar estriba en que el procesador vectorial puede decodificar instrucciones cuyos operandos son vectores completos. La conversión de un programa correspondiente a un procesador escala a otro vectorial se llama vectorización.

Una primera versión muy simplificada, de procesador vectorial es el mostrado en la figura 3.1. Este tipo de máquina sería un procesador vectorial memoria-memoria que es capaz de extraer dos vectores de memoria y operar sobre ellos. El inconveniente de este tipo de máquina sería el cuello de botella que supondrían los accesos a memoria. Por ello, sobre esta primera arquitectura pueden hacerse algunas mejoras:


1. Aumentar el ancho de banda de la memoria: esto se consigue entrelazando la memoria, de forma que esta tenga varios módulos y se pueda acceder simultáneamente varias posiciones consecutivas que se hallen en módulos diferentes.

 2. Añadir una memoria intermedia de mayor velocidad entre la memoria y el procesador. Una forma de hacer esto, además de incorporar una memoria caché, es añadir un banco de registros vectoriales.

Por todo esto, es habitual que los procesadores vectoriales dispongan de un banco (o varios) de registros vectoriales que hagan de memoria intermedia; se habla entonces de procesadores vectoriales registro-registro. Por otra parte, la mayoría de los procesadores vectoriales actúan como procesadores de un procesador escalar convencional que trata las instrucciones no vectoriales. Ello hace que la arquitectura de un computador vectorial actual sea la que se muestra en la figura 3.2. Como puede verse, los computadores vectoriales pueden considerarse como computadores del tipo SIMD de Flynn, sin embargo, hay que tener en cuenta que, si bien los computadores vectoriales ejecutan la misma instrucción sobre datos diferentes, estos datos forman parte del mismo flujo. Por ello, en algunos casos, a estas máquinas se les llama SIMD-Vectoriales (Germain-Renaud and Sansonnet, 1991).

ARQUITECTURA DE UN PROCESADOR SISTOLICO

El concepto de arquitectura sistólica fue desarrollado por Kung y utilizado en la Universidad de Carnegie-Mellon. Los arrays sistólicos evolucionaron de intentos de obtener un ancho de banda de cálculo más eficiente del silicio. Los arrays sistólicos se pueden considerar como un método para diseñar computadores de propósito especial para equilibrar recursos, ancho de banda de E/S y cálculo. Basándose en la segmentación, los datos fluyen en etapas desde memoria a un array de unidades de cálculo y vuelta a memoria, como sugiere la figura. Un sistema sistólico consiste en un conjunto de celdas interconectadas, cada una de las cuales es capaz de ejecutar alguna instrucción simple. Las celdas se interconectan en forma de matriz o de árbol. La información en un sistema sistólico fluye entre celdas en una estructura segmentada y la comunicación con el exterior sólo es posible en las celdas fronterizas.

La memoria impulsa los datos al elemento de proceso (PE), de forma semejante al "corazón". En la figura (a) se aprecia cómo un procesador convencional procesa una instrucción mientras que el procesador sistólico de la figura (b) ejecuta 6 veces más instrucciones a la vez. Los datos se introducen por un lado de la red a manera de oleadas. El procesamiento sistólico opera de forma similar a las contracciones del corazón. Los datos se procesan rítmicamente. El problema de este sistema radica en asegurarse, que, una vez tomado el dato de la memoria, se use efectivamente en cada celda por la que pasa.

ARQUITECTURA DE UN MULTIPROCESADOR

Este sistema consiste de varios procesos que pueden ejecutarse sobre procesadores diferentes (aunque no es necesario), es muy común en sistemas grandes de tiempo real, recolectan información, toman decisiones, con la afirmación, y envían señales a los actuadores que modifican el entorno del sistema.


El uso de múltiples procesadores mejora el rendimiento y adaptabilidad del sistema. La distribución de los procesos de los procesadores se puede predeterminar o puede estar bajo el control de un despachador que decide cuales procesos ubicar en cada procesador. Los sistemas de múltiples procesos no son necesariamente sistemas distribuidos. Si se dispone de más de un procesador, entonces se puede implementar la distribución, pero los diseñadores del sistema no siempre consideran forzosamente cuestiones de distribución mediante el proceso de diseño.

Un ejemplo para este tipo de sistemas es un modelo simplificado de un sistema de control de tráfico. Un conjunto de sensores distribuidos recogen información sobre le flujo de tráfico y la procesan localmente antes de enviarla a una sala de control. Los operadores toman decisiones usando esta información y dan instrucciones a un proceso de control de diversas luces de tráfico.


Los sistemas de software compuestos de procesos múltiples no necesariamente son sistemas distribuidos. Si más de un procesador está disponible, entonces se puede implementar la distribución, pero los diseñadores del sistema no siempre consideran los puntos de distribución durante el proceso de diseño. El enfoque de diseño para este tipo de sistema es el mismo para los de Tiempo Real.
Para el desarrollo de estos procesos se ocupan modelos de programación concurrente y paralela:
Los objetivos de la programación paralela, son:
    ·         Reducir el tiempo de cómputo.
    ·         Reducir la complejidad del algoritmo,
    ·         Aprovechar al máximo la capacidad de las computadoras multiproceso.
Existen diferentes tipos de programación:
  ·  Multihilo: El cual permite a una aplicación realizar varias tareas concurrentemente.
Los distintos hilos que se ejecutan comparten una serie se recursos.

Pase de mensaje: MPI ("Message Passing Interface") es un estándar que define la sintaxis y la semántica de las funciones usada en programas que exploten la existencia de múltiples procesadores.

ARQUITECTURA DE UN MULTICOMPUTADOR

La característica más importante de estos sistemas es que tienen la memoria distribuida. Esta arquitectura también es conocida como arquitectura basada en el paso de mensajes, ya que los procesos deben realizar comunicaciones (mensajes) a través de la red de interconexión para poder compartir datos. Estas máquinas, por consiguiente, no están limitadas por el ancho de banda de memoria, sino más bien por el de la red de interconexión. La figura 7 muestra el esquema básico de un multicomputador donde cada nodo tiene parte de la memoria distribuida. Los nodos pueden contener desde un simple uniprocesador como un sistema multiprocesador.


Los sistemas MPP (massively parallel processors) son multicomputadores que tienen sus CPU conectadas con una red de interconexión estática de altas prestaciones (baja latencia y elevado ancho de banda) especialmente diseñada para el sistema. Son sistemas grandes, en comparación con un sistema CMP, pero que no suelen tener un número muy elevado de CPU debido al coste económico que supondría mantener una red de interconexión de altas prestaciones. En general, son sistemas difícilmente escalables. 


Las características principales de los sistemas MPP son:

• Utilizan microprocesadores estandard, pero también pueden incorporar hardware específico o aceleradores (por ejemplo, ASIC*, FPGA**, GPU).
• La red de interconexión que incorporan es propietaria, especialmente diseñada, con muy baja latencia y un ancho de banda elevado. 
• Suelen venir con software propietario y librerías para gestionar la comunicación.
• Tienen una capacidad de almacenamiento de entrada/salida elevada, ya que se suelen utilizar para trabajar con grandes volúmenes de datos que se han de procesar y almacenar.
• Tienen mecanismos de tolerancia de fallos del hardware.
Estos sistemas MPP normalmente se han utilizado en cálculos científicos, pero también se han usado de forma comercial. La serie de connection machines es el ejemplo típico de máquinas masivamente paralelas.




REFERENCIAS:  
     - http://www.fing.edu.uy/inco/cursos/hpc/material/clases/Clase2-2009.pdf
     - http://www.infor.uva.es/~bastida/Arquitecturas%20Avanzadas/Vectoriales.pdf
     - http://www.dte.eis.uva.es/Docencia/ETSII/SMP/BAK/tema5/Tema5.pdf
     - LIBRO: IAN SOMMERVILLE  INGENIERIA DE SOFTWARE 6° EDICIÓN ADDISON WESLEY

https://www.exabyteinformatica.com/uoc/Informatica/Arquitecturas_de_computadores_avanzadas/Arquitecturas_de_computadores_avanzadas_(Modulo_2).pdf