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

DEDICATORIA

El presente trabajo va dedicado a las personas que nos acompaan da a da,


a nuestras familias, a nuestros amigos, a las personas que con sus consejos,
con su orientacin y con su cario nos motivan a ser mejores y no rendirnos
ante las adversidades.
Para aquellos quienes sus deseos de aprender son ms grandes que las
limitaciones que puedan tener, y son capaces de convertir los obstculos en
herramientas que los impulsen ms lejos.

ATTE El Grupo

UNIVERSIDAD NACIONAL DEL SANTA

AGRADECIMIENTO
1. La finalizacin de este trabajo se debe gracias a la valiosa ayuda de
algunas personas, para quienes va dirigido nuestro agradecimiento
especial.
2. A nuestros padres, por brindarnos su orientacin y su apoyo
incondicional.
3. A nuestros docentes de la Universidad Nacional de Santa, quienes con
sus conocimientos transmitidos posibilitaron la realizacin del presente
trabajo.
4. En general a todas las personas que aportaron con ideas o con
acciones, para el desarrollo de este informe.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

UNIVERSIDAD NACIONAL DEL SANTA

PRESENTACIN
El presente trabajo fue realizado con la intencin de dar a conocer a nuestros
compaeros acerca del tema Programacin Paralela, la cual posee una
explicacin detallada y resumida del tema.
A travs del contenido del presente informe esperamos poderles dar a conocer
todos los conceptos bsicos de este tema y que les sea de mucha utilidad en el
futuro.
Esperamos que gracias a este material el lector puede entender mejor acerca
de la Programacin Paralela, y pueda satisfacer su necesidad de conocimiento.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

UNIVERSIDAD NACIONAL DEL SANTA

INDICE
I.

INTRODUCCIN:

II.

PROGRAMACIN PARALELA:
1. MODOS DE PROGRAMACIN
1.1 HERRAMIENTAS PARA OBTENER PROGRAMAS PARALELOS
1.2 COMO OBTENER UN PROGRAMA PARALELO
2. ALTERNATIVAS DE PROGRAMACIN PARALELA
2.1 ANCHO DE BANDA:
2.2 PROBLEMAS TPICOS EN LA PROGRAMACIN PARALELA
2.3 VARIANTES DE LA PROGRAMACIN PARALELA
2.4
PARALELA.

ACTUALIDAD Y AVANCES EN LA PROGRAMACIN

3. ESTILOS DE PROGRAMACIN PARALELA


4. ESTRUCTURAS DE PROGRAMACIN PARALELA
5. PROCESO DE PARALELIZACION
III.

LINKOGRAFA

INTRODUCCIN
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

UNIVERSIDAD NACIONAL DEL SANTA

La PROGRAMACIN PARALELA consiste en usar mltiples recursos


simultneamente para resolver un problema dado:

Hace uso de un ordenador con varias CPUs


El programa es dividido en partes independientes
Cada parte es dividida en un conjunto de instrucciones
Las instrucciones son ejecutadas secuencialmente
Las partes son resueltas simultneamente

La programacin paralela es la evolucin natural de programacin en serie.

Programacin en serie:

Funcionan en un ordenador con una nica CPU.


Un problema es dividido en un conjunto de instrucciones.
Las instrucciones son ejecutadas secuencialmente.
nicamente una instruccin es ejecutada cada vez.

Los PROGRAMAS PARALELOS implican crear un programa que utilice de


forma coordinada ms de un elemento de procesamiento a la vez (procesador,
core, etc). Como sabemos, todos los programas realizan una cierta cantidad de
trabajo, ya sea una secuencia de instrucciones u operaciones en uno o ms
conjuntos de datos. Un programa paralelo el capaz de repartir ese trabajo entre
los varios elementos de procesamiento que se pretende utilizar, lo que se
conoce como particin o descomposicin.
Por qu hacer programas paralelos?

A mediados de

1990s, los fabricantes de

supercomputadoras

determinaron que era ms fcil y barato construir maquinas con muchos

procesadores en vez de construir procesadores ms potentes.


A mediados de 2000s, los fabricantes de procesadores determinaron
que es ms eficiente usar procesadores con muchos cores en vez de
construir procesadores ms rpidos.

PROGRAMACIN PARALELA
INTRODUCCIN:
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

UNIVERSIDAD NACIONAL DEL SANTA

Si queremos entender el funcionamiento y/o construccin de un programa


paralelo podemos partir de:
a. Un cdigo Secuencial que resuelve el problema y sobre este cdigo
de alto nivel, buscar la paralelizacin.

Ejemplo:
Si tenemos una aplicacin escrita en C que requiere realizar el clculo
del nmero para luego utilizarlo en otro bloque de cdigo (mtodo,
funcin, procedimiento, etc).
La versin paralela va a depender de la descripcin del problema que
se ha utilizado en la versin secuencial de partida.
Ventajas de la conversin al paralelismo:
Se conoce el tiempo de ejecucin real de las diferentes funciones o
tareas que consta la aplicacin, lo que facilita la distribucin
equilibrada de la carga de trabajo entre procesadores.
Permite encontrar las partes de la aplicacin que requieren ms
esfuerzo de paralelizacin (Suponen ms tiempo).
b. Y por definicin de la

aplicacin: Es decir, volver atrs en la

elaboracin del programa y buscar una descripcin clara del problema y


llevar su desarrollo hacia un camino que admita la paralelizacion, es
decir, reelaborar el programa secuencial y construirlo (re build) como un
programa con ejecucin paralela.
Para facilitar el trabajo, podemos apoyarnos en programas paralelos
que aprovechen las caractersticas de la arquitectura y en bibliotecas
de funciones paralelas.

PROGRAMACIN PARALELA
Tradicionalmente, los programas se han escrito para el cmputo en serie.
Para resolver un problema, se construye un algoritmo y se implementa
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

UNIVERSIDAD NACIONAL DEL SANTA

como un flujo en serio de instrucciones. Estas instrucciones se ejecutan en


una unidad central de procesamiento (CPU). Solo puede ejecutarse una
instruccin a la vez y un tiempo despus de que la instruccin ha terminado,
se ejecuta la siguiente.
La computacin en paralelo en cambio utiliza simultneamente mltiples
elementos de procesamiento para resolver un problema. Esto se logra
mediante la divisin del problema en partes independientes de modo que
cada elemento de procesamiento pueda ejecutar su parte del algoritmo de
manera simultnea con los otros.
Los elementos de procesamiento
son diversos e incluyen recursos
tales como: computadoras con
multiples

procesadores,

computadoras
procesadores

