El documento introduce los algoritmos multihilo y diferentes modelos de computación paralela. Explica que los algoritmos actuales son multihilo ya que la mayoría de dispositivos son multiprocesador. Describe las palabras clave "spawn", "sync" y "parallel" que permiten la programación multihilo dinámica. Como ejemplo, presenta un algoritmo multihilo para calcular los números de Fibonacci de manera concurrente usando spawn y sync.
2. Algoritmos Multihilo
• Hasta ahora los algoritmos que hemos visto
son seriales ya que se ejecutan en modelo
RAM (un solo procesador)
• Necesitamos extender modelo RAM para
describir algoritmos que se ejecutan en
paralelo
• La mayor parte de los dispositivos de cómputo
actuales son multiprocesador
3. Modelos PRAM
• Hay varios tipos de modelos de computadoras
que funcionan en paralelo
• Uno de los principales aspectos en que
difieren es en como se intercambian mensajes
• Existen modelos de memoria compartida y los
de memoria distribuida
• Los computadores actuales son de memoria
compartida
4. Programación Multihilo Dinámica
• Generalmente nos basamos en una
plataforma de concurrencia (capa de
software)
• El lenguaje de programación (o una
librería) nos provee extensiones simples
en la forma de instrucciones de
concurrencia parallel, spawn, and sync.
5. Spawn
• Spawn: Si spawn precede a una llamada a función, el
procedimiento que ejecuta la llamada (el padre)
sigue ejecutándose en paralelo con la subrutina
creada (el hijo), en vez de esperar a que el hijo
termine.
6. Spawn
• Spawn significa que pude ejecutarse en
paralelo, no que es obligatorio
• En tiempo de ejecución, el scheduler decide
que instrucciones se ejecutan de manera
concurrente.
7. Sync
• La palabra reservada sync indica que un
procedimiento debe esperar hasta que
todos sus hijos creados completen sus
tareas.
8. Parallel
• Muchos algoritmos contienen lazos.
• Si se utiliza la palabra reservada parallel antes de un lazo form, esto
indica que el cuerpo del lazo puede ser ejecutado en paralelo.
9. Cálculo de los Números Fibonacci
Multihilo
• Los números Fibonacci son generados por la siguiente definición:
F0 = 0
F1 = 1
para i > 1, Fi = Fi-1 + Fi-2
12. Fibonacci Multihilo
• Si lo queremos hacer multihilo este sería el algoritmo:
algorithms. Observe that within FIB.n/, the two recursive calls i
FIB.n 1/ and FIB.n 2/, respectively, are independent of each
be called in either order, and the computation performed by one
the other. Therefore, the two recursive calls can run in parallel.
We augment our pseudocode to indicate parallelism by adding
keywords spawn and sync. Here is how we can rewrite the FIB
dynamic multithreading:
P-FIB.n/
1 if n 1
2 return n
3 else x D spawn P-FIB.n 1/
4 y D P-FIB.n 2/
5 sync
6 return x C y
Notice that if we delete the concurrency keywords spawn and s
the resulting pseudocode text is identical to FIB (other than renam
in the header and in the two recursive calls). We define the serial
tithreaded algorithm to be the serial algorithm that results from d
13. DAG del Algoritmo
• La ejecución multihilo puede comprenderse
mejor con un grafo acícliclo dirigido (DAG)
G=(V,E).
• Los vértices V en el gráfico son las instrucciones.
• Los enlaces E representan la dependencia entre
las instrucciones.
• Si un enlace (u,v) está en E significa que la
instrucción u debe ejecutarse antes de la
instrucción v.
15. Strands
algorithms. Observe that within FIB.n/, the two recursive calls i
FIB.n 1/ and FIB.n 2/, respectively, are independent of each
be called in either order, and the computation performed by one
the other. Therefore, the two recursive calls can run in parallel.
We augment our pseudocode to indicate parallelism by adding
keywords spawn and sync. Here is how we can rewrite the FIB
dynamic multithreading:
P-FIB.n/
1 if n 1
2 return n
3 else x D spawn P-FIB.n 1/
4 y D P-FIB.n 2/
5 sync
6 return x C y
Notice that if we delete the concurrency keywords spawn and s
the resulting pseudocode text is identical to FIB (other than renam
in the header and in the two recursive calls). We define the serial
tithreaded algorithm to be the serial algorithm that results from d