Ir al contenido

N-Body, Divide y Vencerás, Mergesort y matrices

Fi=−Gmi∑j≠imj rij∣rij∣3vt+1=vt+FΔtmxt+1=xt+vΔtF_i=-Gm_i\sum_{j\ne i}\frac{m_j\,r_{ij}}{|r_{ij}|^3}\qquad v_{t+1}=v_t+\frac{F\Delta t}{m}\qquad x_{t+1}=x_t+v\Delta t
  • N(N−1)/2N(N-1)/2 pares ⇒ O(N2)O(N^2) por paso. Sin solución analítica desde N=3N=3. La integración por intervalos es aproximada (se mejora con leap-frog).
  • Paralelo directo: cada proceso un subgrupo de cuerpos ⇒ O ⁣(n(n−1)p)O\!\left(\frac{n(n-1)}{p}\right).
  • Barnes-Hut: un cluster lejano se aproxima como un solo cuerpo (quadtree/octree) ⇒ O(nlog⁡n/p)O(n\log n/p).
  • Compartida (OpenMP/CUDA): sin comunicación, limitada por los núcleos de un nodo. Distribuida (MPI): paga comunicación pero escala el cluster.
  • Ttotal=Tcoˊmputo↓+Tcomm↑T_{total}=T_{cómputo}\downarrow+T_{comm}\uparrow ⇒ existe un pp óptimo; con más cuerpos se desplaza a más procesadores (ver FLOPs).

N-Body: simulación all-pairs repartida entre procesos

Color = proceso dueño del cuerpo (bloques de n/p). Cada paso: cada proceso calcula la fuerza sobre sus cuerpos usando los n−1 restantes ⇒ necesita las posiciones de todos (Allgather).

pasos simulados0
cuerpos por proceso≈ 16
interacciones / paso (total)4032
por proceso1010
posiciones recibidas / proceso48
p óptimo (modelo)28
1.00e-51.00e-4204060procesos ptiempo por paso (s)óptimo p=28p=4
T_cómputo = n(n−1)/p · tT_comm = α log p + β nT_total
Con p=4: cómputo 1.01e-4 s, comunicación 4.05e-5 s. O ⁣(n(n−1)p)O\!\left(\tfrac{n(n-1)}{p}\right) baja con p, la comunicación sube ⇒ hay un p óptimo, que se desplaza a la derecha si n crece (sube n y mira la línea verde). Barnes-Hut reduce el cómputo a O(nlog⁡n/p)O(n\log n/p).

Dividir en subproblemas de tamaño n/bn/b → vencer (caso base o recursión) → combinar. En paralelo, ramas distintas del árbol de recursión corren a la vez (pardo); típicamente n/pn/p datos por proceso y combinación en el maestro.

MergeSort-Paralelo(A, n):
if n > 1:
m ← ⌊n/2⌋
pardo:
MergeSort-Paralelo(A[1..m], m)
MergeSort-Paralelo(A[m+1..n], n-m)
Merge(A, n) // secuencial, O(n)
W(n)=2W(n/2)+O(n)=O(nlog⁡n)T∞(n)=T∞(n/2)+O(n)=O(n)W(n)=2W(n/2)+O(n)=O(n\log n)\qquad T_\infty(n)=T_\infty(n/2)+O(n)=O(n) Tp=O ⁣(nlog⁡np+n)S=O ⁣(nlog⁡nnlog⁡np+n)E=O ⁣(11+plog⁡n)T_p=O\!\left(\frac{n\log n}{p}+n\right)\qquad S=O\!\left(\frac{n\log n}{\frac{n\log n}{p}+n}\right)\qquad E=O\!\left(\frac{1}{1+\frac{p}{\log n}}\right)

Mergesort paralelo: árbol de recursión animado

Baja dividiendo (O(1) por nivel) y sube combinando. Las dos llamadas recursivas van en pardo; el merge decide el span.