con
multi-core,

varios ordenadores en red.


La programacin paralela, respecto a la programacin secuencial, genera
un conjunto de problemas nuevos al programador: divisin en unidades de
computo independientes (Tareas), agrupacin de tareas o carga de tareas
(cdigo, datos) y asignacin a procesadores, as como sincronizacin y
comunicacin.
Para el programador lo ms sencillo es la utilizacin de compiladores que
extraen paralelismo automticamente, pero estos compiladores no generan
cdigo eficiente para cualquier programa.
La

utilizacin de mtodos que conducen de forma

sistemtica a una

versin paralela para una aplicacin para alcanzar una implementacin ms


eficiente, legible y mantenible.
A continuacin vamos a abordar

estilos de programacin que se usan

ampliamente en la computacin paralela, como paso de mensajes, variables


compartidas o paralelismo de datos.
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

UNIVERSIDAD NACIONAL DEL SANTA

Se comprenden algunos tipos de paralelismo:


Paralelismo a nivel de instruccin
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
instruccin. Los avances en el paralelismo a nivel de instruccin dominaron
la arquitectura de computadores desde mediados de 1980 hasta mediados
de la dcada de 1990.

PARALELISMO DE DATOS
El paralelismo de datos es el paralelismo inherente en programas
con ciclos, que se centra en la distribucin de los datos entre los diferentes
nodos computacionales que deben tratarse en paralelo. La paralelizacin
de ciclos conduce a menudo a secuencias similares de operaciones no
necesariamente idnticas o funciones que se realizan en los elementos
de una gran estructura de datos. Muchas de las aplicaciones cientficas y
de ingeniera muestran paralelismo de datos.
Una dependencia de terminacin de ciclo es la dependencia de una
iteracin de un ciclo en la salida de una o ms iteraciones anteriores. Las
dependencias de terminacin de ciclo evitan la paralelizacin de ciclos. Por
ejemplo, considere el siguiente pseudocdigo que calcula los primeros
nmeros de Fibonacci:

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

UNIVERSIDAD NACIONAL DEL SANTA

1:
2:
3:
4:
5:
6:
7:

PREV1 := 0
PREV2 := 1
do:
CUR := PREV1 + PREV2
PREV1 := PREV2
PREV2 := CUR
while (CUR < 10)

Este bucle no se puede paralelizar porque CUR depende de s mismo


(PREV2) y de PREV1, que se calculan en cada iteracin del bucle. Dado
que cada iteracin depende del resultado de la anterior, no se pueden
realizar en paralelo. A medida que el tamao de un problema se hace ms
grande, la paralelizacin de datos disponible generalmente tambin lo hace.

PARALELISMO DE TAREAS
El paralelismo de tareas es la caracterstica de un programa paralelo en la
que clculos 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 clculo en distintos o mismos grupos de
datos. El paralelismo de tareas por lo general no escala con el tamao de
un problema.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

UNIVERSIDAD NACIONAL DEL SANTA

1. MODOS DE PROGRAMACIN:
Se pueden distinguir dos modos de programacin:
A. Modo SPMD ( Single Program Multiple Data):
Llamado tambin Paralelismo de Datos. Se escribe un solo programa
y todos los procesadores ejecutaran el mismo programa. Multiples
Datos significa que los datos se dividen en pedazos y se asignan a
cada procesador. Los resultados obtenidos al final son aglomerados
(juntados), a pesar de ejecutar todos el mismo programa
(instruccin) los resultados sern distintos debido a los datos que
usan al ejecutar dicho programa.
Principales caracteristicas:

Todas las unidades ejecutan la misma instruccin.


Cada unidad de procesamiento puedes operar con datos distintos.
Todas las unidades operan simultneamente.
No debe existir dependencia entre los datos de los diferentes
procesadores.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

10

UNIVERSIDAD NACIONAL DEL SANTA

B. Modo MPMD ( Multiple Programs Multiple Data)


Los cdigos que se ejecutan en paralelo se obtienen compilando
programas independientes. En este caso la aplicacin a ejecutar (o
cdigo secuencial inicial) se divide en unidades independientes.
Cada unidad trabaja con un conjunto de datos y se asigna a un
procesador distinto.
Caractersticas del modelo MPMD:
Cada unidad ejecuta una instruccin distinta.
Cada unidad procesa un dato distinto.
Todas las unidades operan simultneamente.
Es el modelo ms popular en la actualidad.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

11

UNIVERSIDAD NACIONAL DEL SANTA

C. Modo Mestro-Esclavo
En los programas paralelos se pueden utilizar combinaciones MPMD
y SPMD. La programacin

dueo esclavo (master-slave), se

puede considerar una variante del modo MPMD). En este modo, hay
un programa dueo que se encarga de distribuir trabajo (tareas)
entre procesos esclavos

y recolectar los resultados que estos

generan combinndolos en un solo resultado. Si todos los esclavos


tienen el mismo cdigo, este dueo-esclavo seria una combinacin
de los modos MPMD y SPMD.

PROGRAMACION PARA COMPUTADORAS PARALELAS


1. Programacin para memoria compartida
En los sistemas multiprocesadores, cada procesador puede acceder a
toda la memoria, es decir, hay un espacio de direccionamiento
compartido.

Todos

los

procesadores

se

encuentran

igualmente

comunicados con la memoria principal y pueden acceder por medio de


un dicto comn. En esta configuracin se debe asegurar que los
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

12

UNIVERSIDAD NACIONAL DEL SANTA

procesadores no accedan de manera simultanea a las regiones de


memoria de tal manera que provoque un error. Por ejemplo, si dos o mas
procesadores desean actualizar una variable compartida se deben
establecer procedimientos que permitan acceder a los datos compartidos
como exclusin mutua. Esto se logra mediante el uso de candados o
semforos.

2. Programacin con paso de mensajes


Si la memoria est distribuida entre los procesadores, es decir, cada
procesador tiene acceso a su propia memoria, entonces la programacin es
ms compleja que cuando los datos a usar por un procesador estn en el
espacio de direcciones de otro, ser necesario solicitarla y transferirla a travs
de mensajes. De este modo es necesario impulsar la localidad de los datos
para minimizar la comunicacin entre procesadores y obtener un buen
rendimiento.

1.1

HERRAMIENTAS DE PROGRAMACION PARALELA


Las herramientas para obtener programas paralelos deben permitir la
realizacin de las siguientes tareas:
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

13

UNIVERSIDAD NACIONAL DEL SANTA

Crear procesos finitos.


