Repaso U3.5 y PD03
Los «Ejemplos de repaso» (U3.5, 20-sep-2026) cubren: Foster · escalabilidad · PRAM · comunicación · Amdahl/Gustafson · MPI. Muy probablemente el parcial se parece a esto.
Ej. 1 — Modelo climático (Foster)
Sección titulada «Ej. 1 — Modelo climático (Foster)»Malla con , , . Cada celda se comunica con 8 vecinas horizontales y 2 verticales, y en cada paso se acumula la masa atmosférica (suma). (1.1) Pasos de Foster. (1.2) Optimice con procesos, considerando que las celdas de frontera no comunican en algunas direcciones.
Ver solución
1.1
- Particionamiento: una tarea por celda ⇒ tareas .
- Comunicación: cada tarea necesita 8 + 2 vecinas ⇒ canales, más la suma de la masa ().
- Aglomeración: tareas de celdas ⇒ canales reducidos a .
- Mapeo: una tarea de celdas por proceso (según capacidad de los procesadores).
1.2 Canales originales (descontando fronteras). Con : , unas 1000 veces menos.
Ej. 2 — Transformada de Fourier
Sección titulada «Ej. 2 — Transformada de Fourier», . (1) Granularidad. (2) , . (3) Escalabilidad. (4) Granularidad con constante.
Ver solución
- .
- , .
- Fuerte: , no escala. Débil: : dos condiciones, la dominante .
- Reemplazando esa condición en : porque .
Ej. 3 — Suma de prefijos (PRAM recursivo)
Sección titulada «Ej. 3 — Suma de prefijos (PRAM recursivo)»(a) y . (b) Paradigma. (c) ¿Es WT-óptimo ()?
Ver solución
(a) if ; los dos pardo en tiempo y , en trabajo; recursión ⇒ ; ⇒ . (b) Memoria compartida. (c) Sí: el secuencial es . Anímalo en casos PRAM.
Ej. 4 — Comunicación aleatoria
Sección titulada «Ej. 4 — Comunicación aleatoria»El maestro elige un rank al azar y le envía su nombre; ese proceso suma su rank al dato, elige otro rank al azar (no a sí mismo, ni al maestro, ni a uno que ya recibió) y reenvía. El último elegido no envía. . (a) PRAM con directivas de comunicación. (b) ¿MPI_ANY_SOURCE? (c) Complejidad de comunicación. (d) ¿Hace falta comunicación colectiva?
Ver solución
(a)
for i := 1 to p pardo M[i] := 0if (nproc < 3 or nproc > 50) abort()for i = 1 to p pardo if (i == 1) id_next := random entre 2 y p; M[i] += i; send M to id_next else if (M[i] == 0) receive M from any_source do id_next := random entre 2 y p while (M[id_next] != 0) M[i] += i; send M to id_next(b) Sí: la comunicación siempre es única entre un par de procesos. (c) Punto a punto con , repetido veces ⇒ . (d) Se podría usar un Bcast para informar quién ya envió, pero el PRAM se logra sin él.
Ej. 5 — Amdahl/Gustafson con 1000 procesos
Sección titulada «Ej. 5 — Amdahl/Gustafson con 1000 procesos»Resuelto en Amdahl y Gustafson.
Ej. 6 — Ping-pong · Ej. 8 — Latencia en anillo
Sección titulada «Ej. 6 — Ping-pong · Ej. 8 — Latencia en anillo»Simúlalos en Bloqueante vs no bloqueante. Para el Ej. 8: latencia = tiempo de un mensaje de tamaño 0; en la práctica se mide con mensajes de varios tamaños y se extrapola a tamaño 0 (ordenada al origen del ajuste tiempo vs tamaño), promediando varios experimentos. El caso no bloqueado evita la serialización del anillo.
Ej. 7 — Vectores
Sección titulada «Ej. 7 — Vectores», . (7.1) Paralelice con MPI bloqueado. (7.2) Complejidad. (7.3) , y escalabilidad.
Ver solución
Resolución propuesta (sin solución oficial).
// M divisible por size; cada proceso recibe M/size vectores (filas) de A y BMPI_Scatter(A, (M/size)*N, MPI_DOUBLE, Al, (M/size)*N, MPI_DOUBLE, 0, MPI_COMM_WORLD);MPI_Scatter(B, (M/size)*N, MPI_DOUBLE, Bl, (M/size)*N, MPI_DOUBLE, 0, MPI_COMM_WORLD);for (int j = 0; j < M/size; j++) { Cl[j] = 0; for (int i = 0; i < N; i++) Cl[j] += Al[j*N + i] * Bl[j*N + i];}MPI_Gather(Cl, M/size, MPI_DOUBLE, C, M/size, MPI_DOUBLE, 0, MPI_COMM_WORLD);. ; (2 scatters en árbol) (gather). Así : el término (mover los datos) es del mismo orden que el trabajo ⇒ si los datos se generan en P0, la comunicación domina. Optimización: que cada proceso genere o lea su parte (sin scatter) o solapar con Isend/Irecv; entonces y escala débil con .
PD03 — Ej. 1: servidores en anillo
Sección titulada «PD03 — Ej. 1: servidores en anillo»servidores en anillo, capacidad , tareas , saldo . Si y , se transfiere al siguiente. Mientras el envío está en curso se hace un cálculo local independiente; luego se recibe del anterior y se actualiza el saldo. (1.1) PRAM. (1.2) MPI optimizado. (1.3) Ventaja con un ejemplo numérico.
Ver solución
Resolución propuesta.
for 1 ≤ i ≤ p pardo S_i := C_i − T_i ; E_i := 0 if (S_i < 0 and S_{i+1} > 0) then E_i := min(−S_i, S_{i+1}) ; T_i := T_i − E_i Irecv(R_i ← P_{i−1}); Isend(E_i → P_{i+1}) // iniciar comunicación resolver localmente las T_i tareas que no se envían // cómputo solapado Wait(ambas) T_i := T_i + R_i ; S_i := C_i − T_iEn MPI: MPI_Irecv del vecino izquierdo antes del MPI_Isend al derecho, cómputo local y MPI_Waitall. Ventaja: con bloqueo, (y en anillo con Ssend puede incluso bloquearse o serializarse: pasos); sin bloqueo, . Ejemplo: ms, ms por proceso ⇒ bloqueado 7 ms; no bloqueado ≈5 ms (−29 %). En el anillo serializado con , la comunicación bloqueada puede costar ms frente a ≈2 ms.
Fuente ·U3.5 Ejercicios de repaso.pdf · practica_3_ofi/enunciado/CS4052-PD03-S02.pdf · practica_pc3/2026I-Ejercicio01_test.cpp