Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmo y Computación Paralela Segunda Parte
Algoritmo y Computación Paralela Segunda Parte
Tipos de paralelismo
28
Nota: este método está “estancado” desde el establecimiento de las arquitecturas
de 32 y 64 bits.
Pipelining
29
En el gráfico anterior se observa el procesamiento de dos instrucciones sin pipeline,
tomando un tiempo de 8 ciclos, y con pipeline reduciendo este tiempo a solo 5 ciclos.
30
Patrones de diseño paralelo
Fork-Join
31
Map
Map es un patrón que replica una función sobre todos los elementos de un conjunto
de entrada. La función que está siendo replicada se llama función elemental, dada
que la misma se aplica a una coleccion real de datos.
Stencil
32
Reducción
Una reducción combina cada elemento de una colección en uno solo utilizado una
función asociativa conocida como función combinatoria. Como es asociativa las
tareas se pueden distribuir de muchas maneras y si la función resultara ser también
conmutativa el número de posibilidides aumentaría aún más.
Scan
33
ParBegin - ParEnd
Maestro / Esclavo
34
SPMD - SIMD
Esto viene de la taxonomia Flynn SPMD (Single Program, Multiple Data), múltiples
procesadores autónomos ejecutan simultáneamente el mismo programa en puntos
independientes, SIMD (Single instructon, multiple data) está basado en organizar los
datos relevantes al problema en estructuras de datos iterativas como arreglos y en
definir la computación en términos de una secuencia de actualizaciones paralelas en
paralelo con estas estructuras de datos.
Los hilos se distinguen de los tradicionales procesos en que los procesos son
generalmente independientes, llevan bastante información de estados, e interactúan
sólo a través de mecanismos de comunicación dados por el sistema. Por otra parte,
muchos hilos generalmente comparten otros recursos directamente. En muchos de
los sistemas operativos que proveen facilidades para los hilos, es más rápido
cambiar de un hilo a otro dentro del mismo proceso, que cambiar de un proceso a
otro.
Memoria compartida
35
Uniform Memory Access (UMA):
36
Memoria distribuida
37
órden de gigaflops. Estos generalmente están basados en una arquitectura
MIMD.
Grids: Computadores de múltiples dominios administrativos conectados para
solucionar una tarea determinada.
38
Hilos
Datos en paralelo
39
Sincronización
Sincronización Mínima:
40
Paralelismo y la concurrencia
2. Manejando concurrencia
Técnicas estáticas:
Técnicas dinámicas:
3. Determinación de la granularidad
41
4. Reducir la serialización
Sincronización de eventos:
Exclusión mutua:
Tipos de sincronización
Barrier
Lo que sucede a partir de aquí varía. Algunas veces, una sección del código debe
ser ejecutada en serie. En otros casos, las tareas se liberan automáticamente para
continuar su trabajo.
42
Lock - bloqueo / semaphore - semáforo
43
Balanceador de carga
44
Paralelismo automático versus Paralelismo manual
Paralelismo automático
Paralelismo manual
Tiempo de respuesta
45
MIPS - MFLOPS
Eficiencia
SpeedUp
46
Ley de Amdahl
47
El paradigma paralelo es implementado, en la mayoría de los lenguajes más
conocidos actualmente, a través de dichas herramientas o componentes. En la
imagen, se hace un recuento de herramientas específicas de algunos de esos
lenguajes, mencionando que no son las únicas que existen.
Del mismo modo, hay otras herramientas más aplicadas a un campo específico que
se sirven del paradigma paralelo para mejorar sus servicios, como por ejemplo
CUDA, el cual es una plataforma para trabajar con algoritmos de nVidia usando GPU.
También, se puede dar el ejemplo de Apache Spark, el cual es un framework para
realizar análisis de BigData. Cada uno de ellos tiene su propias APIs para poder
configurar comportamientos paralelos en los algoritmos que se quieran desarrollar.
Lenguajes de programación
48
Ejemplo de Programación Paralela en Java
Supermercado
@Override
public void run() {
49
System.out.println("La cajera " + this.nombre + " COMIENZA A
PROCESAR LA COMPRA DEL CLIENTE "
+ this.cliente.getNombre() + " EN EL
TIEMPO: "
+ (System.currentTimeMillis() -
this.initialTime) / 1000
+ "seg");
for (int i = 0; i < this.cliente.getCarroCompra().length; i++) {
this.esperarXsegundos(cliente.getCarroCompra()[i]);
System.out.println("Procesado el producto " + (i + 1)
+ " del cliente " + this.cliente.getNombre() + "->Tiempo: "
+ (System.currentTimeMillis() - this.initialTime) / 1000
+ "seg");
}
System.out.println("La cajera " + this.nombre + " HA TERMINADO
DE PROCESAR "
+ this.cliente.getNombre() + "
EN EL TIEMPO: "
+ (System.currentTimeMillis() -
this.initialTime) / 1000
+ "seg");
}
50
public static void main(String[] args) {
cajera1.start();
cajera2.start();
}
}
Supermercado
Se inicializan los dos hilos, luego se imprime en pantalla cada vez que se pasen los
productos en cada cajero.
Se puede observar como se realiza de forma paralela la compra en cada cajero.
51
Procesado el producto 2 del cliente Cliente 2->Tiempo: 4seg
Procesado el producto 2 del cliente Cliente 1->Tiempo: 4seg
Procesado el producto 3 del cliente Cliente 1->Tiempo: 5seg
Procesado el producto 3 del cliente Cliente 2->Tiempo: 9seg
Procesado el producto 4 del cliente Cliente 2->Tiempo: 10seg
Procesado el producto 4 del cliente Cliente 1->Tiempo: 10seg
Procesado el producto 5 del cliente Cliente 2->Tiempo: 11seg
La cajera Cajera 2 HA TERMINADO DE PROCESAR Cliente 2 EN EL TIEMPO:
11seg
Procesado el producto 5 del cliente Cliente 1->Tiempo: 12seg
Procesado el producto 6 del cliente Cliente 1->Tiempo: 15seg
La cajera Cajera 1 HA TERMINADO DE PROCESAR Cliente 1 EN EL TIEMPO:
15seg
52
Algunas Terminologías de la Computación Paralela
Utilizando las computadoras más grandes y rápidas del mundo para resolver
grandes problemas.
Nodo
Esto varía, dependiendo de con quién hable. En el pasado, una CPU (Unidad
Central de Procesamiento) era un componente de ejecución singular para una
computadora. Luego, se incorporaron varias CPU en un nodo. Luego, las CPU
individuales se subdividieron en múltiples "núcleos", cada uno siendo una unidad de
ejecución única. Las CPU con varios núcleos a veces se denominan "sockets",
según el proveedor. El resultado es un nodo con varias CPU, cada una de las cuales
contiene varios núcleos. La nomenclatura se confunde a veces. ¿Preguntarse por
qué?
Tarea
53
Canalización
Dividir una tarea en pasos realizados por diferentes unidades de procesador, con
entradas que fluyen, como una línea de ensamblaje; un tipo de computación
paralela.
Memoria compartida
Memoria distribuida
Comunicaciones
Las tareas paralelas normalmente necesitan intercambiar datos. Hay varias formas
en que esto se puede lograr, como a través de un bus de memoria compartida o en
una red, sin embargo, el evento real de intercambio de datos se conoce
comúnmente como comunicaciones, independientemente del método empleado.
54
Sincronización
Granularidad
Aceleración observada
Sobrecarga paralela
55
Hora de inicio de la tarea
Sincronizaciones
Transmisión de datos
Sobrecarga de software impuesta por lenguajes paralelos, bibliotecas,
sistema operativo, etc.
Hora de finalización de la tarea
Masivamente paralelo
Se refiere al hardware que comprende un sistema paralelo dado, que tiene muchos
elementos de procesamiento. El significado de "muchos" sigue aumentando, pero
actualmente, las computadoras paralelas más grandes están compuestas por
elementos de procesamiento que se cuentan entre cientos de miles y millones.
Vergonzosamente paralelo
Escalabilidad
Algoritmo de aplicación
Relacionado con gastos indirectos paralelos
Características de su aplicación específica.
56