Localizar paralelismo.
Distribuir carga de trabajo entre procesos.
Comunicacin y sincronizacin entre procesos.
Asignacin de procesos a procesadores.
Determinar la comunicacin entre procesadores.

COMO OBTENER UN PROGRAMA PARALELO


A. BIBLIOTECA DE FUNCIONES PARA

PROGRAMACIN

PARALELA
Utilizacin de un lenguaje secuencial, y una biblioteca de funciones,
la cual requiere mayor implicacin del programador, con lo que se
hace explicito el paralelismo.

Esta alternativa que

sita al

programador en el nivel de abstraccin ms bajo. El cuerpo de los


procesos y hebras se escribe con lenguaje secuencial.
Ventajas:
Los programadores estn familiarizados

con los lenguajes

secuenciales
Las bibliotecas estn disponibles para todos los sistemas
paralelos
Las bibliotecas estn ms cerca al hardware y dan al
programador un control a ms bajo nivel.
Se pueden utilizar a la vez bibliotecas para programar con
hebras y bibliotecas para programar con procesos.
Ejemplos de bibliotecas son: Pthread, MPI, PVM y OpenMP.

B. PARALELIZACION AUTOMATICA
La paralelizacin automtica de un programa secuencial por
un compilador es el santo grial de la computacin paralela. A pesar
de dcadas de trabajo por parte de los investigadores, la
paralelizacin automtica ha tenido un xito limitado.
Los principales lenguajes de programacin en paralelo
permanecen explcitamente paralelos o en el mejor de los
casos parcialmente implcitos, en los que un programador le da al
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

14

UNIVERSIDAD NACIONAL DEL SANTA

compilador directivas de paralelizacin. Existen pocos lenguajes de


programacin paralelos totalmente implcitos.

C. COMPILADORES PARALELOS

Los compiladores paralelos buscan automticamente el paralelismo


implcito en un programa secuencial y lo hacen explicito, evitando la
intervencin del programador.
Para ello, realizan anlisis de dependencias entre bloques de
cdigo: entre iteraciones de un ciclo o entre funciones.
Ejemplo:
Supongamos dos bloques de cdigo a analizar: B1 y B2, de forma
que B1 se encuentre antes de B2 en el flujo secuencial del
programa. Las dependencias que detecta el anlisis el anlisis entre
estos dos bloques son:
Dependencia RAW (Read After Write): ocurre si el bloque B1
produce un dato que consume B2.
Dependencia WAW (Write After Write): ocurre si B1 escribe

en

una posicin de memoria en la que tambin escribe B2.


Dependencia WAR (Write After Read): ocurre si B1 lee una
posicin de memoria que modifica B2.

Los compiladores paralelos estn limitados a aplicaciones


que exhiben un paralelismo regular, como los clculos a
nivel de bucle.

2. ALTERNATIVAS

DE

PROGRAMACIN

PARALELA
Nosotros sabemos que los procesadores actuales son paralelos son
paralelos y es muy habitual tener en los procesadores normales tener 4
ncleos, 6 ncleos ya se estn anunciando los procesadores que tendrn
12 ncleos.
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

15

UNIVERSIDAD NACIONAL DEL SANTA

Adems de esto, podemos decir que durante los ltimos 10 aos, las
tendencias en computacin apuntan a la presencia continua de la
computacin paralela, dado que las redes de interconexin continan
avanzando significativamente en trminos de velocidad de comunicacin y
ancho de banda.

2.1. ANCHO DE BANDA:


A. Programacin OpenMP: OpenMP

es una API (Application

Program Interface) que posibilita la programacin paralela en


entornos multiprocesador con memoria compartida, como es el
caso de la mayora de los procesadores actualmente en el
mercado. Utilizando modificaciones en los compiladores, esta
tecnologa permite el desarrollo incremental de aplicaciones
paralelas a partir de cdigo fuente serie. Esta norma est definida
por un consorcio que rene importantes fabricantes de hardware y
software.
B. Programacin

MPI:

MPI:

(acrnimo

de

Message

Passing

Interface) es una propuesta de estndar para un interface de paso


de mensajes para entornos paralelos, especialmente aquellos con
memoria distribuida. En este modelo, una ejecucin consta de
uno o ms procesos que se comunican llamando a rutinas de una
biblioteca para recibir y enviar mensajes entre procesos. La
metodologa consistir en presentar una introduccin con los
conceptos tericos de la programacin en MPI, seguida por una
descripcin de cmo preparar un entorno computacional para el
desarrollo de aplicaciones.
C. Programacin Hbrida: Las aplicaciones en clusters se pueden
programar para utilizar paso de mensajes entre todos los
procesadores. Pero es posible obtener mejores prestaciones si se
utiliza un modelo hbrido de comunicacin con comparticin de
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

16

UNIVERSIDAD NACIONAL DEL SANTA

informacin por memoria compartida y con memoria distribuida, a


travs de la fusin de MPI con OpenMP. El objetivo de este
mdulo ser la presentacin de ejemplos de programacin
MPI+OpenMP en sistemas hbridos.

2.2. PROBLEMAS

TPICOS

EN

LA

PROGRAMACIN

PARALELA
Los problemas tpicos que se abordan con la programacin paralela
son: problemas de alto coste, o problemas de no tan alto coste pero de
gran dimensin, o problemas de tiempo real, en
los que se necesita la respuesta en un tiempo
mximo.
La computacin paralela se ha convertido en el
paradigma dominante en la arquitectura de
computadores,
procesadores

principalmente
multincleo.

Sin

en

los

embargo,

recientemente, el consumo de energa de los ordenadores paralelos se


ha convertido en una preocupacin.

A. PROCESADOR MULTINUCLEO:
Aunque los procesadores son cada vez ms rpidos, existen numerosas
aplicaciones para las que la velocidad de clculo de un nico procesador
resulta insuficiente. La alternativa adecuada para esas aplicaciones es el
uso de paralelismo.
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

17

UNIVERSIDAD NACIONAL DEL SANTA

Paralelismo en los sistemas de Computadores Actuales


Una vez que hemos visto la importancia que tiene el paralelismo para
aumentar las prestaciones de los sistemas computacionales, nos
planteamos los tipos de sistemas paralelos que tenemos en la actualidad
a nuestro alcance. Algunos de ellos son:

Podemos disponer de varios procesadores en un chip. Esta


posibilidad se ha universalizado recientemente, al haber sustituido en
la prctica los sistemas multincleo a los monoprocesadores como
sistema universal de cmputo, ya que en la actualidad los
procesadores duales se comercializan como procesador bsico, y es
posible adquirir sin mucho coste tambin tetraprocesadores. Todas
las marcas (Intel, SUN, AMD, CELL...) disponen de bi

