Ir al contenido

Casos PRAM

R=a0∨a1∨⋯∨an−1R=a_0\lor a_1\lor\dots\lor a_{n-1}: cada procesador evalúa if x[i] y escribe Result ← 1. Basta que uno escriba 1 (todos escriben el mismo valor ⇒ CRCW común).

T∞(n)=Θ(1)W(n)=Θ(n)Sn=Θ(n)En=Θ(1)T_\infty(n)=\Theta(1)\qquad W(n)=\Theta(n)\qquad S_n=\Theta(n)\qquad E_n=\Theta(1)

Global AND es análogo con if not x[i] → Result ← 0.

forall (i,j) ∈ {1..n}² pardo B[i,j] ← A[i] ≥ A[j]
forall i ∈ {1..n} pardo M[i] ← AND_j B[i,j]

Cada elemento se compara contra todos; donde el AND da 1 está el máximo. O(n2)O(n^2) procesadores, tiempo O(1)O(1).

for i=1 to n pardo B[i] ← A[i] // paso 1
for h=1 to log n do
for i=1 to n/2^h pardo B[i] ← B[2i-1] + B[2i] // paso 2
S ← B[1] // paso 3
W(n)=n+∑j=1log⁡nn2j+1=O(n)T∞=O(log⁡n)Tp=O ⁣(np+log⁡n)W(n)=n+\sum_{j=1}^{\log n}\frac{n}{2^j}+1=O(n)\qquad T_\infty=O(\log n)\qquad T_p=O\!\left(\frac np+\log n\right)

Con Cp=O(n+plog⁡n)C_p=O(n+p\log n) es WT-óptimo. Con pp procesadores explícitos: cada ss suma localmente sus n/pn/p y luego participa en log⁡\log niveles del árbol (activo solo mientras s≤2k−hs\le2^{k-h}).

Dada una operación asociativa ∗*: si=x1∗x2∗⋯∗xis_i=x_1*x_2*\dots*x_i.

Suma de prefijos paso a paso (up-sweep / down-sweep)

Algoritmo no recursivo del PRAM visto en clase. Cada nodo del árbol guarda B (up-sweep) y C (down-sweep, el prefijo).

n = 8, log n = 3 · paso 0/8
Estado inicial: solo A está en memoria. Pulsa «Paso».
h=0h=1h=2h=3B ·C ·B ·C ·B ·C ·B ·C ·B ·C ·B ·C ·B ·C ·B ·C ·B ·C ·B ·C ·B ·C ·B ·C ·B ·C ·B ·C ·B ·C ·A(1)=3A(2)=1A(3)=7A(4)=0A(5)=4A(6)=1A(7)=6A(8)=3
escribelee (1 procesador)lectura concurrente (≥2 procesadores)
Procesadores activos0
Modelo requerido en este paso—
Operaciones hasta ahora0 / 30
Pasos paralelos8 = 2·log n + 2
W(n)=n+∑m=1kn2m+∑m=0k2m=O(n)T(n)=2log⁡n+2=O(log⁡n)W(n)=n+\sum_{m=1}^{k}\frac{n}{2^m}+\sum_{m=0}^{k}2^m=O(n)\qquad T(n)=2\log n+2=O(\log n)
if n = 1: s1 ← x1
for 1 ≤ i ≤ n/2 pardo: y_i ← x_{2i-1} * x_{2i}
(z_1..z_{n/2}) ← PrefixSum(y_1..y_{n/2})
for 1 ≤ i ≤ n pardo:
i par: s_i ← z_{i/2}
i = 1: s_1 ← x_1
i impar > 1: s_i ← z_{(i-1)/2} * x_i

T(n)=T(n/2)+a⇒O(log⁡n)T(n)=T(n/2)+a\Rightarrow O(\log n);   W(n)=W(n/2)+bn⇒O(n)\;W(n)=W(n/2)+bn\Rightarrow O(n). Como el secuencial es O(n)O(n): WT-óptimo; paradigma de memoria compartida (U3.5, Ej. 3).

C1–C2 comparten una memoria local, C3–C4 otra; entre pares solo hay red. Cada cajero deposita/retira de una cuenta vv con cualquier frecuencia. ¿Paradigma? ¿Flynn? ¿Aplica CRCW?

Ver solución
  • Paradigma: híbrido (memoria compartida dentro de cada par + distribuida entre pares).
  • Flynn: MIMD (instrucciones distintas, datos distintos, asíncrono).
  • CRCW puro no encaja bien: la escritura concurrente sobre vv exigiría el submodelo combinado (acumular depósitos/retiros) o serializar con exclusión mutua; además CRCW supone pasos síncronos y el banco es asíncrono ⇒ se modela mejor con APRAM.

Autoevaluación

0/4 correctas · 0 respondidas
1. Global OR en CRCW común tiene T∞=T_\infty=
2. Prefix sum: WW y TT…
3. ¿Cuántos procesadores usa el máximo en O(1)O(1)?
4. En el down-sweep, C(h,2m)C(h,2m) y C(h,2m+1)C(h,2m+1) leen C(h+1,m)C(h+1,m) en el mismo paso. Eso es…

Fuente ·estudio/04_PRAM.md §6–8 · U2.2/U2.3 PRAM (apuntes) · U3.5 Ejercicios de repaso.pdf (Ej. 3)