Método de Foster (PCAM)
Ian Foster (Designing and Building Parallel Programs, 1995). Dos abstracciones:
- Task = programa + memoria local + puertos de entrada/salida.
- Channel = cola de mensajes que conecta la salida de un task con la entrada de otro: define la dependencia.
Los 4 pasos
Sección titulada «Los 4 pasos»- Particionar — dividir datos y tareas en muchas primitive tasks.
- Descomposición del dominio: divide la data (la más grande / más accedida) y luego asigna tareas.
- Descomposición funcional: divide la tarea y luego decide qué data usa cada pieza.
- Reglas: #tareas ≥ un orden de magnitud mayor que #procesos; tareas de tamaño parecido; #tareas crece con .
- Comunicar — definir canales (es overhead: no existe en la versión secuencial). Local (pocos vecinos) o global. Buscar comunicación balanceada y concurrente.
- Aglomerar — agrupar tareas para bajar overhead (las que se comunican mucho, las que no pueden ser concurrentes, pares envío/recibo) y garantizar escalabilidad.
- Mapear — asignar tareas a procesos: maximizar utilización y minimizar comunicación. Balanceo estático (distribución fija) o dinámico (número variable de tareas por proceso).
Foster paso a paso: P → C → A → M
Compara aglomerar por franjas de filas vs bloques 2D: mismo cómputo, distinta comunicación.
Ejemplo resuelto: suma de números
Sección titulada «Ejemplo resuelto: suma de n=1012n=10^{12}n=1012 números»Datos: una suma = s; envío/recibo s/Byte; cada proceso puede sumar a lo más números.
- P: suma de a pares → tareas primitivas.
- C: canales (topología lineal).
- A: números por tarea → canales.
- M: cada proceso suma números → canales.
Misma P/C/A/M en cantidad final, pero topología de árbol binario: el camino crítico tiene saltos en vez de .
Conclusión: el mapeo final no cambia, pero la topología sí afecta el tiempo; aquí la diferencia es mínima porque el problema es compute bound (domina el término de cómputo s).
Ejercicio (PD01 2026-II, Ej. 1): suavizado
Sección titulada «Ejercicio (PD01 2026-II, Ej. 1): suavizado»Aplique Foster al suavizado de un array de píxeles con iteraciones:
. Cada proceso puede manejar a lo más 4 MB; cada píxel es un float. (1.1) Pasos de Foster. (1.2) Fronteras del dominio y de subdominios. (1.3) , con s/op y s/Byte.
Antes de ver la solución, mira el algoritmo funcionando: cada iteración intercambia los bordes entre vecinos (halo) y luego calcula localmente.
Suavizado 1D con intercambio de halo (PD01)
· cada iteración: ① intercambio de celdas fantasma entre vecinos → ② cómputo local.
El halo es O(1) por proceso (2 floats) mientras el cómputo es O(n/p): la razón comunicación/cómputo baja al crecer n/p.
Ver solución (1.1 Foster)
- Partición: descomposición de dominio; tarea primitiva = un valor ⇒ malla (cada fila depende de la anterior).
- Comunicación: cada necesita 3 valores de : patrón local tipo stencil 1D, sin comunicación global.
- Aglomeración: bloques contiguos de píxeles por proceso; solo se comunican los bordes (halo). Límite de memoria: píxeles.
- Mapeo: procesos en topología lineal: solo habla con y .
Ver solución (1.2 fronteras)
- Frontera del dominio (, ): celda fantasma replicada (, ) o promedio de solo 2 valores.
- Frontera de subdominios: intercambio de halo en cada iteración: enviar el píxel de borde al vecino y recibir el suyo en una celda auxiliar. Los procesos extremos solo intercambian con un lado.
Ver solución (1.3 T_s, T_p y métricas)
3 operaciones por píxel (2 sumas + 1 división):
(cada proceso intercambia 1 float = 4 B con 2 vecinos por iteración). Métricas derivadas:
Isoeficiencia: — lineal, muy escalable. Ejemplo , , : s, s, , .
Autoevaluación
0/4 correctas · 0 respondidasFuente ·estudio/01_Flynn_Foster.md §2–5 · PD01-Ejercicio1-Resolucion.md · CS4052-PD01-S02.pdf · U1.2-Fundamentos-Foster_Flynn-apuntes.pdf