Clase 07 OpenMP¶
¿Que es?
API: Application Programming Interface
Enfocada a sistemas multinucleo
Eficiente para paralelizar diferentes procesos
Es ampliamente configurable e incluye directivas para paralelización de tareas, iteradores, ciclos, entre otros
Nos permite controlar como iteramos
Sin embargo, en este curso sólo abordaremos los fundamentos
Paralelización
- Tareas faciles de parelelizar: Suma de vectores, operaciones independientes
- Tareas dificiles de pararelizar: Interoperables (producto punto)
- Multiplicación 1 a 1 w[i] = v[i]*u[i]
- Suma de los resultados \(\sum \limits_{i=0}^{n}w[i]\)
Acceso a la memoria Cache¶
Limitaciones
El acceso esta optimizado para operaciones secuenciales en memoria, el acceso aleatorio o salteado produce latencias
cache fault
Es cuando un core intenta actualizar la memoria cache utilizada por otro core
La solución es utilizar diferentes niveles L1 (que cada core una independiente) L2 y L3 que son compartidos
NUMA
SIstema multicore (un solo procesador multiples nucleos), cada procesador tiene su propia memoria cache
OpenMP¶
Paralelización basada en hilos
- Deben instalar openmp / libopenmp
- Vamos a utilizar unos bloques para indicar que queremos para parelizar
#pragma omp <instrucciones>
{
}
g++ -o prog archivo.cpp -fopenmp
Gestión variables
- Privada: Para cada hilo
- COmpartida: Compartida entre todos los hilos
Scheduling
Gestión de hilos
- Static: lanza los hilos en bloques de tamaño fijo
- Dynamic: Asigna bloques dinamicamente
- guided: Es lo mismo que dynamic pero los bloques mas pequeños
- auto: Lo selecciona el compilador o S.O
- runtime: Tiempo de ejecución
Evitar condiciones de carrera
Condición critical que fuerza a que una instrucción sea ejecuta por un sólo hilo