Вы находитесь на странице: 1из 10

UNIDAD 1.

ASPECTOS BASICOS DE LA COMPUTACION


PARALELA Y DISTRIBUIDA

1.1 INTRODUCCION Y DESARROLLO HISTORICO DE LA


COMPUTACION DISTRIBUIDA YPARALELA.

 Computador paralelo: Capaz de ejecutar varias instrucciones simultáneamente.

 Computación Paralela: Uso de varios procesadores trabajando juntos para resolver una
tarea común:

 Cada procesador trabaja en una porción del problema


 Los procesos pueden intercambiar datos, a través de las direcciones de memorias
compartidas o mediante una red de interconexión

 Programación Paralela: Considera aspectos conceptuales y las particularidades físicas


de la computación paralela.

o Objetivo: Mejorar las prestaciones mediante un buen aprovechamiento de la


ejecución simultánea.

Limitaciones físicas de la computación secuencial


 Límite de la velocidad de la luz: Estancamiento en los incrementos de la frecuencia de
reloj.
 Límite de Integración: Cerca del límite máximo.
o Más frecuencia → Más consumo + Temperaturas muy elevadas

Problemas con complejidad elevada


Dentro de los problemas tratables (tiempo polinomial) existen:
 Problemas de gran dimensión: coste polinomial de grado alto o aplicabilidad a grandes
pruebas.
 Problemas de tiempo real
 Problemas de gran desafío: gran importancia social. Estudio del genoma humano,
predicción meteorológica mundial, modelado fenómenos sísmicos, ...
Computador paralelo.
 Multiprocesadores, procesadores multicore, GPUs, etc.
 Varios ordenadores (paralelos o no) interconectados
o clústers de ordenadores
1.2 CLASICACION LOGICA DEL PARALELISMO

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 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.
Históricamente, los microprocesadores de 4 bits fueron sustituidos por unos de 8 bits, luego
de 16 bits y 32 bits, esta tendencia general llegó a su fin con la introducción de procesadores
de 64 bits, lo que ha sido un estándar en la computación de propósito general durante la
última década.
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 4 tenía un
pipeline de 35 etapas.
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.
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.

1.3 CLASIFICACION FISICA DE LOS ORDENADORES PARALELOS


