Volver a Blog Aprendizaje

Mi Experiencia Aprendiendo Programación Paralela

2 min read vistas 1 leyendo ahora
Índice del artículo

El desafío: hacer que las imágenes se fundan

Todo empezó con una consigna que parecía simple: tomar dos imágenes y hacer un cross-fading — que una se desvanezca mientras la otra aparece — pero utilizando programación paralela para procesar los píxeles de forma simultánea.

Lo que no sabía era que este ejercicio iba a abrirme la puerta a todo un mundo nuevo de conceptos: descomposición de problemas, balanceo de carga, comunicación entre procesos, y las diferencias fundamentales entre memoria compartida y memoria distribuida.


¿Qué es el cross-fading de imágenes?

El cross-fading (o fundido encadenado) es una transición visual donde una imagen se desvanece gradualmente mientras otra aparece. Matemáticamente, cada píxel de salida es una combinación lineal de los píxeles de entrada:

pixel_salida = pixel_imagenA * (1 - alpha) + pixel_imagenB * alpha

Donde alpha va de 0 a 1 a lo largo de la transición.

El truco está en que cada píxel es independiente del resto, lo que lo convierte en un candidato perfecto para paralelizar: podemos dividir la imagen en fragmentos y procesarlos simultáneamente.


Herramientas que usé

MPI (Message Passing Interface)

MPI es un estándar para comunicación entre procesos en sistemas de memoria distribuida. Básicamente, cada proceso tiene su propia memoria y se comunican enviándose mensajes entre sí.

Lo que aprendí con MPI:

  • Comunicación punto a puntoMPI_Send y MPI_Recv para intercambiar datos entre procesos específicos
  • Comunicación colectivaMPI_Scatter para distribuir datos, MPI_Gather para recolectar resultados
  • SincronizaciónMPI_Barrier para coordinar fases del cómputo

OpenMP (Open Multi-Processing)

OpenMP es una API para programación paralela en sistemas de memoria compartida (múltiples hilos dentro de un mismo proceso).

Lo que aprendí con OpenMP:

  • Directivas de paralelización#pragma omp parallel for para paralelizar loops automáticamente
  • Secciones críticas#pragma omp critical para proteger secciones de código que no deben ejecutarse concurrentemente
  • Reducciones#pragma omp parallel for reduction(+:suma) para operaciones de acumulación paralela

El artículo continúa explorando las diferencias entre ambos paradigmas, sus ventajas y desventajas, y cómo aplicarlos a problemas reales de procesamiento de imágenes y algoritmos de ordenamiento.

Últimos artículos

... tip: teclea algo secreto (una pista... CAMILO)