Está en la página 1de 23

Introducción modelos y clasificación

¿Por qué necesitamos computación paralela?

Antes se hablaba de miles de transistores, pero ahora son miles de millones. Se


cree que siempre a mayor cantidad de transistores mayor velocidad.
Pero debido a las limitantes físicas ya no se pudo incrementar la cantidad, ya que
existe mayor consumo energético y mayor disipación de calor. Debido a esta
pared que impedía agregar más transistores a un Sistema Uniprocesador la
solución fue implementar Sistemas Multiprocesador.

Razones por las que se cambio a Multiprocesador son:


• Performance/Speedup
• Throughput *

*Throughput: Es una unidad de medida que nos indica la cantidad de trabajoj que
nuestro sistema puede hacer en una unidad de tiempo.
En la actualidad toda computadora moderna es paralela -Pacheco

Aplicaciones modernas de la computación paralela


• Climate modeling
• Protein Folding
• Drug Discovery
• Energy Research
• Data análisis

Todas estas implementaciones tienen una limitante la cual es la ley Amdahl la


cual dice: Agregar más procesadores a mi sistema no incrementa
(necesariamente) el rendimiento de nuestros programas

Los programas 100% paralelos no existe ya que estos son ideales


¿Cómo escribo programas paralelos?
Paralelismo de tareas:
Operaciones distintas sobre un mismo conjunto de datos

Paralelismo de datos:
Consiste en tener un único conjunto de datos el cual dividiremos en subconjuntos
a los cuales a todos se les aplicara la misma operación

Opciones para escribir programas paralelos


1. Escribir programas de paralelismo expícito
Ventajas:
o Control absoluto
Desventajas
o Poca flexibilidad
o Conocimiento profundo del sistema
2. Utilizar lenguajes de alto nivel para “abstraer” las implementaciones
Ventajas:
o Flexibilidad

Desventajas:
o Sacrificio de performance

Clasificación de sistemas paralelos


1. Tipos de memoria
2. Independencia de procesamiento

1.Tipo de memoria:
a. Sistemas de memoria compartida
b. Sistemas de memoria distribuida

2.Independencia de procesamiento:
a. MIMD (Multiple Instruction Multiple Data)
- Sistemas convencionales
- Cada core tiene un “control unit” que maneja si propia stream de
instrucciones y de datos a procesar

b. SIMD (Single Instruction Multiple Data)


- Hay un core que manda la misma instrucción a distintos cores pero cada
core tiene su propio sistema de datos

Concurrente Paralelo Distribuido

Tipos de computación
Computación concurrente: se refiere a un programa en donde podemos tener
varias tareas que están “en progreso” aunque no necesariamente al mismo tiempo
Computación paralela: Se refiere a un programa en el que se ejecutan varias
tareas para resolver un mismo problema y se ejecutan al mismo tiempo.

Computación distribuida: Se refiere a un programa que ejecuta tareas para


resolver un mismo problema pero que se ejecuta en conjunto con otros programas

Arquitectura Von Neumann


1. Main memory / Memoria principal
2. Central Processing Unit (CPU/Processor/Core)
3. Sistema de interconexión (memoria y CPU)

CPU
1. Control Unit (Siguiente instrucción a ejecutar)
2. Datapath (ejecutar la instrucción como tal)
Pros Contras
Simplicidad del Restructura de
diseño instrucciones
Igual forma de Procesamiento
recuperar datos o secuencial (PC)
instrucciones

Modificaciones a Von Neuman


1. Arquitectura Harvard / Hardvard Neuman
2. Implementación de cache
3. Memoria Virtual
4. Paralelismo de hardware

Arquitectura de hardvard

Implementación de caché
Jerarquía de memorias para almacenamiento temporal
“Localidad”
• Espacial →Datos continuos
• Temporal → Datos con mayor probabilidad de ser requeridos nuevamente
Memoria virtual
Mapeo de memoria primaria a memoria secundaria
- Este tipo de memoria es aprovechado en caso en donde los programas
requieren grandes cantidades de memoria
- Aprovecha el uso y mapeo de páginas
- Aliviar la fragmentación de memoria
Paralelismo de hardware
Uso de múltiples recursos y estrategias para procesamiento paralelo, pero a nivel
de hardware (Multithreading)

Niveles de Paralelismo
- Paralelismo de aplicaciones (más control/ más responsabilidad a nivel de
usuario)
o Paralelismo de datos (DLP)
o Paralelismo de tareas (TLP)

- Paralelismo de dispositivos Las functional units de un procesador son


componentes del procesador que se encargan de realizar distintas tareas
(Input unit, Central Processing unit, memory unit, output unit)
o Instruction level (ILP)

Existen 2 tipos de acercamientos de Instruction level:


