N(N−1)/2 pares ⇒ O(N2) por paso. Sin solución analítica desde N=3. La integración por intervalos es aproximada (se mejora con leap-frog).
Paralelo directo: cada proceso un subgrupo de cuerpos ⇒ O(pn(n−1)).
Barnes-Hut: un cluster lejano se aproxima como un solo cuerpo (quadtree/octree) ⇒ O(nlogn/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↑ ⇒ existe un p ó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).
Con p=4: cómputo 1.01e-4 s, comunicación 4.05e-5 s. O(pn(n−1)) 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(nlogn/p).
Dividir en subproblemas de tamaño n/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/p datos por proceso y combinación en el maestro.
Baja dividiendo (O(1) por nivel) y sube combinando. Las dos llamadas recursivas van en pardo; el merge decide el span.
paso 0/6
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): el último merge (n elementos) lo hace un solo procesador ⇒ cuello de botella. Con n=10⁶ y p=4: Tp=O(pnlogn+n) ≈ 6.98e6 ⇒ S ≈ 2.85 (tope logn ≈ 19.9). En ambos casos W(n)=2W(n/2)+O(n)=O(nlogn). Los colores de borde muestran qué proceso tiene cada bloque (n/p elementos por proceso).
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), T∞=O(logn), Tp=O(n3/p+logn): una reducción binaria replicada n2 veces. (Contrasta con el arquetipo F, acceso directo sin árbol, T∞=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.
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(pn3tc+n),E=1+tcn2p1 ⇒ débil: escala si n∝p.
Árbol 2-3: nodos internos con 2 o 3 hijos, hojas a la misma profundidad, ordenado. (2.1) PRAM y span. (2.2) W, T∞. (2.3) Tp, S, E. (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
Cada elemento es asignado a un proceso (memoria compartida); en cada nivel se elige pivote, se marca fi=[di≤v] y la posición se obtiene con suma de prefijos. (a) W, T∞, Tp, S, E, escalabilidad. (b) Agregue comunicación colectiva T(p)=O(logp).
Ver solución
(a)W=Ts=O(nlogn); T∞(n)=T∞(n/2)+O(logn)=O(log2n);
Tp=O(pnlogn+log2n), E=1+nplogn1 ⇒ escala si p∝n/logn.
(b)Tp=O(pnlogn+log2n+logp), E=1+nplogn+nlognplogp1 ⇒ dos condiciones: p∝n/logn y plogp∝nlogn; la segunda es la dominante.
Autoevaluación
0/5 correctas · 0 respondidas
1.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: