Anda di halaman 1dari 2

Arquitectura de computadores (543426)

Semestre 2018-1, Test 3

Considere un programa compuesto por dos secciones: una sección secuencial no paralelizable, y
un lazo iterativo que se puede paralelizar ejecutando distintas iteraciones en múltiples núcleos
de una CPU multinúcleo. La sección secuencial ejecuta 200 instrucciones, y cada iteración del lazo
ejecuta 50 instrucciones. El lazo itera 80 veces. La descomposición de estas instrucciones por tipo
está indicada en la siguiente tabla, al igual que los ciclos por cada tipo de instrucción:

Tipo de Instrucción Ciclos por instrucción # inst. secuencial #inst. lazo


ALU (add, sub, etc.) 1 90 15
Multiplicaciones 5 30 20
Load/store 30 60 10
Saltos condicionales 2 20 5

a) Para un procesador completamente secuencial (1 núcleo), calcule el CPI de la sección


secuencial, el CPI de una iteración del lazo y el CPI del programa.

b) Calcule la aceleración que se conseguiría al incorporar un sistema de memorias cache que


reduce el 90% de los lw/sw a 1 ciclo y el 8% a 5 ciclos.

c) Un compilador paralelizante puede ejecutar el lazo iterativo en paralelo sobre múltiples


núcleos. Asumiendo que la sección secuencial no puede ejecutarse en paralelo con las
iteraciones del lazo, calcule y grafique la aceleración sobre el procesador de la parte (a)
al ejecutar el programa paralelizado sobre 2, 4, 8 y 16 núcleos. Use la ley de Amdahl.
Solución

a)
Tipo de Ciclos por inst. % inst. sec. %inst. lazo
Instrucción
ALU 1 45 30
Multiplicaciones 5 15 40
Load/store 30 30 20
Saltos 2 10 10

CPI_sec = 1*0.45 + 5*0.15 + 30*0.30 + 2*0.10 = 10.4


CPI_lazo = 1*0.30 + 5*0.40 + 30*0.20 + 2*0.10 = 8.5

CPI_prog = (CPI_sec*#instr_sec + CPI_lazo*#instr_lazo*#iteraciones)/(#instr)


CPI_prog = (10.4*200 + 8.5*50*80)/(200 + 80*50)
CPI_prog = 8.59

b)
Fracción de tiempo ldr/str = (ciclos ldr/str)/(ciclos totales)
= 30*(60 + 10*80)/(10.4*200 + 8.59*50*80)
= 0.715
Como se vio en clases, la Ley de Amdahl para dos mejoras independientes con
aceleración S1 y S2 sobre fracciones de tiempo F1 y F2 del programa es:

S = 1/( (1-F1-F2) + (F1/S1) + F2/S2))

F1 = 0.9 * 0.715 = 0.644


F2 = 0.08 * 0.715 = 0.057
S1 = 30/1 = 30
S2 = 30/5 = 6

S = 3.03

c)

F lazo = (CPI_lazo * 50 * 80) / (ciclos totales)


F lazo = 0.942

S lazo = N (N es el número de núcleos

S_N = 1/( (1-F) + F/N )


S_2 = 1.89
S_4 = 3.41
S_8 = 5.7
S-16 = 8.58

Anda mungkin juga menyukai