tetraprocesadores (o sistemas con ms ncleos), y en el futuro la


tendencia es que el nmero de ncleos vaya subiendo. Estos
sistemas son de memoria compartida, y se programan utilizando
threads, normalmente con OpenMP. El estilo de programacin se
prev que siga siendo de este tipo, quizs con herramientas
especficas de desarrollo.

En las redes de mbito local (Local Area Networks, LAN) se


conectan varios procesadores por medio de una red de conexin de
alta

velocidad,

formndose

un

cluster,

que

se

utiliza

con

programacin por paso de mensajes, pero puede llegar a poderse


utilizar OpenMP si se desarrollan versiones eficientes que distribuyan
automticamente

los

datos

en

la

memoria

generen

las

comunicaciones necesarias para acceder a los datos.


En muchos casos los procesadores bsicos son procesadores
multincleo, que se pueden programar con el paradigma de memoria
compartida, y se obtiene as un sistema hbrido en el que se
combina la memoria compartida y el paso de mensajes.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

18

UNIVERSIDAD NACIONAL DEL SANTA

Se

habla

de

supercomputacin para referirse a la resolucin en los sistemas


computacionales

ms

potentes

(supercomputadores)

de

los

problemas que demandan de ms computacin (meteorologa,


estudio del genoma, simulacin de molculas...) Tradicionalmente
estas computaciones se han venido haciendo en grandes centros de
supercomputacin, pero cada vez ms se est trasladando la
resolucin de este tipo de problemas a sistemas distribuidos, por lo
que se puede considerar la red como el mayor supercomputador
actual.

La Computacin Distribuida y el Grid Computing es computacin


con procesadores geogrficamente distribuidos. Estos procesadores
constituyen una red, pero para su utilizacin se requiere de unas
herramientas ms sofisticadas que en el caso de redes locales.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

19

UNIVERSIDAD NACIONAL DEL SANTA

Con la Web Computing se ve la red como un recurso


computacional, de manera que se puede solicitar en la web la
resolucin de un problema, y este se asigna a algn o algunos
sistemas para su resolucin. Se puede tener Computacin P2P o
sistemas tipo, donde los usuarios o los laboratorios de computacin
ponen sus sistemas a disposicin de los usuarios para ofrecer
recursos computacionales, siempre con algunas restricciones de
seguridad, uso...

Recientemente, nos referimos con Cloud Computing a una


computacin paralela donde se distribuyen los recursos de todo tipo:
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

20

UNIVERSIDAD NACIONAL DEL SANTA

es posible tener unos determinados centros de computacin, otros de


almacenamiento, otros se servicios software..., de manera que un
usuario podra solicitar un determinado software de un centro, tomar
almacenar datos en otro centro, y requerir de otro que resolviera el

problema con que est trabajando.


La combinacin de todos estos elementos (Grid, web, P2P, Cloud
computing, mviles...) y a la vez con sistemas lgicos distintos
(compiladores, libreras, software bsico...), hace que surja la
necesidad de herramientas que permitan la virtualizacin, que
consiste en la ejecucin simulada en un Sistema de la computacin
que se realizara en otro de caractersticas distintas, y los sercicios
por demanda.

Se tiene de esta manera sistemas que son heterogneos (tienen


distinta velocidad de computacin, capacidad de almacenamiento,
distinta forma de representacin de los datos...) y que estn
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

21

UNIVERSIDAD NACIONAL DEL SANTA

organizados de forma jerrquica (en computacin distribuida


tendramos varios sistemas geogrficamente distribuidos, pudiendo
ser estos sistemas de distinto tipo, unos de memoria compartida y
otros redes de rea local, compuestas a su vez por nodos que sean
procesadores

multincleo

procesadores

grficos).

Algunos

sistemas combinan una CPU y varios ncleos en una GPU; siendo la


CPU ms veloz, disponiendo de ms memoria y con mayor precisin
en la representacin de los datos. Por otro lado, las GPU son mucho
ms baratas y ms rpidas si se utilizan muchos elementos
computacionales

que

permiten

trabajar

muchos

threads

simultneamente. La tendencia es que tambin en los sistemas de


memoria compartida encontremos sistemas heterogneos, con
ncleos de distinta arquitectura en un mismo chip.

Se est investigando en la utlizacin para


computacin

de

sistemas

no

convencionales: en la Computacin Cuntica se utilizan las


propiedades
computacin,

cunticas
y

en

la

de

las

partculas

Computacin

para

Biolgica

acelerar
se

la

utilizan

propiedades de sistemas biolgicos, como molculas, clulas,


cadenas de ADN...
Esta computacin tambin sera paralela al realizarse al mismo
tiempo varias de las acciones que en un procesador convencional
hay que realizar una tras otra, pero el tipo de paralelismo es

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

22

UNIVERSIDAD NACIONAL DEL SANTA

totalmente distinto del paralelismo tradicional que estudiamos en este


curso.

2.3.

VARIANTES DE LA PROGRAMACIN PARALELA


Dada la complejidad de los sistemas paralelos, en este seminario nos
centramos en el estudio de las nociones bsicas de la programacin
paralela, que son utilizadas en el desarrollo de programas paralelos en
todos estos sistemas, aunque en muchos casos se necesita de
herramientas y tecnologa adicional que nos permita desarrollar y
ejecutar sobre ellos los programas paralelos que se diseen.
Tambin hay varios tipos de algoritmos y programacin paralela, y en
algunos casos sera necesario pensar los algoritmos de una manera
alternativa al enfoque que usamos en el curso si se quiere obtener las
mximas prestaciones en el sistema en el que se trabaje. Algunos tipos
de programacin paralela son:

Se habla de Programacin Concurrente para referirse al caso en


que varios procesos o threads colaboran en la resolucin de un
problema. Estos procesos pueden compartir el uso de un mismo
procesador, en cuyo caso no hablaramos de programacin paralela.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

23

UNIVERSIDAD NACIONAL DEL SANTA

Para nosotros ser programacin paralela la que se hace usando


varios procesadores para acelerar la resolucin de los problemas con
que trabajemos. Trabajaremos con algoritmos paralelos, donde se
especifica la forma en que los distintos elementos de proceso
comparten los datos, y cmo colaboran en la resolucin de los
problemas. En general consideraremos que los procesadores son
todos del mismo tipo, con lo que tendremos sistemas paralelos
homogneos.

En los sistemas heterogneos los componentes bsicos pueden


