Professional Documents
Culture Documents
Lecture 02c
Lecture 02c
Lecture 02c
Clase 02 - Background
¿Qué es performance?
Speedup máximo = 1 / (1 - P)
P = 1 - 1/Speedup máximo
En este caso, el speedup máximo es 4 (el número de procesadores disponibles), por lo que:
P = 1 - 1/4 = 0.75
El porcentaje del código que se puede ejecutar de forma serial es simplemente el complemento
del porcentaje que se puede ejecutar en paralelo:
Tiempo total sin pipelining = (30 + 40 + 20) + (30 + 40 + 20 + 90) + (30 + 40 + 20 + 130) + (30 + 40 + 20 +
170)
= 30 + 120 + 210 + 260
= 620 ns
Con pipelining, se pueden ejecutar varias instrucciones simultáneamente en diferentes etapas, lo que reduce
el tiempo total de ejecución. En este caso, podemos dividir las instrucciones en tres grupos, cada uno en
una etapa diferente, y hacer que las etapas funcionen en paralelo. Por lo tanto, el tiempo total de ejecución
es igual al tiempo de la etapa más larga, que es 130 ns:
El speedup se define como la relación entre el tiempo de ejecución sin pipelining y el tiempo de ejecución
con pipelining:
Por lo tanto, el speedup de correr el programa en un procesador con pipelining en comparación con un
procesador sin pipelining es de aproximadamente 4.77 veces.
El tiempo total de ejecución del programa será igual al tiempo que tarda la instrucción más lenta en
completarse en el pipeline. En este caso, la tercera instrucción es la que tarda más tiempo en completarse,
ya que tiene que pasar por todas las etapas del pipeline. Por lo tanto, el tiempo total de ejecución del
programa con pipelining será igual al tiempo que tarda la tercera instrucción en completarse, más el tiempo
de espera para las otras instrucciones:
Por lo tanto, el tiempo total de ejecución del programa con pipelining es de 130 ns, que es mucho más
rápido que sin pipelining. Esto se debe a que las etapas del pipeline pueden trabajar en paralelo, lo que
reduce el tiempo total de ejecución.
Ejercicio numérico
Suponga un programa 𝐴 del cual se sacaron una versión secuencial 𝐴 y una
versión paralela 𝐴𝑝 que usaba 8 hilos de ejecución. Los tiempos de
ejecución del programa fueron 𝑇𝐴 = 12 y 𝑇𝐴𝑝 = 5. ¿Qué porcentaje del
código es secuencial y qué porcentaje es paralela?
1
Hint: El 𝑆𝑝𝑒𝑒𝑑𝑢𝑝 = 1−𝑓+𝑓/𝑝 siendo 𝑓 la porción del código secuencial y 𝑝 el número de workers
involucrados en el procesamiento paralelo (workers: threads, cores)
𝑤𝑜𝑟𝑘 𝑇1 18
➡ 𝑠𝑝𝑒𝑒𝑑𝑢𝑝 ≤ 𝑠𝑝𝑎𝑛 . En el gráfico anterior el 𝑠𝑝𝑒𝑒𝑑𝑢𝑝 = 𝑇∞ = 6 =3
Work-Span no considera los costos de acceso a memoria y
comunicación. A un modelo que sí los considere se llama
burdened-span
𝐶 =𝑅×𝐿
Concurrencia tiene que ver con el número total de tareas que están
en progreso al mismo tiempo, mientras que el paralelismo se
encarga de ejecutar las tareas al mismo tiempo
Suponga que un core ejecuta una operación por click del reloj pero
cada operación espera por un acceso a memoria que toma 3 click del
reloj ➡ para ocultar la latencia se pueden ejecutar
𝐶𝑡𝑖𝑒𝑚𝑝𝑜/𝑖𝑛𝑠𝑡 = 𝑅𝑡𝑖𝑒𝑚𝑝𝑜/𝑎𝑐𝑐𝑒𝑠𝑜 × 𝐿𝑎𝑐𝑐𝑒𝑠𝑜/𝑖𝑛𝑠𝑡 = 1 × 3 operaciones a
la vez
Falta de localidad
a = 1e20
b = 1e-20
c = 1e-20
d = a + b - a
e = b + c - b
f = d + e
# Order 1
# (a + b - a) + (b + c - b) + a = (b) + (c) + a
f_order1 = d + e + a
# Order 2
# b + c - a + a + (a + b - a) + (b + c - b) = b + c + b + c
f_order2 = b + c - a + a + d + e