View
73
Download
9
Category
Preview:
Citation preview
1/6
CAPITULO 4 Problema 1: Estimar las velocidades pico de los procesadores que se describen en el capitulo utilizando los datos respecto a las frecuencias de reloj, instrucciones que se retiran por ciclo y unidades funcionales que se indican en el texto. Solución:
Procesador Frecuencia Finalizan / Ciclo Velocidad Pico
MIPS R100 275 5 1375
Ultra Sparc II 250 6 1500
HP PA 8500 400 6 2400
DEC Alpha 21264 600 8 4800
Power PC 620 200 4 800
AMD Athlon K7 1200 3 3600
Pentium 4 1400 3 4200
Problema 2: Se dispone de una aplicación de procesamiento de señal que debe repetir 3000 veces el cálculo �(�) =
���(�), �(� + �), �(� + �),�(� + �)� para cada muestra de la señal �(�)�� = �, … , ��� − �� que ocupa 4
bytes, y �() es una función determinada. El código por 12 instrucciones de 32 bit que se repiten para cada muestra. De las instrucciones, 4 son de acceso a memoria para leer/escribir datos, 4 son instrucciones de operaciones aritméticas, y 4 son de control del bucle, actualización de punteros, etc. Estimar el tiempo mínimo que tardaría en ejecutarse esa aplicación (suponemos que no hay fallos de caché para instrucciones o datos) en los siguientes microprocesadores:
- UltraSPARC III 600 MHz - Alpha 21264 450 MHz - MIPS R10000 180MHz - Power PC G5 800MHz
Solución: UltraSPARC III:
Ciclos de acceso a memoria = 4���� ∗������
�����= 2������
Ciclos de instrucciones aritméticas = 4���� ∗������
�����= 2������
Ciclos de control y actualización = 4���� ∗������
�����= 4������
���� = �º������ ∗ ������� ∗ �º������������
���� = 8 ∗1
600���∗ 3000 = 40��
2/6
Alpha 21264:
Ciclos de acceso a memoria = 4���� ∗������
�����= 1������
Ciclos de instrucciones aritméticas = 4���� ∗������
�����= 2������
Ciclos de control y actualización = 4���� ∗������
�����= 4������
���� = �º������ ∗ ������� ∗ �º������������
���� = 7 ∗1
450���∗ 3000 = 46.6��
MIPS R10000:
Ciclos de acceso a memoria = 4���� ∗������
�����= 1������
Ciclos de instrucciones aritméticas = 4���� ∗������
�����= 2������
Ciclos de control y actualización = 4���� ∗������
�����= 2������
���� = �º������ ∗ ������� ∗ �º������������
���� = 5 ∗1
180���∗ 3000 = 83.3��
*Nota: Los ciclos de acceso a memoria, instrucciones aritméticas, control y actualización del MIPS R10000 y del PowerPC G5 tienen que ser confirmados por el ingeniero.
3/6
Problema 3: Utilizar las instrucciones cmovcc y setcc para reducir el número de instrucciones de salto en el siguiente bucle:
if (A>B) then (X=1); else { if (C<D) then (X=2); else (X=3)} Solución: Código Original:
Código Optimizado:
4/6
xor %al, %al xor %bl, %bl xor %cl, %cl cmpl B, A // si (A>B), al=1 setgtb %al cmpl S1, %al cmoveq S1, X // si al=1, X=1 neg al cmpl C, B // si (D>C), bl=1 setgtb %bl and %al, %bl cmpl S1, %bl cmoveq S2, X // si bl=1, al=1, bl and al=1 X=2 cmpl C, D // si (D<=C), cl=1 setleb %cl and %al, %cl cmpl S1, %cl cmoveq S3, X // si cl=1, al=1, cl and al=1 X=3
Banderas Operación
al bl cl
1 0 0 X=1
0 1 0 X=2
0 0 1 X=3
Problema 4: Para el siguiente código optimizar las instrucciones usando setccb.
if (A<B) ebx=C; else ebx=D Solución: Código Original:
cmpl B, A jge LO mov1 c, %ebx jmp L1
L0: mov1 D, %ebx L1:
5/6
Código Optimizado: xorl %ebx, %ebx cmpl B, A setgeb %bl decl %ebx andl (C-D), %ebx addl D, %ebx Si A>=B, setgeb hace bl=1, dec hace ebx=0, (ebx and C-D)=0 ebx=0, ebx+D=0+D=D ebx=D. Si A<B, setgeb hace bl=0, dec hace ebx=0xFFFFFFFF, (ebx and C-D)=C-D ebx=C-D, ebx+D=C-D+D=C ebx=C. Problema 5: Utilizar las instrucciones con predicado setccb y cmovcc para reducir las instrucciones en:
if (A<=B) then cbx=2; else cbx=4 Solución: Código Optimizado: xorl %al, %al cmpl A, B setgeb %al // al=1 si A<=B, al=0 si A>B cmpl S1, %al cmoveq S2, %cbx // si al=1 (A<=B) cbx=2 cmpl S0, %al cmoveq S4, %cbx // sia al=0 (A>B) cbx=4
6/6
Problema 6: Utilizar las instrucciones con predicado del repertorio IA-32 para reducir las instrucciones de salto condicional en la secuencia.
if ((X[0] mod 2)==0) then for i=1 to 2 do if ((X[i] mod 2)==0) then X[i]=2*X[i] else if (X[0]<0) then X[i]=0;
Recommended