paso 0/6
418952815538316418952815538316
faseinicio
trabajo de merge acumulado0 ops
span acumulado (secuencial)0
span total (n=8)≈ 2n = 16
T∞(n)=T∞(n/2)+O(n)=O(n)T_\infty(n)=T_\infty(n/2)+O(n)=O(n): el último merge (n elementos) lo hace un solo procesador ⇒ cuello de botella. Con n=10⁶ y p=4: Tp=O ⁣(nlog⁡np+n)T_p=O\!\left(\tfrac{n\log n}{p}+n\right) ≈ 6.98e6 ⇒ S ≈ 2.85 (tope log⁡n\log n ≈ 19.9).
En ambos casos W(n)=2W(n/2)+O(n)=O(nlog⁡n)W(n)=2W(n/2)+O(n)=O(n\log n). Los colores de borde muestran qué proceso tiene cada bloque (n/p elementos por proceso).

Multiplicación de matrices (expansión + reducción)

Sección titulada «Multiplicación de matrices (expansión + reducción)»
for 1≤i,j,k≤n pardo C'(i,j,k) ← A(i,k)·B(k,j) // expansión: n³ productos
for h=1 to log n do
for 1≤i,j≤n, 1≤k≤n/2^h pardo
C'(i,j,k) ← C'(i,j,2k-1)+C'(i,j,2k) // reducción en árbol
for 1≤i,j≤n pardo C(i,j) ← C'(i,j,1)

W=O(n3)W=O(n^3), T∞=O(log⁡n)T_\infty=O(\log n), Tp=O(n3/p+log⁡n)T_p=O(n^3/p+\log n): una reducción binaria replicada n2n^2 veces. (Contrasta con el arquetipo F, acceso directo sin árbol, T∞=O(n)T_\infty=O(n).)

Multiplicación de matrices en paralelo

k 0/4

Haz clic en una celda de C para seguir a ese procesador P(i,j). Verde = celda leída por 1 procesador; rojo = lectura concurrente.

ABC0/40/40/40/40/40/40/40/40/40/40/40/40/40/40/40/4
P(1,2) en paso k=——
máx. lectores de una celda—
escrituras en C[i,j]solo P(i,j)
modelo mínimo—
Con el índice rotado, en cada paso los n² procesadores leen n² celdas distintas de A y de B, y cada uno escribe solo su C[i,j] ⇒ EREW. Fila i fija: j distinto ⇒ columna (i+j+k) mod n distinta.
Ts=O(n3)tc,Tp=O ⁣(n3ptc+n),E=11+ptcn2T_s=O(n^3)t_c,\quad T_p=O\!\left(\tfrac{n^3}{p}t_c+n\right),\quad E=\tfrac{1}{1+\frac{p}{t_cn^2}} ⇒ débil: escala si n∝pn\propto\sqrt p.

Recurrencias Divide y Vencerás — Teorema maestro

T(n)=a T(n/b)+f(n),f(n)=Θ(nklog⁡jn)T(n)=a\,T(n/b)+f(n),\quad f(n)=\Theta(n^k\log^j n) — compara nlog⁡ban^{\log_b a} (hojas) con f(n) (raíz).

T(n)=2 T ⁣(n2)+Θ ⁣(n),log⁡22=1T(n)=2\,T\!\left(\tfrac{n}{2}\right)+\Theta\!\left(n\right),\qquad \log_{2}2=1
Caso2
ResultadoT(n)=Θ(n log⁡n)T(n)=\Theta\left(n\,\log n\right)
Caso 2: f(n) y n^{log_b a} crecen igual ⇒ cada uno de los log n niveles cuesta lo mismo: se multiplica por un log n extra.
Costo por nivel del árbol de recursión (n = 2^10)nivel 0nivel 1nivel 2nivel 3nivel 4nivel 5nivel 6nivel 7nivel 8nivel 9nivel 10
Recurrencias “por resta” (no son del teorema maestro): T(n)=T(n−1)+O(n)⇒Θ(n2)T(n)=T(n-1)+O(n)\Rightarrow\Theta(n^2) · T(n)=T(n−1)+O(1)⇒Θ(n)T(n)=T(n-1)+O(1)\Rightarrow\Theta(n) · Fibonacci W(n)=W(n−1)+W(n−2)+1W(n)=W(n-1)+W(n-2)+1 ⇒ exponencial, T∞(n)=T∞(n−1)+1⇒Θ(n)T_\infty(n)=T_\infty(n-1)+1\Rightarrow\Theta(n).