1. Pipelining: ordenamos las functional units en un pipeline
2. Multiple Issue: La idea es ejecutar 2 instrucciones al mismo
tiempo, realizar por lo menos 2 instrucciones por ciclo de reloj
*depende de la capacidad de procesamiento
a. Calendarización en tiempo de compilación = Static
Multiple Issue
b. Calendarización en tiempo de ejecución = Dynamic
Multiple Issue

o Acelerator Level Paralelism(ALP)

▪ Hacer uso o provecho de otras unidades de procesamiento


para paralelizar tareas (GPU, DSP (Digital Signal Processor),
IAP (Image Array Processors), NP (Neural Processor) )
o Thread Level Paralelism (ThLP)

o Request Level Paralelism (RLP)


▪ Paralelismo a nivel de solicitudes de procesamiento de las
aplicaciones se apoya del TLP (Task Level Paralelism)
- Paralelismo en múltiples niveles
o Procesador:
▪ Microarquitecturas
▪ Pipelines
▪ Multiple issue
▪ Predicción
▪ Especulación
o Multinucleos
▪ Multicore
▪ Distintas unidades de procesamiento
o Clusters
▪ Equipos multinúcleos
▪ Equipos científicos
▪ Equipos empresariales
o GPU’s
▪ Sistemas heterogéneos

Tipos de Sistemas Paralelos


- Sistemas de memoria compartida
- Sistemas paralelos de memoria distribuida
- Sistemas paralelos con aceleradores
Taxonomía de Flynn 1966 Michael Flynn

Simples Multiples
Simples SISD SIMD

1 flujo de instrucciones 1 Flujo de instrucciones


1 flujo de datos Múltiple flujo de datos

Sistemas uniprocesador ILP, Aceleradores

Multiples MISD MIMD


Múltiple flujo de ins. Múltiple flujo de ins.
1 Flujo datos Múltiple flujo datos

Sin aplicaciones prácticas Clusters, Warehouse

Extensión de Johnson a la Taxonomía Flynn


Shared Variables Message Passing
Global Memory
GMSV GMMP (rarely used)

Distributed Memory
DMSV DMMP

Modelos de computación secuencial paralela

Aspectos:
- Conexión entre procesadores (directa o indirecta)
- Memoria entre procesadores (Compartida o privada)
- Sincronización de reloj (un mismo reloj o relojes independientes)
- Distintos tiempos de acceso a memoria (distintos clock rates)
Modelo de computación secuencial
o RAM (Random Acces Machine)

Una única unidad de procesamiento

Tiene 2 partes principales

1. Memoria “M” (Instrucciones y datos)


2. Unidad de Procesamiento “P” (ejecuta instrucciones sobre la data)

Modelo de computación Paralela


3 modelos:
1. PRAM (Parallel Random Acces Machine)
2. LLM (Local Memory Machine)
3. MMM (Modular Memory Machine)

PRAM
- P unidades de procesamiento p > 2
- Una misma memoria compartida
Algunos de los problemas son:
- Race conditions acceso simultaneo a L
- Secuenciación ( HW serializa el acceso a L )
- Indeterminismo (No existe un orden garantizado)
Variantes de PRAM
- Exclusive Read Exclusive Write (EREW)
o Modelo o variante más realista

- Concurrent Read Exclusive Write (CREW)

- Concurrent Read Concurrent Write (CRCW)

o Consistent CRCW PRAM (Cualquier unidad de procesamiento puede


escribir pero asume que todas escriben el mismo valor)

o Arbitrary CRCW PRAM (Cualquier unidad de procesamiento puede


escribir pero se asume que no necesariamente escriben el mismo
valor / caso base)
o Priority CRCW PRAM (Cualquier unidad de procesamiento trata de
escribir pero al intentar escribir al mismo tiempo el que tenga mauor
prioridad)

o Fusion CRCW PRAM (Cualquier unidad de procesamiento puede


tratar de escribir pero se asume que se aplica una misma operación
a todos los valores antes de ser escritos incluyendo lo que ya estaba
escrito. Limitado a sumas, productos, mínimos, maximos)

Modelos de Memoria para Sistemas paralelos


- Memoria Compartida (SMM – Shared Memory Machine)
Nuestras UP comparten la misma memoria a nivel físico y lógico
Ventajas:
o Uso de variables compartidas es “fácil” coordinación
implícita del OS
o No es necesario replicar datos
o Útil en sistemas pequeños
Desventajas:
o Propenso a race conditions
o No es muy escalable
o Depende de una red de interconexión rápida
Variantes:
1. Memoria compartida de acceso uniforme (UMA)
o Tiempo de acceso uniforme
o Poco escalable
o Fácil de implementar
o Cantidad de memoria limitada
o Usualmente en sistemas con “pocos” procesadores
o Único memory controller
2. Memoria compartida de acceso no unifore (NUMA)
o Tiempo de acceso no uniforme
o Performance mejorado
o Escalable
o Costoso
o Acceso a más cantidades de memoria
o Especial en sistemas con más de 64 procesadores
o Múltiples memory controller