Las computadoras paralelas se pueden clasificar de acuerdo con el nivel en el que el
hardware soporta paralelismo. Esta clasificación es análoga a la distancia entre los nodos
básicos de cómputo. Estos no son excluyentes entre sí, por ejemplo, los grupos de
multiprocesadores simétricos son relativamente comunes.
Computación multinúcleo
Un procesador multinúcleo es un procesador que incluye múltiples unidades de ejecución
(núcleos) en el mismo chip. Los procesadores superescalares pueden ejecutar múltiples
instrucciones por ciclo de un flujo de instrucciones (hilo), a diferencia de este, un
procesador multinúcleo puede ejecutar múltiples instrucciones por ciclo de secuencias de
instrucciones múltiples. Cada núcleo en un procesador multinúcleo potencialmente puede
ser superescalar, es decir, en cada ciclo, cada núcleo puede ejecutar múltiples instrucciones
de un flujo de instrucciones.
Multiprocesamiento simétrico
Un multiprocesador simétrico (SMP) es un sistema computacional con múltiples
procesadores idénticos que comparten memoria y se conectan a través de un bus. La
contención del bus previene el escalado de esta arquitectura. Como resultado, los SMPs
generalmente no comprenden más de 32 procesadores. Debido al pequeño tamaño de los
procesadores y de la significativa reducción en los requisitos de ancho de banda de bus,
tales multiprocesadores simétricos son extremadamente rentables, siempre que exista una
cantidad suficiente de ancho de banda.
Computación en 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 tienen que ser simétricas, de no serlo,
el balance de carga es más difícil de lograr. 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/IP Ethernet. La tecnología Beowulf fue desarrollada originalmente por
Thomas Sterling y Donald Becker.
Procesamiento paralelo masivo
Un procesador paralelo masivo (MPP) es un solo equipo con varios procesadores
conectados en red. Tienen muchas de las características de los clústers, pero cuentan con
redes especializadas de interconexión en tanto que los clústeres utilizan hardware estándar
para la creación de redes. Los MPPs también tienden a ser más grandes que los clústeres,
con mucho más de 100 procesadores. En un MPP, cada CPU tiene su propia memoria y
una copia del sistema operativo y la aplicación. Cada subsistema se comunica con los
demás a través de una interconexión de alta velocidad
Computación distribuida
La computación distribuida es la forma más distribuida de la computación paralela. Se hace
uso de ordenadores que se comunican a través de la Internet para trabajar en un problema
dado. Debido al bajo ancho de banda y la latencia extremadamente alta de Internet, la
computación distribuida normalmente sólo se refiere a problemas vergonzosamente
paralelos. Se han creado muchas aplicaciones de computación distribuida, SETI@home y
Folding@home son los ejemplos más conocidos.
La mayoría de las aplicaciones de computación distribuida utilizan middleware, software
que se encuentra entre el sistema operativo y la aplicación para administrar los recursos de
red y estandarizar la interfaz de software.
Computadoras paralelas especializadas
Dentro de la computación paralela, existen dispositivos paralelos especializados que
generan interés. Aunque no son específicos para un dominio, tienden a ser aplicables sólo
a unas pocas clases de problemas paralelos.
Cómputo reconfigurable con arreglos de compuertas programables
El cómputo reconfigurable es el uso de un arreglo de compuertas programables (FPGA)
como coprocesador de un ordenador de propósito general. Un FPGA es, en esencia, un chip
de computadora que puede reconfigurarse para una tarea determinada.
Los FPGAs se pueden programar con lenguajes de descripción de hardware como VHDL
o Verilog. Sin embargo, los lenguajes de programación pueden ser tediosos. Varios
vendedores han creado lenguajes “C a HDL” que tratan de emular la sintaxis y/o semántica
del lenguaje de programación C, con el que la mayoría de los programadores están
familiarizados. Los lenguajes “C a HDL” más conocidos son Mitrion-C, C Impulse, DIME
C y C-Handel. También se pueden utilizar para este propósito subconjuntos específicos de
SystemC basados en C++.
Cómputo de propósito general en unidades de procesamiento gráfico (GPGPU)
El cómputo de propósito general en las unidades de procesamiento de gráficos (GPGPU)
es una tendencia relativamente reciente en la investigación de ingeniería informática. Los
GPUs son co-procesadores que han sido fuertemente optimizados para procesamiento de
gráficos por computadora. El procesamiento de gráficos por computadora es un campo
dominado por operaciones sobre datos en paralelo, en particular de álgebra lineal y
operaciones con matrices.
Circuitos integrados de aplicación específica
Se han diseñado varios circuitos integrados de aplicación específica (ASIC) para hacer
frente a las aplicaciones paralelas.
Debido a que un ASIC (por definición) es específico para una aplicación dada, puede ser
completamente optimizado para esa aplicación. Como resultado, para una aplicación dada,
un ASIC tiende a superar a un ordenador de propósito general. Sin embargo, los ASICs son
creados con litografía de rayos X. Este proceso requiere una máscara, que puede ser
extremadamente cara. Una máscara puede costar más de un millón de dólares. Mientras
más pequeño sean los transistores necesarios para el chip, más cara será la máscara.
Mientras tanto, el incremento del rendimiento en computadoras de propósito general como
se describe en la Ley de Moore tiende a eliminar esta diferencia en sólo una o dos
generaciones de chips. El alto costo inicial, y la tendencia a ser superados por la ley de
Moore, ha hecho inviable el uso de ASICs para la mayoría de las aplicaciones paralelas.
Procesadores vectoriales
Un procesador vectorial es un CPU o un sistema computacional que puede ejecutar la
misma instrucción en grandes conjuntos de datos. Los procesadores vectoriales tienen
operaciones de alto nivel que trabajan sobre arreglos lineales de números o vectores. Un
ejemplo de operación con vectores es: A = B × C, donde A, B, y C son vectores de 64
elementos, donde cada uno es un número de punto flotante de 64 bits. Están estrechamente
relacionadas con la clasificación SIMD de Flynn.
1.4 SISTEMAS A MEMORIAS COMPARTIDA
En este apartado vamos a tratar las arquitecturas con memoria compartida, en las que todos
los procesadores comparten el mismo espacio de direcciones. Es decir, todo el
direccionamiento de la memoria principal es único, y los procesadores pueden acceder a
todas las posiciones de memoria.
Por su parte, la comunicación entre procesadores normalmente se hace a través de la
memoria mediante el uso de variables compartidas. Si el número de componentes de la
arquitectura es reducido, puede ser suficiente un bus de datos digital lo bastante ancho
(suficientes hilos) para comunicar los componentes. Arquitecturas grandes utilizan como
modelo de interconexión una red crossbar o una red multietapa.
Este tipo de multiprocesadores debe utilizar memorias cachés suficientemente grandes.
Cada procesador tendrá su memoria caché independiente y privada para evitar, más de lo
necesario, la búsqueda de datos en la memoria principal, y, por tanto, impedir un cuello de
botella cuando varios procesadores requieran acceder a datos de memoria al mismo tiempo.
Estas arquitecturas son las más utilizadas en la actualidad, puesto que ofrecen buenas
prestaciones por tener varios procesadores trabajando en paralelo. Además, la gestión de
varios procesadores se hace muy sencilla por estar muy compactos y apenas se consumen
recursos para este fin.
Desde el punto de vista de consumo, las nuevas arquitecturas multinúcleo, al compartir un
mismo chip, hacen que el consumo de potencia disminuya respecto a arquitecturas
multiprocesadores más antiguas y con menor grado de acoplamiento.

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.
Este tipo de arquitecturas suele tener un número de procesadores relativamente pequeño,
entre 2 y 32 procesadores.
Dentro de las arquitecturas multiprocesador de memoria compartida, hay que distinguir
tres modelos.
Tipo Descripción
Modelo UMA Uniform Memory Architecture. Memoria compartida uniformemente por todos los
procesadores. Todos tardan el mismo tiempo en acceder a cualquier posición de
memoria.
Modelo NUMA Non Uniform Memory Architecture. Aunque el espacio de direcciones es único, cada
procesador tiene su propio módulo de memoria principal. Cada procesador tiene
prioridad de acceso a su módulo privado respecto al resto de procesadores.
Modelo COMA Cache Only Memory Architecture. En este tipo de arquitecturas existen módulos de
memoria privados y módulos de memoria compartida. Algunos módulos de memoria
principal se utilizan como memoria caché privada.
Modelo UMA
El modelo UMA es un tipo de arquitectura multiprocesador de memoria compartida. En
esta arquitectura, todos los procesadores comparten el mismo espacio de memoria y tardan
el mismo tiempo en acceder a cualquier posición de memoria, de ahí su nombre, UMA:
arquitectura de acceso a memoria uniforme.
En la figura de pantalla, podemos observar un ejemplo gráfico de una arquitectura UMA.