tener distinta velocidad, capacidades de memoria diferentes, o
incluso la representacin de los datos ser distinta. Los mismos
programas de paso de mensajes utilizados en otros sistemas se
pueden utilizar aqu, pero las prestaciones vendrn marcadas por
la velocidad del procesador ms lento. Para sacar el mximo
rendimiento de un sistema heterogneo habr que desarrollar
algoritmos heterogneos, que tengan en cuenta la velocidad de
los procesadores para asignarles cantidades distintas de datos en
funcin de su velocidad.

En los sistemas hbridos tambin sern vlidos los programas de


paso de mensajes, que pueden ejecutarse tanto con memoria
compartida como distribuida, pero la combinacin de MPI con
OpenMP puede dar lugar a programas con mejores prestaciones.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

24

UNIVERSIDAD NACIONAL DEL SANTA

En sistemas de carga variable la capacidad de cmputo de los


nodos no es siempre la misma (quizs porque es un sistema
multiusuario

los

trabajos

que

otros

usuarios

mandan

dinmicamente hacen que durante la ejecucin de nuestro


programa las condiciones del sistema cambien), y se requiere de
algoritmos adaptativos, que sern heterogneos pero en los
que adems habr que evaluar periodicamente las condiciones
del sistema para cambiar la distribucin del trabajo en funcin de
las velocidades en cada momento.
o Por ejemplo La CPU y la GPU

A. PROGRAMACIN EN OPEN MP
Analizaremos la programacin
paralela
bsicamente

con
para

OpenMP,
sistemas

homogneos, aunque este tipo


de programacin tambin se usa como base para los otros sistemas
mencionados, y analizaremos algn ejemplo de combinacin de
OpenMP y MPI para programacin hbrida.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

25

UNIVERSIDAD NACIONAL DEL SANTA

B. PROGRAMACIN EN MPI

MPI

(acrnimo de

Message

Passing

Interface)

es

propuesta
estndar

una
de

para

un

interface de paso de mensajes para entornos paralelos, especialmente


aquellos con memoria distribuida.
En este modelo, una ejecucin consta de uno o ms procesos que se
comunican llamando a rutinas de una biblioteca para recibir y enviar
mensajes entre procesos. El objetivo de este mdulo ser la presentacin
de las nociones bsicas de programacin MPI. La metodologa consistir
en presentar una introduccin con los conceptos tericos de la
programacin en MPI, seguida por una descripcin de cmo preparar un
entorno computacional para el desarrollo de aplicaciones.

C. PROGRAMACIN HBRIDA
Las aplicaciones en clusters se pueden programar para utilizar paso de
mensajes entre todos los procesadores. Pero es posible obtener mejores
prestaciones si se utiliza un modelo hbrido de comunicacin con
comparticin de informacin por memoria compartida y con memoria
distribuida, a travs de la fusin de MPI con OpenMP.
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

26

UNIVERSIDAD NACIONAL DEL SANTA

El objetivo de este mdulo ser la presentacin de ejemplos de


programacin MPI+OpenMP en sistemas hbridos.

2.4 ACTUALIDAD Y AVANCES EN LA PROGRAMACIN PARALELA.


Ya no estar el CPU y el GPU solos, se les une el PPU
Hay un nuevo tipo de hardware para la PC, ya que no bastaba con el
CPU y el GPU (Unidad de Procesamiento grfico) ahora hay que
preocuparse por el PPU (Physics Processing Unit o Unidad de Proceso
Fsico)...
Al parecer este hardware fue concebido para juegos con fsicas de alta
complejidad como Unreal 3, los cuales soportarn este chip llamado
AGEIA PhysX

Una Unidad de procesamiento fsico (en Ingls PPU) es un


microprocesador diseado especialmente para manejar clculos fsicos
en computacin. Su uso esta particularmente extendido en el campo de
los motores fsicos y los video juegos. Algunos ejemplos de clculos
realizados por unidades de procesamiento fsico son clculos de
dinmica de cuerpos rgidos, deteccin de colisiones, dinmica de
fluidos, simulacin de vestuario y cabello (en computacin grfica),
anlisis de elementos finitos y fractura de objetos. El propsito de estas

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

27

UNIVERSIDAD NACIONAL DEL SANTA

unidades de procesamiento fsico es liberar de carga (de procesamiento)


a las CPU haciendo dichas operaciones.
A. HYPER TREADING
HyperThreading (tambin conocido como HT Technology) es una
marca registrada de la empresa Intel para denominar su implementacin
de la tecnologa Multithreading Simultneo tambin conocido como SMT.
Permite a los programas preparados para ejecutar mltiples hilos (multithreaded) procesarlos en paralelo dentro de un nico procesador,
incrementando el uso de las unidades de ejecucin del procesador.
Esta tecnologa consiste en simular dos procesadores lgicos dentro de
un nico procesador fsico. El resultado es una mejora en el rendimiento
del procesador, puesto que al simular dos procesadores se pueden
aprovechar mejor las unidades de clculo mantenindolas ocupadas
durante un porcentaje mayor de tiempo.

B. INTEL TURBO BOOST


La tecnologa Intel Turbo Boost ofrece an ms desempeo cuando se
lo necesita en los sistemas equipados con los procesadores Intel
Core de tercera generacin.
La tecnologa Intel Turbo Boost 2.0 incrementa de forma automtica la
velocidad de procesamiento de los ncleos por encima de la frecuencia
operativa bsica si no se han alcanzado los lmites especificados de
energa, corriente y temperatura.
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

28

UNIVERSIDAD NACIONAL DEL SANTA

C. AUMENTO DINMICO DEL DESEMPEO


La tecnologa Intel Turbo Boost 2.0 se activa cuando el sistema
operativo (SO) solicita el estado de mximo desempeo del procesador
(P0).
La frecuencia mxima de la tecnologa Intel Turbo Boost 2.0 depende de
la cantidad de ncleos activos. El tiempo durante el cual el procesador
se mantiene en el estado de la tecnologa Intel Turbo Boost 2.0 depende
de la carga de trabajo y del entorno operativo.
Cualquiera de los siguientes factores puede definir el lmite superior de
la tecnologa Intel Turbo Boost 2.0 con una determinada carga de
trabajo:

Cantidad de ncleos activos

Consumo estimado de corriente

Consumo estimado de energa

Temperatura del procesador

Cuando el procesador funciona por debajo de estos lmites y la carga de