- Memoria Distribuida (DMM)


o Unidades de procesamiento y memoria independientes
o Clusters, grids, warehouse
o Requiere una red de interconexión más compleja

(Direct – Memory – Acces)


Componente para desacoplar comunicación del procesador
o Redundancia (copia total o parcial)
o Distribución
o Coordinación de acceso a datos se da a través de paso de
mensajes
Ventajas
o Útil en sistemas medianos/grandes
o Escalables
o Asíncronao e independiente
Desventajas
o Coordinación explícita
o Mayor complejidad
Redes de Interconexión
Impacto directo → eficiencia y escalabilidad
Antes Después(ahora)
- Velocidad de cálculos - Tiempo de acceso a la red
(desempeño) (latencia)
- Volumen de cálculos - Volumen de datos en la red
(rendimiento) (rendimiento)

Factores que determinan el desempeño de nuestra red


- Topología: Como están organizando los nodos e interconexiones de nuestra
red
- Enrutamiento/ Routing: Como definimos la ruta para el tráfico de datos en
nuestra red
- Control de flujo: Como administramos la tasa de transformación de datos
entre nodos para prevenir congestión

Topologías y clasificación de redes de interconexión


Grafo “G” es una tupla de 2 conjuntos
- Nodos / vértices
- Conexiones / Aristas
G = { V, A }

Clasificación según su geometría:


Redes estáticas / directas
- Punto a punto
- Conexión entre todos los nodos
- Útil en sistemas con pocos nodos
Redes dinámicas / indirectas
- Su topología puede cambiar durante la ejecución
- Switches
- Son escalables

Características importantes de las topologías