Normalmente, cada procesador emplea una caché privada (o jerarquía de cachés privadas).
Además, todos los procesadores comparten un único controlador de entrada/salida, y por
tanto, todos los periféricos, como el disco duro, los periféricos de entrada y los de salida,
son comunes a todos los procesadores.
Normalmente, los procesadores se agrupan en clústeres, y dentro de cada clúster puede
haber una nueva arquitectura organizada como UMA o NUMA. Actualmente, las
arquitecturas multiprocesador han llegado a los PC de los hogares, y se habla de
arquitecturas multinúcleo.

Modelo NUMA
El modelo NUMA es un tipo de arquitectura multiprocesador de memoria compartida. En
esta arquitectura, todos los procesadores comparten el mismo espacio de direcciones de
memoria, pero cada procesador tiene su propia memoria local.
Los procesadores pueden acceder a las memorias locales de otros procesadores, pero el
procesador dueño de la memoria local, tendrá prioridad de acceso sobre todos los demás.
Cada procesador, por tanto, puede acceder a cualquier posición de memoria de todo el
espacio, pero tardará menos tiempo en acceder a su memoria local que en acceder al resto
de memorias. Por esta razón, se dice que en este modelo el tiempo de acceso no es
uniforme, de ahí su nombre, NUMA: arquitectura de acceso a memoria no uniforme.
En la figura que aparece en pantalla, podemos ver un ejemplo gráfico de una arquitectura
NUMA. Normalmente, cada procesador emplea una caché privada (o jerarquía de cachés
privadas).