trabajo del usuario exige mayor desempeo, la frecuencia del
procesador aumentar de forma dinmica hasta alcanzar su lmite
superior. La tecnologa Intel Turbo Boost 2.0 posee varios algoritmos que
funcionan en paralelo para administrar la corriente, energa y
temperatura, a fin de maximizar el desempeo y la eficiencia energtica.
Nota: La tecnologa Intel Turbo Boost 2.0 permite que el procesador
funcione a un nivel de energa mayor que el lmite nominal superior
(TDP) durante perodos breves, a fin de maximizar el desempeo.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

29

UNIVERSIDAD NACIONAL DEL SANTA

3. ESTILOS DE PROGRAMACIN PARALELA


Las aplicaciones paralelas deben ser escritas siguiendo un estilo o
paradigma de programacin. Existen muchos estilos de programacin
paralela y los ms usados son paso de mensajes, variables compartidas
y paralelismo de datos. Las arquitecturas paralelas se diferencian en el
estilo de programacin que ms favorece su implementacin hardware:
paso de mensajes para multicomputadores, variables compartidas para
multiprocesadores y paralelismo de datos para procesadores matriciales.
A. PASOS DE MENSAJES
En este estilo se define un conjunto de procesos con su propio espacio
de memoria, pero que pueden comunicarse con otros procesos mediante
el envo y la recepcin de mensajes a travs de la red de interconexin.
El paradigma asume que cualquier proceso puede enviar un mensaje a
cualquier otro.
La implementacin de esta metodologa se suele realizar utilizando
libreras aadidas a los lenguajes de programacin estndar,
fundamentalmente C y Fortran.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

Grfico - Estilo de Paso de Mensajes.

30

UNIVERSIDAD NACIONAL DEL SANTA

De la grfica se puede decir que:


Las OPERACIONES y los DATOS se descomponen en PROCESOS.
Los procesos slo tienen acceso directo a los datos privados (locales).
Los datos no locales se acceden mediante intercambio de mensajes
entre los procesos (enviando y recibiendo mensajes).
La transferencia de data requiere operaciones cooperativas para ser
ejecutada por cada proceso (una operacin de envo debe tener una
operacin de recepcin).

Grfico Procesos y Canales.


INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

31

UNIVERSIDAD NACIONAL DEL SANTA

En el paradigma de paso de mensajes, un programa paralelo se ve


como un conjunto de procesos que se intercambian informacin a travs
de canales.
a. HERRAMIENTAS DE SOFTWARE DE PASOS DE MENSAJE
Para redactar cdigo paralelo basado en paso de mensajes, se
dispone de diversas herramientas software: como los lenguajes de
programacin antes mencionados, as como Ada u Occam; o
bibliotecas de funciones que actan de interfaz al sistema de
comunicaciones, como MPI (Message Passing Interface - Interfaz
de Paso de Mensajes) y PVM (Parallel Virtual Machine - Mquina
Virtual Paralela).
Actualmente se utilizan ms las bibliotecas de funciones. Los
fabricantes
de
supercomputadores
suelen
ofrecer
implementaciones de lenguajes y bibliotecas para la programacin,
que sacan partido de la arquitectura abstracta y concreta de sus
mquinas. La parte 1 de MPI se desarroll en 1994, y la parte 2, en
1996.
En su desarrollo se tuvo en cuenta la experiencia con PVM; la
versin 3 de PVM apareci en marzo de 1993.
b. COMUNICACIN DE PASOS DE MENSAJE
Las funciones bsicas de comunicacin que ofrecen las
herramientas software para paso de mensajes han de permitir, al
menos, comunicacin entre dos procesos (uno-a-uno). Para ello se
utilizan dos funciones: una para enviar y otra para recibir:
Send (destino, datos), funciona para enviar datos.
Recieve (fuente, datos), funcin apara recibir datos.
Generalmente, en la funcin para enviar, se especifica el proceso
destino y la variable a enviar; y en la funcin de recepcin se
especifica la fuente y la variable en la que se ubicaran los datos
que se reciben.
Nos podemos encontrar, por lo general, con transmisiones
sncronas o asncronas.
Si se implementa una transmisin sncrona, el proceso que ejecuta
un send queda bloqueado hasta que el destino ejecute la funcin
receive correspondiente; igualmente, el proceso que ejecuta
receive queda bloqueado hasta que se realice el send
correspondiente. De esta forma los procesos fuente y destino se
sincronizan antes de realizar la transferencia de datos y la
Comunicacin es ms rpida y eficiente.
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

32

Grfica Transmisin Sncrona en Paso de Mensajes

UNIVERSIDAD NACIONAL DEL SANTA

En una transmisin asncrona la Comunicacin es ms lenta, ya


que send no deja bloqueado el proceso que lo ejecuta;
generalmente se ofrece una implementacin de receive que deja
bloqueado el proceso hasta que se realice el correspondiente send.
Este bloqueo del receive permite sincronizar procesos. Para el
send puede ser no bloqueante es necesario utilizar un buffer en el
que ubicar los datos que se envan al destino.
Este buffer no es necesario en comunicaciones sncronas, en estas
la transferencia de datos la realiza el sistema de comunicacin
entre la variable del proceso fuente especificada en send y la
variable del destino especificada en receive.

Grfica Transmisin Asncrona en Paso de

B. VARIABLES COMPARTIDAS
Los programas paralelos ejecutados en sistemas de variables
compartidas se descomponen en varios procesos (tareas) que
comparten los datos asociados a una porcin de su espacio de
direcciones. Cada proceso puede llevar a cabo la ejecucin de un
subconjunto de iteraciones de un lazo comn, o bien, de forma ms
general, cada proceso puede obtener sus tareas de una cola compartida.
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

33

UNIVERSIDAD NACIONAL DEL SANTA

La programacin ms eficiente, aunque dificultosa, se establece a travs


de construcciones de bajo nivel tales como barreras de sincronizacin,
regiones crticas, locks, semforos, etc.

De la grfica se puede decir que:


Las operaciones se descomponen en tareas.
Los datos son compartidos por todas las tareas.
La sincronizacin
es -obtenida
la escritura
y lectura a las
Grfico
Estilo controlando
de Variables
Compartidas.
a. HERRAMIENTAS
DE
SOFTWARE
DE
VARIABLES
COMPARTIDAS
Hay diversas herramientas software para redactar cdigo paralelo
basado en variables compartidas: Ada 95 (tipos protegidos) y Java;
o bibliotecas de funciones, como Pthread (POSIX-Thread) u
OpenMP, y alternativas que usan lenguaje secuencial ms
directivas dl compilador, como OpenMP.
POSIX-Pthread es un estndar, introducido en 1996 por el comit
de estndares del IEEE, basado en funciones. OpenMP es una
biblioteca de funciones, directivas y variables, desarrollado por un
grupo representativo de vendedores de hardware y software
[OpenMP Home].
Las herramientas software de variables compartidas ofrecen
mecanismos para implementar sincronizacin tales como: cerrojos,
semforos,
variables
condicionales,
monitores
u
otras
construcciones que implementan secciones crticas o accesos a
variables en exclusin mutua.
Con respecto a la sincronizacin, en Ada 95 se aadieron los tipos
protegidos, que son similares a los monitores; con POSIX-Thread
se dispone de cerrojos, semforos y variables condicionales.
OpenMP dispone de cerrojos y barreras, y construcciones para
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