Ejercicio (PD02 2026-I, Ej. 2): búsqueda de mm elementos en un árbol 2-3

Sección titulada «Ejercicio (PD02 2026-I, Ej. 2): búsqueda de mmm elementos en un árbol 2-3»

Árbol 2-3: nodos internos con 2 o 3 hijos, hojas a la misma profundidad, ordenado. (2.1) PRAM y span. (2.2) WW, T∞T_\infty. (2.3) TpT_p, SS, EE. (2.4) Escalabilidad.

Ver solución
for i ← 1 to m pardo
R[i] ← busqueda23(T.raiz, Q[i]) // recursiva: baja un nivel por llamada
W(h,m)=W(h−1,m)+O(m)=O(mh)=O(mlog⁡n)T∞(h)=T∞(h−1)+O(1)=O(h)=O(log⁡n)W(h,m)=W(h-1,m)+O(m)=O(mh)=O(m\log n)\qquad T_\infty(h)=T_\infty(h-1)+O(1)=O(h)=O(\log n)

Las mm búsquedas son independientes: el span es el de una búsqueda.

Tp=O ⁣(mlog⁡np+log⁡n)S=O ⁣(mlog⁡nmlog⁡np+log⁡n)E=O ⁣(11+pm)T_p=O\!\left(\frac{m\log n}{p}+\log n\right)\quad S=O\!\left(\frac{m\log n}{\frac{m\log n}{p}+\log n}\right)\quad E=O\!\left(\frac{1}{1+\frac pm}\right)

Fuerte (mm cte): E=O(1/p)E=O(1/p), no escala. Débil: E=O(1)E=O(1) si p∝mp\propto m.

Ejercicio (PD02 2025-I, Ej. 3): quicksort paralelo con suma de prefijos

Sección titulada «Ejercicio (PD02 2025-I, Ej. 3): quicksort paralelo con suma de prefijos»

Cada elemento es asignado a un proceso (memoria compartida); en cada nivel se elige pivote, se marca fi=[di≤v]f_i=[d_i\le v] y la posición se obtiene con suma de prefijos. (a) WW, T∞T_\infty, TpT_p, SS, EE, escalabilidad. (b) Agregue comunicación colectiva T(p)=O(log⁡p)T(p)=O(\log p).

Ver solución

(a) W=Ts=O(nlog⁡n)W=T_s=O(n\log n); T∞(n)=T∞(n/2)+O(log⁡n)=O(log⁡2n)T_\infty(n)=T_\infty(n/2)+O(\log n)=O(\log^2n); Tp=O ⁣(nlog⁡np+log⁡2n)T_p=O\!\left(\frac{n\log n}{p}+\log^2n\right), E=11+plog⁡nnE=\dfrac{1}{1+\frac{p\log n}{n}} ⇒ escala si p∝n/log⁡np\propto n/\log n.

(b) Tp=O ⁣(nlog⁡np+log⁡2n+log⁡p)T_p=O\!\left(\frac{n\log n}{p}+\log^2n+\log p\right), E=11+plog⁡nn+plog⁡pnlog⁡nE=\dfrac{1}{1+\frac{p\log n}{n}+\frac{p\log p}{n\log n}} ⇒ dos condiciones: p∝n/log⁡np\propto n/\log n y plog⁡p∝nlog⁡np\log p\propto n\log n; la segunda es la dominante.

Autoevaluación

0/5 correctas · 0 respondidas
1. T(n)=2T(n/2)+O(n)T(n)=2T(n/2)+O(n) ⇒
2. Span del mergesort paralelo con merge secuencial:
3. Barnes-Hut reduce N-Body a…
4. Operaciones de fuerza por paso en N-Body directo:
5. Span de la multiplicación de matrices por expansión+reducción:

Fuente ·estudio/07_NBody_DivideVenceras.md · U2.5-Diseño_en_paralelo-NBody-DivideYVenceras.pdf · previos/2026-I (Ej. 2) · previos/2025-I (Ej. 3) · P1.md