Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Leiss
66
Introducción a la Computación Paralela J. Aguilar, E. Leiss
67
Introducción a la Computación Paralela J. Aguilar, E. Leiss
C ó d ig o A u to m az . E jecu ció n
F u e n te P a ra lela P a ralela
D e sarro ll.
L ib re rias
Este enfoque puede trabajar bien, ya que sólo hay que concentrarse en pequeñas
partes. Además, es fácil asegurar su escalabilidad ante avances tecnológicos, en las
plataformas computacionales (programación multihilos, etc.), ya que el esfuerzo está
dedicado a incorporar estos avances en el código desarrollado para esas partes. Por otro
lado, esto es completamente invisible al código secuencial (el programador no necesita
saber que hay partes paralelas en su código). Incluso, se podría extender esta idea, para
que el usuario decida qué versión usar según la plataforma computacional que disponga
(por ejemplo, se dispondrían de varias versiones por rutina, una por cada plataforma
computacional).
68
Introducción a la Computación Paralela J. Aguilar, E. Leiss
C ó d ig o R e co d i- C o m p u t. E jecu ció n
F u e n te fic ar P a ra lela P a ralela
Para terminar esta parte, es importante recordar que un algoritmo eficiente para una
máquina paralela, puede tener muy malos rendimientos en otras máquinas paralelas.
Además, un código eficiente para un problema en una máquina paralela, puede ser muy
diferente al código eficiente para el mismo problema en otra máquina. En la sección 2.6
presentaremos una metodología para desarrollar programas paralelos.
- Tener ideas que nos permitan resolver problemas diferentes por medios similares,
- Permitir desarrollar herramientas de diseño que ayuden a los programadores.
69
Introducción a la Computación Paralela J. Aguilar, E. Leiss
n1 + … + n4
n3 + n4
n1 + n2
n1 n2 n3 n4
70
Introducción a la Computación Paralela J. Aguilar, E. Leiss
2.6.1 Generalidades
71
Introducción a la Computación Paralela J. Aguilar, E. Leiss
Ejemplo 2.4: Hacer un programa paralelo que se ejecutará en una máquina tipo malla
MIMD, el cual calcule la siguiente expresión:
( x + z) 3 − ( x + z) 2
f ( x , y, z) =
yz
Hacer en Paralelo
r1=x+y,
r2=x+z,
r3=yz
Hacer en Paralelo
r4=r1*r1*r1,
r5=r2*r2
r6=r4-r5
r7=sqrt(r6)
r8=r7/r3
Multi Divid
r3 r8
Suma r2 cuadrr5
72
Introducción a la Computación Paralela J. Aguilar, E. Leiss
1 4
Suma Suma Mult cubic
r1 r2 r3 r4
5 8
Cuad r5 Men r6 Raiz r7 Dividr8
9 12
Esta asignación está muy lejos de la ideal, ya que los procesadores deben ejecutar
operaciones adicionales de envío de datos. Una manera de evitar esto es que cada
programador explícitamente defina cual proceso será asignado a cada procesador. Esto,
por supuesto, no es posible en muchas aplicaciones, por lo que es más fácil que el usuario
defina los enlaces de comunicación que requiere. Esto daría:
73
Introducción a la Computación Paralela J. Aguilar, E. Leiss
Multi Divid
T2 T4 T4 T4
T9
E1 Suma cubic Meno Raiz
T8
T3 T1 T7 s T6
Suma cuadr
T5 T6
2.6.2 Metodología
El diseño de programas paralelos no es fácil y requiere de una gran creatividad, así que el
conjunto de pasos que daremos a continuación sólo debe ser entendido como una guía
para maximizar la definición de eficientes programas paralelos [1, 3, 4, 5, 9, 10, 11, 12,
14, 15, 16, 27, 30, 32, 33, 35, 36, 37, 40]. El algoritmo paralelo final puede ser muy
diferente a su versión secuencial, si es que existe.
74
Introducción a la Computación Paralela J. Aguilar, E. Leiss
descomposición
Parte en Agrupamiento
Desarrollo retrazo
Communicación
retrazo
Integración,
considerac.
del Hardw., Asignación Tiempo
etc.
Corazón del
Sistema que
será paraleliz.
La flexibilidad de esta metodología radica en que se permite que las tareas puedan ser
creadas o eliminadas dinámicamente, para diferentes tipos de plataformas
computacionales. Las cuatros fases, a pesar de que parecieran secuenciales, son
realizadas permanentemente, según la metodología espiral, con diferentes niveles de
agregación y sobre diferentes componentes, por lo que se va haciendo en forma
incremental. En las primeras fases de la metodología espiral, los pasos de
descomposición y comunicación son los más relevantes, mientras que en las últimas fases
de dicha metodología los pasos más relevantes son agrupamiento y asignación.
Un aspecto genérico a considerar tiene que ver con el diseño lógico (ver figura 2.17).
El diseño lógico captura el paralelismo máximo que existe en un algoritmo dado. Su
mapeo a una plataforma especifica puede reducir ese paralelismo máximo (además,
puede ser muy complicado).
Programa
Diseño Lógico (con Paralelo
toda la comunica-
ción.)
Mapeamiento
Plataforma
Topología Paralela
física
75
Introducción a la Computación Paralela J. Aguilar, E. Leiss
2.6.2.2 Descomposición
76
Introducción a la Computación Paralela J. Aguilar, E. Leiss
Por otro lado, normalmente es preferible tener mucho más tareas que procesadores,
tal que se pueda esconder la latencia. La latencia es el tiempo de comunicación entre los
diferentes componentes de la arquitectura (procesadores, memoria, etc.), derivado de la
ejecución de la aplicación (bloqueos en las tareas, acceso concurrente a la memoria, etc.).
Al usar la multiprogramación, para mantener ocupados a los procesadores mientras otras
tareas esperan, estaremos escondiendo la latencia.
77
Introducción a la Computación Paralela J. Aguilar, E. Leiss
B 11 C11 B 1m C 1m
A x = . . . A x =
B n1 C B nm C
n1 nm
Columna m
Columna 1
78
Introducción a la Computación Paralela J. Aguilar, E. Leiss
F(x)
Figura 2.20. Descomposición Funcional para el Problema del Cálculo del Integral
A n álisis
L é x ico
A n álisis
S in tác tico A n álisis
S em án tico G e n er ac.
C ó d ig o O p tim izar
In term . C ó d ig o G e n er ac.
C ó d ig o
79
Introducción a la Computación Paralela J. Aguilar, E. Leiss
p o ca
c arg a
f(x )
a b
m u ch a
ca rg a
Detalles como que la mejor descomposición en una fase es de una forma y en la otra es
diferente, son factibles de considerar, lo que puede conllevar a la necesidad de adaptar los
datos, para poder ser usados en ambas fases (amoldar las estructuras de datos de cada
fase, lo que implica añadir una fase explícita de reestructuración de datos, etc.).
80
Introducción a la Computación Paralela J. Aguilar, E. Leiss
2.6.2.3 Comunicación
Las tareas que se van definiendo, son diseñadas para que en su mayoría puedan ser
ejecutadas concurrentemente, pero muchas veces eso no es posible, ya que no pueden
ejecutarse independientemente. Los cálculos a realizar en una tarea, pueden requerir
datos de otras tareas, lo que implica que se deben transferir esos datos entre las tareas.
Definir la estructura comunicacional de la aplicación es clave en el futuro desempeño de
una aplicación. El diseño de la estructura comunicacional se puede descomponer en dos
fases: en la primera se definen los enlaces entre las tareas. Después, se especifican los
mensajes a intercambiarse entre ellos.
2.6.2.4 Agrupamiento
81
Introducción a la Computación Paralela J. Aguilar, E. Leiss
datos y/o cálculos. La reducción de tareas puede llevar consigo el objetivo de que exista
una tarea por procesador, dependiendo del tipo de plataforma computacional que se
tenga. Los procesos de agrupamiento y replicación deben considerar:
x3 ∑ 23 ∑ 13
3 2 1 0
82
Introducción a la Computación Paralela J. Aguilar, E. Leiss
0 1 2 3
P1 P2 P3
83
Introducción a la Computación Paralela J. Aguilar, E. Leiss
2.6.2.5 Asignación
En este paso se especifica donde será ejecutada cada tarea. Las tareas son asignadas a los
procesadores de manera de maximizar la utilización de los procesadores y minimizar los
costos comunicacionales. Este problema no existe en sistemas uniprocesadores o
computadores a memoria compartida y/o distribuida con automática planificación de
tareas. En el último caso, el sistema operativo es el que realiza la distribución de las
tareas. En general, este es un problema difícil y su objetivo es minimizar el tiempo total
de ejecución de la aplicación a través de dos ideas:
84