34

UNIVERSIDAD NACIONAL DEL SANTA

implementar secciones crticas, o acceso a variables atmico.


Tambin permite utilizar funciones colectivas.
C. PARALELISMO DE DATOS
Es un paradigma de programacin claramente heredado de las
mquinas SPMD y se utiliza principalmente para simplificar la
programacin de sistemas de memoria distribuida.
En esta aproximacin, un programa secuencial en un lenguaje estndar
es complementado con directivas o anotaciones insertadas en el
programa para guiar al compilador en su tarea de distribuir los datos y
las computaciones.
Actualmente los lenguajes de paralelismo de datos ms populares son
CM-Fortran (Connection Machine Fortran), Fortran D, Craft, Vienna
Fortran] y especialmente el considerado como estndar HighPerformance Fortrun (HPF).

Grfico - Estilo de Variables Compartidas.

De la grfica se puede decir que:

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

35

UNIVERSIDAD NACIONAL DEL SANTA

Distintos procesos aplican las mismas operaciones a una parte diferente


de la misma estructura de datos.
Usa un enfoque Single Program, Multiple Data (SPMD).
Es una modificacin del algoritmo secuencial.
a. HERRAMIENTA DE SOFTWARE DE PARALELISMO DE DATOS
Los lenguajes con paralelismo de datos, como C* (C start),
aparecieron ligados a procesadores matriciales. Estas mquinas
son arquitecturas SPMD. Desde su aparicin en 1960 los
procesadores matriciales se han encontrado dentro de la gama de
los supercomputadores, pero en 1997 dejaron de aparecer en la
lista TOP500. No obstante, actualmente, la mayor parte de los
computadores de altas prestaciones tienen compiladores para
lenguajes con paralelismo de datos, como Fortran 90 y HPF.
Fortran 90, basado en Fortran 77, permite al programador
implementar paralelismo de datos utilizando operaciones con
vectores y matrices. La primera versin de HPF apareci en 1992,
es una ampliacin de Fortran 90.

4. ESTRUCTURA DE PROGRAMACIN
PARALELA
Analizando la estructura (grafo) de las tareas (unidad de trabajo de la
aplicacin) y de los procesos (unidades de cdigo en ejecucin) de mltiples
programas paralelos, se puede encontrar que hay ciertos patrones que se
repiten en distintos programas y dentro de un programa. En estas estructuras
de las relaciones entre las tareas o entre procesos representan
comunicaciones. En estas estructuras estn:
Maestro esclavo (Master-Slave) o granja de tareas (Task-Farming).
Descomposicin de datos
Divide y vencers (divide and conquer) o descomposicin recursiva

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

36

UNIVERSIDAD NACIONAL DEL SANTA

Hay estructuras entre las que no hay un lmite totalmente claro. Por otra parte,
nos podemos encontrar dentro de un mismo programa paralelo varias de estas
estructuras en diferentes niveles.

A. Maestro esclavo (Master-Slave) o granja de tareas (Task-Farming).


En este caso, en la estructura de procesos se distingue un proceso
Maestro y mltiples esclavos. El proceso Maestro se encarga de
distribuir las tareas de un conjunto (granja) entre el grupo de esclavos, y
de ir recolectando los resultados parciales que van calculando los
esclavos, con los que el Maestro obtiene el resultado final. Usualmente
no hay comunicacin entre los esclavos. Si todos los esclavos ejecutan
el mismo cdigo, la aplicacin se puede implementar con dos
programas, uno para el Maestro y otro para los esclavos (modo mixto
MPMD-SPMD). No obstante, tambin se puede hacer un nico
programa con el cdigo del Maestro y del esclavo (SPMD).

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

37

UNIVERSIDAD NACIONAL DEL SANTA

MAESTRO ESCLAVO

Maestro
Esclavo

Esclavo

P
E/S

Esclavo

E/S

Red de Interconexin

E/S

M
P

E/S

M
P

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

38

UNIVERSIDAD NACIONAL DEL SANTA

B. Descomposicin de datos
Esta alternativa es muy utilizada para obtener tareas paralelas en
problemas en los que se opera con grandes estructuras de datos. La
estructura de datos de entrada o la estructura de datos de salida o
ambas, se dividen en partes. A partir de esta divisin se derivan las
tareas paralelas.
Estas generalmente realizan operaciones similares, aunque hay
descomposiciones en las que las tareas no realizan exactamente las
mismas operaciones. Nos podemos encontrar aplicaciones en las que se
pueden realizar distintas descomposiciones de datos alternativas.
Los algoritmos con imgenes, por ejemplo, fcilmente admiten a una
descomposicin de datos.
Una estructura de procesos para esta alternativa seria la representada
en la figura. Los procesos pueden englobar varias tareas.
Los diferentes procesos ejecutan tpicamente el mismo cdigo (SPMD),
aunque cada uno trabaja sobre un conjunto de datos distintos.
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

39

UNIVERSIDAD NACIONAL DEL SANTA

Como ilustra la figura, puede haber comunicaciones entre los diferentes


procesos. Si no hay ninguna interaccin entre procesos, sera una
aplicacin embarazosamente paralela (embarrassingly parallel
computation).
Otra posible estructura es la que cambia las estructuras de las figuras.

DESCOMPOSICIN DE DATOS

P
E/S
P1

P2

P3

E/S

P4
Red de Interconexin

E/S

E/S

C. Divide y vencers (divide and conquer) o descomposicin recursiva


Esta estructura se utiliza cuando un problema se puede dividir en dos o
ms sub-problemas de forma que cada uno se puede resolver
independientemente, combinndose los resultados para obtener el
resultado final. Si los sub-problemas son instancias ms pequeas del
original, entonces se podran subdividir a su vez recursivamente. Las
tareas presentan una estructura en forma de rbol.
Los programas secuenciales recursivos tienen una implementacin
paralela divide y vencers (paralelismo de tareas). Tambin podemos
encontrar esta estructura descomponiendo los datos de un problema
recursivamente (paralelismo de datos). Por ejemplo un vector cuyo
componentes se van a sumar se puede descomponer recursivamente en
dos vectores, hasta llegar a vectores de dos componentes. En la figura
la suma de los vectores A de 8 componentes (a0, a1,, a7), se ha
descompuesto en sumas de dos componentes. Fcilmente se obtiene un
implementacin SPMD para divide y vencers.
A
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS
B

