Ir al contenido

Práctica: matriz × vector

PD03, Ej. 2: x=A vx=A\,v con AA de N×NN\times N. P0 tiene AA y vv, reparte por bloques de filas o de columnas, envía vv y obtiene xx. W(N)=Θ(N2)W(N)=\Theta(N^2) en ambos: toda la diferencia de escalabilidad está en el overhead.

practica_3_ofi/ejercicio02_row.cpp (núcleo)
MPI_Bcast(v, N, MPI_LONG_LONG, 0, MPI_COMM_WORLD);
MPI_Scatter(A, elem_proc, MPI_INT, local_A, elem_proc, MPI_INT, 0, MPI_COMM_WORLD);
for (i = 0; i < fil_proc; i++) { // fil_proc = N / size
local_x[i] = 0;
for (j = 0; j < N; j++)
local_x[i] += local_A[i * N + j] * v[j];
}
MPI_Gather(local_x, fil_proc, MPI_LONG_LONG, x, fil_proc, MPI_LONG_LONG, 0, MPI_COMM_WORLD);

Matriz × vector: filas vs columnas vs bloques

A de N×N (aquí N=8) repartida entre p procesos. Color = proceso dueño de la celda.

AP0P0P1P1P2P2P3P3vBcastBcastBcastBcastBcastBcastBcastBcast
Fasefilas
Distribuir AMPI_Scatter de N/p filas contiguas
Distribuir vMPI_Bcast de v completo (N)
CómputoN/p productos punto de largo N
ResultadoMPI_Gather de N/p elementos de x
v[j] necesario por: todos

Modelo teórico del examen (arquetipo B)

Tpfilas=γn2p+αlog⁡p+βnTpbloques=γn2p+2αlog⁡p+βnpT_p^{filas}=\gamma\frac{n^2}{p}+\alpha\log p+\beta n\qquad T_p^{bloques}=\gamma\frac{n^2}{p}+2\alpha\log\sqrt p+\beta\frac{n}{\sqrt p}
Eficiencia teórica E(p)
00.20.40.60.811101001000pE
filasbloques
Granularidad G = T_comp / T_comm
0.1110101001000pG
filasbloques
Bloques: denominador de G más chico ⇒ mayor granularidad. Escalabilidad (oficial): filas n∝pn\propto p; bloques n∝plog⁡pn\propto\sqrt{p\log p} ⇒ bloques necesita menos crecimiento de n para mantener E: más escalable.

Datos medidos (practica_3_ofi, laptop, p = 1…10)

Filas (Bcast + Scatter/Gather)
00.20.40.60.81246810pE
N=240N=360N=480N=600
Columnas (Send + vector + Reduce)
00.20.40.60.81246810pE
N=240N=360N=480N=600
pfilas, N=5040 (s)columnas, N=5040 (s)
T_ejT_compT_commT_ejT_compT_comm
20.03740.01090.02650.1020.01170.0496
40.04960.01040.03910.1180.01340.0593
60.05680.009460.04710.1570.01140.0899
80.06540.008390.05680.1680.009680.092
100.07190.007440.06420.1740.00930.0964
E(p=10): filas 0.058 → 0.184 al pasar de N=240 a 600 (mejora con N); columnas 0.048 → 0.030 (no mejora). Con N fijo el tiempo total crece con p: el problema es communication-bound en este rango (T_comm ≫ T_comp).
EsquemaTo(N,p)T_o(N,p)IsoeficienciaE(p=10)E(p=10): N=240→600N=240\to600
FilasΘ(plog⁡p)\Theta(p\log p) (colectivas en árbol)N=Θ(plog⁡p)N=\Theta(\sqrt{p\log p})0.058→0.1840.058\to0.184 (mejora)
ColumnasΘ(p)+Θ(N2)\Theta(p)+\Theta(N^2) (bucle de Send en P0)no hay favorable0.048→0.0300.048\to0.030 (no mejora)

En columnas, P0 mueve Θ(N2)\Theta(N^2) datos él solo: una fracción serial al estilo Amdahl del mismo orden que el trabajo, que no se diluye al crecer NN. En filas, la fracción serial efectiva Θ(plog⁡p)Θ(N2)+Θ(plog⁡p)→0\frac{\Theta(p\log p)}{\Theta(N^2)+\Theta(p\log p)}\to0 (estilo Gustafson).

Ejercicio (PD02 2025-II, Ej. 2 — arquetipo B)

Sección titulada «Ejercicio (PD02 2025-II, Ej. 2 — arquetipo B)»

Tpfilas=γn2p+αlog⁡p+βnT_p^{filas}=\gamma\frac{n^2}{p}+\alpha\log p+\beta n y Tpbloques=γn2p+2αlog⁡p+βnpT_p^{bloques}=\gamma\frac{n^2}{p}+2\alpha\log\sqrt p+\beta\frac{n}{\sqrt p}. (a) ¿Cuál tiene mayor granularidad? (b) Condición de escalabilidad. (c) ¿Cuál es más escalable?

Ver solución

(a) Gfilas=n2p(n+log⁡p)G_{filas}=\dfrac{n^2}{p(n+\log p)},   Gbloques=n2p(np+2log⁡p)\;G_{bloques}=\dfrac{n^2}{p\left(\frac{n}{\sqrt p}+2\log\sqrt p\right)}. Bloques tiene el denominador más chico ⇒ mayor granularidad ⇒ menor overhead de comunicación.

(b) Filas: n∝pn\propto p. Bloques: n∝plog⁡pn\propto\sqrt{p\log p}.

(c) Bloques es más escalable. Solución oficial: con filas, al duplicar nn se obtiene p2=2p1p_2=2p_1; con bloques se obtiene otra relación, «lo que lo hace más escalable, ya que cuando nn crece se requieren menos procesos para mantener la eficiencia constante». Dicho de otra forma: para un mismo pp, bloques necesita un nn mucho menor (plog⁡p≪p\sqrt{p\log p}\ll p) para sostener la misma eficiencia.

Autoevaluación

0/4 correctas · 0 respondidas
1. En la partición por filas, ¿qué recibe cada proceso de vv?
2. En columnas, el resultado se combina con…
3. Según los datos medidos, al pasar de N=240 a N=600 con p=10, la eficiencia en filas…
4. ¿Por qué columnas no mejora con NN?

Fuente ·practica_3_ofi/ejercicio02_row.cpp · practica_3_ofi/ejercicio02_col.cpp · practica_3_ofi/executed/eficiencia_resultados.csv · resultados_5040.csv · executed/analisis_escalabilidad.md · executed/informe_2_3.md · previos/2025-II PD02 S01/S02 (Ej. 2)