Breve introducción computación paralela

Paradigmas de paralelización

Miguel Ponce de Leon miguel.ponce@bsc.es

2026-05-05

¿Por qué computación paralela?

Muchos problemas científicos requieren:

  • ejecutar modelos muchas veces
  • explorar grandes espacios de parámetros
  • procesar grandes volúmenes de datos

Ejemplo:

Simular una epidemia para 1000 combinaciones de parámetros

Computación secuencial vs paralela

Secuencial

  • una tarea cada vez

Paralela

  • múltiples tareas al mismo tiempo

objetivo: reducir el tiempo total de ejecución

Computacion Secuencial


Computacion Paralela


Idea clave

Dividir un problema grande en tareas más pequeñas (HPC):

  • independientes
  • ejecutables simultáneamente

Repetir mcuchas tareas (HTC):

  • evaluar difereentes sets de parametros
  • ejecutables simultáneamente

divide and conquer

Paradigmas de paralelización


Tipo Memoria Escalabilidad Complejidad
Compartida común baja-media baja
Distribuida separada alta alta

Memoria compartida


  • múltiples procesos/threads
  • comparten la misma memoria
  • CPU multicore
  • Multiprocessing (python)

Ventaja:

  • fácil de programar

Limitación:

  • escalabilidad limitada a un solo ordenador

Memoria distribuida


  • múltiples nodos (máquinas)
  • cada uno con su propia memoria
  • comunicación explícita:
  • MPI (Message Passing Interface)

Ventaja:

  • alta escalabilidad

Limitación:

  • mayor complejidad

Problemas paralelizables


No todos los problemas se paralelizan igual.

Dependencias:

  • tareas independientes → fácil

  • tareas acopladas → difícil

  • Problemas paralelizables:

    • Muchas operaciones independientes
  • Problemas no paralelizables:

    • Dependencias fuertes entre pasos

Embarrassingly parallel


Problemas donde:

  • las tareas son completamente independientes
  • no requieren comunicación

❌ Problema difícil de paralelizar

Serie de Fibonacci (recursiva clásica)

\[ F(n) = F(n-1) + F(n-2) \]

Cada cálculo depende de los anteriores

  • No se puede avanzar sin conocer resultados previos
  • Fuerte dependencia secuencial
  • No es posible paralelizar

Ejemplos de paralelización (I)

Problema fácilmente paralelizable

Multiplicación de matrices

Dadas dos matrices (A) y (B), cada elemento de la matriz resultado (C) se calcula como:

\[ C_{ij} = \sum_k A_{ik} B_{kj} \]

Cada elemento (C_{ij}) se puede calcular de forma independiente

  • Se pueden asignar diferentes elementos a distintos procesadores
  • Muy eficiente en paralelo (GPU, HPC)

Ejemplos de paralelización (II)

Barrido de parámetros

Cada conjunto de parámetros \(p_i\) se peude evaluar de forma independiente

  • Se pueden asignar distintas simulaciones a distintos procesadores

caso ideal para paralelización

En este curso


Ya hemos visto:

  • simulaciones de epidemias
  • exploración de parámetros

Ejemplo:

for beta in betas:
    simular(beta)

Problema


Queremos explorar muchos parámetros:

  • beta
  • movilidad
  • condiciones iniciales

el coste computacional crece rápidamente

Solución


Ejecutar simulaciones en paralelo:

  • cada simulación es independiente
  • podemos distribuirlas

problema “embarrassingly parallel”

Próximo paso


Vamos a:

  • ejecutar múltiples simulaciones
  • en paralelo
  • explorar parámetros