a0 a11 a2

a3

C
a4

a5

a6

a7

40

DIVIDE Y VENCERAS
UNIVERSIDAD NACIONAL DEL SANTA

a0 a1 a2 a3

a4

a5 a6 a7

P3

P2

P1

5. PROCESO DE PARALELIZACIN
Para quin es importante?
o

o
P0

Diseadores de Algoritmos
Disear algoritmos que corran bien en sistemas reales.
Programadores
Comprender dnde radican las claves del rendimiento para obtener el

mejor posible en un sistema dado.


o Arquitectos
Comprender las cargas, las interacciones, y la importancia de los

grados de libertad.
Importante para el diseo y la evaluacin.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS
Malla
2x2

41

UNIVERSIDAD NACIONAL DEL SANTA

Importancia de la programacin:
Diseamos mquinas para que ejecuten programas. As pues, stos:
Ayudan a tomar decisiones en el diseo hardware;
Ayudan a evaluar los cambios en los sistemas.
Son la clave que dirige los avances en la arquitectura uniprocesador.
Caches y diseo del conjunto de instrucciones.
Mayor importancia en multiprocesadores.
Nuevos grados de libertad.
Mayor penalizacin si hay desacoplo entre programas y arquitectura.
Ms espacio para optimaciones en software.
Aun desde el punto de vista arquitectnico, necesitamos abrir la caja

o
o

negra del software.


o Aunque un problema disponga de un buen algoritmo secuencial,
paralelizarlo no es trivial.
o Hay que ser capaces de
Extraer el paralelismo y
Combinarlo con las prestaciones ofrecidas por la arquitectura.

Algunos conceptos importantes


Tarea:
o Orden de trabajo que no puede descomponerse en subrdenes
ejecutables en paralelo.
o Se ejecuta secuencialmente; la concurrencia solo se da entre tareas.
o Granularidad fina frente a granularidad gruesa, dependiendo de la
cantidad de trabajo que suponga la realizacin de la tarea.

Proceso (thread o hebra):


o Entidad abstracta que ejecuta las tareas que le son asignadas.
o Un programa paralelo est constituido por muchos procesos
cooperando.
o Hay una comunicacin y sincronizacin en los procesos para la
ejecucin de las tareas.

Procesador:
o Elemento fsico en el que se ejecutan los procesos.
o Los procesos constituyen la mquina virtual para el programador.
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

+
42 +
+

+
+

UNIVERSIDAD NACIONAL DEL SANTA

Primero se escribe el programa en trminos de procesos y


despus de mapea a los procesadores.

Fases Del Proceso de Paralelizacin:

5.1. Descomposicin:
o Divisin del programa en tareas que sern distribuidas entre los
procesos.
o Las tareas pueden estar dispuestas para ejecucin dinmicamente.
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

43

UNIVERSIDAD NACIONAL DEL SANTA

El nmero de tareas disponibles puede variar con el tiempo.


Identificar la concurrencia y decidir a qu nivel se va a explotar.
o Objetivo: Suficientes tareas para mantener ocupados los procesos pero
no demasiadas.
El nmero de tareas disponibles en un momento define el lmite
del speedup que podemos conseguir.

5.2. Asignacin:
o Mecanismo especfico para dividir el trabajo entre procesos.
Junto con la descomposicin recibe el nombre de particin.
Objetivos:
o equilibrar la carga;
o minimizar comunicacin y coste de la gestin de la
asignacin.
o Aproximarse a las estructuras suele ser buena idea.
Inspeccin del cdigo (paralelizar bucles).
Existen procesos heursticos ya establecidos.
Asignacin esttica frente a asignacin dinmica.
o La particin es la primera preocupacin del programador.
Generalmente independiente de la arquitectura o el modelo de

programacin.
Pero el coste y complejidad de las primitivas usadas puede
afectar a la decisin.

5.3. Escribir el cdigo:


o Para ejecutar las tareas asignadas, los procesos necesitan mecanismos
para:
referirse y acceder a los datos;
intercambiar datos con otros procesos (comunicacin);
sincronizar las actividades.
o Las decisiones tomadas en la redaccion del cdigo son muy
dependientes
INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE
COMPUTADORAS

44

UNIVERSIDAD NACIONAL DEL SANTA

del modelo de programacin;


de la eficiencia con que las primitivas del modelo estn
implementadas.

o En esta parte se incluyen, entre otras cosas:


cmo organizar las estructuras de datos;
cmo planificar temporalmente las tareas asignadas a un proceso

para explotar la localidad de datos;


cmo organizar la comunicacin entre procesos resultantes de la

asignacin.
o Objetivos
Reducir el coste de comunicacin y sincronizacin.
Preservar las referencias a datos locales (organizacin de las

estructuras de datos).
Programar las tareas para satisfacer rpidamente las

dependencias.
Reducir la sobrecarga que introduce el paralelismo.
o Cercanos a la Arquitectura (y al modelo de programacin)
La eleccin depende mucho de la comunicacin, eficiencia y las

primitivas.
La arquitectura debe proporcionar las primitivas adecuadas de
manera eficiente.

5.4. Evaluacin:
o Despus de escribir el cdigo ya tenemos un programa paralelo.
o Dos aspectos del mapeado:
Qu procesos se ejecutarn en el mismo procesador.
Qu procesos se ejecutan en un procesador determinado.

El mapeado se realiza en una topologa determinada.

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

45

UNIVERSIDAD NACIONAL DEL SANTA

LINKOGRAFA

- http://ocw.uc3m.es/ingenieriainformatica/arquitectura-de-computadoresii/materiales-de-clasee/mc-f-002-ii
- http://www.fing.edu.uy/inco/cursos/hpc/materi
al/clases/Criba.pdf
- http://atc2.aut.uah.es/~rduran/Areinco/pdf/n_t
ema5.pdf
- http://www.cs.buap.mx/~mtovar/doc/ProgCon
c/ProgramacionParalela.pdf
- http://www.qft.iqfr.csic.es/curso_paralelo.pdf

INGENIERIA DE SISTEMAS E INFORMATICA ARQUITECTURA DE


COMPUTADORAS

46