Modelo COMA
El modelo COMA (arquitectura de acceso solo a memoria caché) es un caso particular
dentro delos NUMA. El acceso a todas las posiciones de memoria no es uniforme, y se
tarda menos tiempo en acceder a las memorias locales que a las otras memorias.
El modelo COMA tiene la particularidad de que cada módulo de memoria local se utiliza
como memoria caché, y todas las cachés forman un espacio único de direccionamiento
global.
En la imagen de pantalla, podemos ver un esquema de arquitectura COMA, donde los
módulos de memoria caché son en realidad módulos de memoria principal utilizados como
memoria caché (almacenan los datos a los que se accede con mayor frecuencia).
1.5 SISTEMAS A MEMORIAS DISTRIBUIDA
En el caso de arquitecturas con memoria distribuida, todos los procesadores poseen una
memoria privada. Es decir, que no todos pueden acceder a todas las posiciones de memoria,
y hay varios módulos de memoria independientes que no comparten el mismo
direccionamiento.
Pueden trabajar con datos de memoria compartidos, pero la gestión de la memoria
compartida es mucho más costosa que en el otro tipo de multiprocesadores, puesto que no
comparten ningún módulo de memoria principal.
En este tipo de arquitecturas, la comunicación entre procesadores se hace a través de paso
de mensajes. Como modelo de interconexión, normalmente se utiliza una red crossbar o
una red multietapa.
Como ventaja principal de este tipo de arquitecturas encontramos, por un lado, la
escalabilidad, ya que permite ampliar el número de procesadores sin grandes cambios en
la arquitectura. Por otro lado, ofrecen una solución al problema del ancho de banda, ya que
los procesadores no comparten la misma memoria principal y hay menos comunicaciones.
Normalmente, el número de procesadores de este tipo de arquitecturas es alto (entre 512 y
1024 procesadores), por eso se necesita una red de interconexión que permita conectar
muchos componentes.
Como principal desventaja, debemos mencionar el coste en la gestión de tantos
procesadores, especialmente cuando trabajan en problemas comunes, y el envío de datos a
través de la red es más lento debido a los protocolos de comunicación. La gestión de
muchos procesos y tareas hace que la arquitectura pierda eficiencia.
Desde el punto de vista de consumo, el consumo de potencia es mayor que en arquitecturas
de memoria centralizada.
Conexión de ordenadores mediante red de interconexión. Multicomputadores
 Cada ordenador con su memoria local y su propio espacio de direcciones
 Red de interconexión:
o envío/recepción de mensajes.
Punto de vista del programador:
 Difícil programar con paso de mensajes.
 No se necesitan mecanismos de Exclusión mutua
 Aplicable a redes de ordenadores
o Mayor flexibilidad y adaptación a los avances tecnológicos
Punto de vista del ingeniero de hardware:
 Mejor escalabilidad que multiprocesos de memoria compartid
1.6 SISTEMAS MULTINUCLEO

Un procesador multinúcleo es aquel que combina dos o más microprocesadores


independientes en un solo paquete, a menudo un solo circuito integrado. En general, los
microprocesadores multinúcleo permiten que un dispositivo computacional exhiba una
cierta forma del paralelismo a nivel de thread sin incluir múltiples microprocesadores en
paquetes físicos separado

Multiprocesamiento es un Procesamiento simultáneo con dos o más procesadores en un


computador. Estos procesadores se unen con un canal de alta velocidad y comparten la
carga de trabajo general entre ellos. En caso de que uno falle el otro se hace cargo. El
multiprocesamiento también se efectúa en computadores de propósitos especiales, como
procesadores vectoriales, los cuales proveen procesamiento simultáneo de conjunto de
datos. Aunque los computadores se construyen con diversas características que se
superponen, como ejecutar instrucciones mientras se ingresan y se sacan datos, el
multiprocesamiento se refiere específicamente a la ejecución de instrucciones simultáneas.

 Arquitectura multicore: cada procesador contiene dos o más núcleos que pueden
ejecutar instrucciones de forma simultánea.

 Multiprocesador en un solo chip: el sistema operativo percibe cada núcleo como


procesador independiente.
o Teóricamente, paralelismo perfecto.

 Ventajas:
o Menor consumo y mejor disipación calor.
o Mejor aprovechamiento multitarea.

 Ejemplos: Core i5 /i7 (4/6), IBM Cell (8+1), ...

 Futuro inmediato: Ordenadores basados en esta tecnología y adaptación software al


nuevo hardware.