Ir al contenido

PD01 y P1 resueltos

Resuelto paso a paso en Método de Foster: Foster con límite de 4 MB ⇒ 2202^{20} píxeles por proceso, halo exchange, Ts=3nttcT_s=3ntt_c, Tp=t[3nptc+8tw]T_p=t[3\frac npt_c+8t_w], isoeficiencia lineal.

Resuelto en Modelo DAG (incluye la dependencia WAR sobre b); cárgalo en el playground con el preset «PD01 Ej.2».

Se deben completar nn tareas en mm procesos idénticos (n≫mn\gg m). El proceso pjp_j tarda tit_i en la tarea ii y ejecuta una tarea a la vez; con el conjunto JjJ_j necesita Tj=∑i∈JjtiT_j=\sum_{i\in J_j}t_i. Describa el particionamiento y la complejidad de un algoritmo que reparta las nn tareas minimizando el tiempo total.

Ver solución

Resolución propuesta (sin solución oficial). El tiempo total es el makespan T=max⁡jTjT=\max_jT_j; minimizarlo exactamente es NP-difícil (partición multiproceso), así que se usa una heurística de particionamiento de tareas con balanceo:

  1. Estático (LPT, longest processing time first): ordenar las tareas por tit_i descendente, O(nlog⁡n)O(n\log n); asignar cada una al proceso con menor carga actual (un min-heap de mm cargas), O(nlog⁡m)O(n\log m). Total O(nlog⁡n+nlog⁡m)=O(nlog⁡n)O(n\log n+n\log m)=O(n\log n). Garantiza un makespan ≤ 43\frac43 del óptimo.
  2. Dinámico (work pool): si los tit_i no se conocen de antemano, los procesos toman la siguiente tarea al quedar libres (como Mandelbrot), pagando Tmsg+TschedT_{msg}+T_{sched} por tarea.

Cota inferior útil para argumentar: T≥max⁡ ⁣(1m∑iti, max⁡iti)T\ge\max\!\left(\frac1m\sum_it_i,\ \max_it_i\right) — la misma idea que max⁡(W/p,T∞)\max(W/p,T_\infty) de Brent.

P1 — Subsecuencia máxima (Divide y Vencerás)

Sección titulada «P1 — Subsecuencia máxima (Divide y Vencerás)»

SubsecuenciaMaxima hace dos llamadas recursivas sobre mitades y MaximoCentro recorre linealmente de ll a rr. (a) Recurrencia. (b) Paralelización, WW y T∞T_\infty. (c) TpT_p, SS, EE y escalabilidad fuerte/débil.

Ver solución

(a) T(n)=2T(n/2)+Θ(n)T(n)=2T(n/2)+\Theta(n); maestro con a=b=2a=b=2, f(n)=Θ(n)=nlog⁡22f(n)=\Theta(n)=n^{\log_2 2} ⇒ Θ(nlog⁡n)\Theta(n\log n).

(b)

pardo
ML ← SubsecuenciaMaxima(A, l, m)
MR ← SubsecuenciaMaxima(A, m+1, r)

MaximoCentro con dos scans del algoritmo de clase (Parallel Prefix using Binary Tree Traversal): prefix-sum (+) desde mm hacia ll (y desde m+1m+1 hacia rr) y luego prefix-max; el último valor es maxIzq/maxDer. Cada scan: O(n)O(n) trabajo, O(log⁡n)O(\log n) span.

W(n)=2W(n/2)+O(n)=Θ(nlog⁡n)T∞(n)=O(log⁡2n)W(n)=2W(n/2)+O(n)=\Theta(n\log n)\qquad T_\infty(n)=O(\log^2n)

(log⁡n\log n niveles, cada uno aporta log⁡n\log n de span por MaximoCentro; sin paralelizarlo, T∞=O(n)T_\infty=O(n).)

(c)

Tp=O ⁣(nlog⁡np+log⁡2n)S=nlog⁡nnlog⁡np+log⁡2nE=11+plog⁡nnT_p=O\!\left(\frac{n\log n}{p}+\log^2n\right)\quad S=\frac{n\log n}{\frac{n\log n}{p}+\log^2n}\quad E=\frac{1}{1+\frac{p\log n}{n}}

Fuerte: E=O(1/p)E=O(1/p) ⇒ no escala. Débil: p∝n/log⁡np\propto n/\log n ⇒ EE constante, escala.

Fuente ·CS4052-PD01-S02.pdf · PD01-Ejercicio1-Resolucion.md · P1.md