- Grado de nodos (# conexiones por nodo)
- Regularidad (todos los nodos tienen el mismo grado)
- simetría (repartir equitativamente la carga de trabajo entre nodos)
- escalabilidad (capacidad de tolerar un incremento en la carga de trabajo)
- diversidad (distintas rutas entre nodos)
- diámetro (cantidad de saltos que hay que hacer entre nodos)

Características deseables
- diversidad alta (tolerancia a fallos)
- escalabilidad (crecimiento y adaptabilidad)
- diámetro pequeño (menor distancia que recorre un mensaje en la red)
- grado bajo (menos overhead en HW por nodo conectado)

Algunas de las topologías son


- Fully Connected
- Buses
- Crossbars
- Red Omega
- Anillo
- Grids/Mesh
- Toroide
- Hipercube

Leyes teoremas y desempeño en sistemas paralelos


Medidas de desempeño:
• Speedup / Performance
• Eficiencia
• Escalabilidad
Speedup:
¿Cómo cuantifico el beneficio de programar en paralelo?
Speedup es la mejora en el tiempo de ejecución secuencial vs tiempo de ejecución
en paralelo
𝑇𝑠𝑒𝑞
Speedup = 𝑇
𝑝𝑎𝑟
Eficiencia:
¿Cuánto estamos aprovechando las distintas unidades de procesamiento
disponible?
𝑆𝑝𝑒𝑒𝑑𝑢𝑝
Eficiencia = N son las UP
𝑁

Escalabilidad
Capacidad de nuestro sistema para adaptarse a problemas mayores o mpas
grandes de manera eficiente
A. Resolver problemas más grandes B. Incorporar más recursos (strong
(weak scaling) scaling)
𝑡𝑠𝑒𝑞 𝑡𝑠𝑒𝑞
weakScaling = 𝑡´ t´ problema n strongScaling = 𝑁∗ 𝑡
𝑝𝑎𝑟 𝑝𝑎𝑟
veces más grande

Consideraciones de las métricas de desempeño:


Tseq y Tpar no son absolutos. Existen factores externos
- Conocimiento del desarrollador
- Tipo de compilador
- Sistema operativo
- Mismo HW y mismo SW
- Tseq es la solución más rápida
o Promedios
o Varias ejecuciones
o Mejor algoritmo

Ley de Amdahl
Es una formula que permite calcular el potencial incremento de speedup que
obtendríamos al agregar más cores en una aplicación que tiene secciones
“seriales” y secciones paralelizables
P = paralelizable
S = UP
<
Teorema de Brent
Cota inferior Cota superior
Tiempo de ejecución de A es T1 En un algoritmo paralelo con tiempo de
Entonces con computación T y que realiza un total de
P = Procesadores M operaciones entonces puede ser
El tiempo de ejecución de A sería ejecutado en un sistema de p unidades
A = T1 / P de procesamiento en un tiempo de
nomás que T + (M-T) / P

Caso 1
Q procedadores
Q = 16
M = 100
T = 10

Caso 2
P = Procesadores
P=8
10 + (100 - 10) / 8 = 21.25 seg
Software Paralelo, Patrones de descomposición y patrones de
programación
PCAM (Método de Foster) -> Ian Foster 1995 :
Es un proceso o metodología de desempeño de software paralelo
1. Partitioning
2. Communication
3. Agglomeration
4. Mapping
Partitioning: Segmentar/partir los cálculos y o operaciones a realizar. La
granularidad depende de la aplicación
- Dividir el problema y los datos utilizados en pequeñas tareas
- Identificar que tareas se pueden paralelizar
- Dos tipos de partitioning
o Function Orientend
o Data Oriented
Communication:Identificar las dependencias, entre peticiones. Se genera una
matriz de dependencias
- Definir que tipo de mensajes se necesitan para ejecutar la secuencia de
tareas
- Determinar el volumen de datos a comunicar
- Puede resultar el grafo de dependencias

Agglomeration / Aggregation: Agrupar tareas buscando reducir dependencias y


comunicación
- Combinar las tareas encontradas en tareas más grandes

Mapping: Asignar conjuntos de tareas a UP


- Asignar tareas aglomeradas del paso 3 a procesos /threads
- Buscamos reducir comunicación entre procesos mapeando al mismo nodo
tares con dependencias.
- Buscamos dividir la carga entre los distintos nodos para un buen balance
Patrones de descomposición:
- Task Parallelism
- Divide and Conquer
- Geometric / Recursive Decomposision
- Pipeline Decomposision
- Event – Based Coordination

Task Parallelism
- Los programas secuenciales suelen poder estructurarse por módulos
- Se asignan nodos/UP a distintos módulos para realizarse de forma paralela

Divide and Conquer


Expresar algoritmos secuenciales como una combinación de tareas más pequeñas
- Divide: dividir el problema en pequeños subproblemas
- Conquer: resolver los subproblemas de forma recursiva
- Combine: Combinar resultados de subproblemas para obtener un resultaldo
general
Geometric / Recursive Decomposition
- Los algoritmos involucran el uso de conjuntos de datos
- Estos conjuntos suelen representarse en estructuras de datos
o Matrices, arreglos (geometricos)
o Arboles, grafos (recursivos)
Pipeline Decomposition
(procesamiento de videos, procesamiento de señales)
- Igual al concepto de pipeline hablado anteriormente
- Cada UP se dedica/especializa en una etapa
- Los datos a “trabajar” fluyen a través del pipeline
- Evitar momentos IDLE en las UP´s
Event-Based Coordination
- Cuando el flujo de datos no es regular
- No tenemos ciertos detallas de las tareas (frecuencia de duración)
- Especial para simular eventos (tráficos, comportamiento de partículas,
voltaje gaming)

Consideraciones:
- Dividir el trabajo entre threads o procesos
- Balancear la carga minimizar la comunicación (balanceo de ambas cosas)
- Garantizar la sincronización entre procesos o threads
- Las ejecuciones asíncronas introducen el no-determinismo
o Race Conditions
o Critical section problema
o Mutual Exclusion

Patrones de programación paralela


2 categorías
- GPLS Globally parallel locally sequential
o SPMD
o MPMD
o Master Worker
o Map – Reduce

GPLS: Programas capaces de ejecutar muchas tareas en paralelo, pero


localmente cada tarea se ejecuta secuencialmente. Tiende a ofrecer mayor
escalabilidad.

- GSLP Globally Sequencial Locally Parallel


Programa que se ejecutan secuencialmente pero existen secciones que
corren en paralelo cuando es necesario
o Fork – Join
o Loop Parallelism

GPLS
• SPMD (Single Program Multiple Data)
Mismo programa ejecutándose en nodos distintos pero sobre diferentes
datos
• MPMD (Eje: Cuda)
Se ejecuta en sistemas heterogéneos (distintos UP’s)
Requerimientos de memoria más estrictos
Config File – Mapero de programa a UP

• Master – Worker
2 roles
Worker:
o Encargado de ejecutar tareas. Pueden ser distintas tareas

Master:
o Entregar pedazos de trabajo a los workers
o Recolectar resultados de workers
o Realizar tareas de I/O
o Interacción con el usuario

• Map – Reduce
Es un derivado de master – worker. Se hizo famoso por Google
GSLP:
• Fork – Join
Es empleado cuando el algoritmo dicta la necesidad de la creación
dinámica de subtareas
Fork - La tarea es separada
Join – unir resultados

• Loop Parallelism: (OpenMP)


Consiste en herramientas que permiten que los programadores puedan
paralelizar loops de código secuencial

La aplicación es limitada
Ventaja que trae es reducir esfuerzo de desarrollo pero no tiene beneficio
en cuanto performance

También podría gustarte