Вы находитесь на странице: 1из 5

ESTRUCTURA DE COMPUTADORS

CURS 2018-2019 (Novembre-2018)


1er Parcial- Tipus A

INSTRUCCIONES: En las preguntas tipo test, cada respuesta incorrecta resta 1/3 del valor
de la respuesta correcta.
Nombre: POSSIBLE SOLUCIÓ
TEST (3 puntos)

1. En prácticas, cuando apareció una sentencia del tipo 1<<23, era por que:

a) Se estaba comprobando que 1 es mucho menor que 23.


b) Se estaba colocando el valor 1 en el bit 23 de un registro para saber
si la CPU soportaba instrucciones MMX.
c) Esa sentencia no se ha usado en ninguna práctica hasta ahora.
d) Ninguna de las respuestas anteriores es correcta.

2. Si necesitamos mejorar el rendimiento de un programa que procesa millones de


datos en coma flotante de forma SIMD, según la clasificación de Flynn, usaríamos
(suponiendo que la CPU permite cualquier propuesta):

a) Instrucciones MMX, SSE, o AVX.


b) Únicamente instrucciones SSE o AVX.
c) Únicamente instrucciones MMX o SSE.
d) Ninguna de las respuestas anteriores es correcta.
3. Si al calcular un resultado con la ley de Amdahl, nos da un valor infinito, puede ser
debido a que:

a) Seguro que nos hemos equivocado en los cálculos.


b) La mejora propuesta realmente empeora las prestaciones.
c) La mejora propuesta es imposible de conseguir.
d) Ninguna de las respuestas anteriores es correcta.

1/5
ESTRUCTURA DE COMPUTADORS
CURS 2018-2019 (Novembre-2018)
1er Parcial- Tipus A

PROBLEMAS:

1. (3.5 puntos) Si los valores de las variables son:


unsigned char v0[16]={12,9,49,90,75,61,65,5,18,20,19,70,9,15,12,2};
unsigned char v1[16]={1,90,94,9,57,16,56,50,81,2,91,7,90,51,21,20};
unsigned char v2[16]={1,1,255,9,9,255,6,6,255,2,2,255,5,5,1,2};

indicar qué valor queda en los operandos destino de las siguientes


instrucciones MMX/SSE/AVX si se ejecutan secuencialmente:

Instrucción Resultado en operando destino


movdqu xmm0,v0 xmm0=|2|12|15|9|70|19|20|18|5|65|61|75|90|49|9|12|
movdqu xmm1,v1 xmm1=|20|21|51|90|7|91|2|81|50|56|16|57|9|94|90|1|
movdqu xmm2,v2 xmm2=|2|1|5|5|255|2|2|255|6|6|255|9|9|255|1|1|
movdqa xmm3,xmm0 xmm3=|2|12|15|9|70|19|20|18|5|65|61|75|90|49|9|12|
psubusb xmm0,xmm1 xmm0=|0|0|0|0|63|0|18|0|0|9|45|18|81|0|0|11|
psubusb xmm1,xmm3 xmm1=|18|9|36|81|0|72|0|63|45|0|0|0|0|45|81|0|
por xmm0,xmm1 xmm0=|18|9|36|81|63|72|18|63|45|9|45|18|81|45|81|11|
pshufb xmm0,xmm2 xmm0=|45|81|45|45|0|45|45|0|9|9|0|18|18|0|81|81|

#include <stdio.h>

unsigned char v0[16]={12,9,49,90,75,61,65,5,18,20,19,70,9,15,12,2};


unsigned char v1[16]={1,90,94,9,57,16,56,50,81,2,91,7,90,51,21,20};
unsigned char v2[16]={1,1,255,9,9,255,6,6,255,2,2,255,5,5,1,2};

unsigned char result[16];

int main()
{
asm("movdqu v0, %xmm0");
asm("movdqu v1,%xmm1");
asm("movdqu v2,%xmm2");
asm("movdqa %xmm0,%xmm3");
asm("psubusb %xmm1,%xmm0");
asm("psubusb %xmm3,%xmm1");
asm("por %xmm1,%xmm0");
asm("pshufb %xmm2,%xmm0");

asm("movdqu %xmm0, result");


for(int i=0; i<16; i++) printf("%d\n", result[i]);

2/5
ESTRUCTURA DE COMPUTADORS
CURS 2018-2019 (Novembre-2018)
1er Parcial- Tipus A

2. (3.5 puntos) El equipo de diseño de una nueva CPU tiene que decidir
entre dos posibles implementaciones A ó B. En la siguiente tabla se
muestran algunos de los parámetros de cada versión:

Parámetro A B
Reloj (f) 500 MHz 350 MHz
CPI para instrucciones ALU 1 1
CPI para instrucciones de control 3 2.5
CPI instrucciones memoria 2.7 1

a) Si un programa tiene 20% instrucciones ALU, 10% instrucciones de


control, y el resto instrucciones de memoria, ¿Qué versión será más rápida?
Indicar el CPI medio y MIPS en cada caso.

t=NI*CPI*1/f
tA=NI*(0.2*1+0.1*3+0.7*2.7)*1/500*106= 4.78NI ns
tB=NI*(0.2*1+0.1*2.5+0.7*1)*1/350*106= 3.29NI ns

CPIA=2.39
CPIB=1.15

tA=1s=NIA*(0.2*1+0.1*3+0.7*2.7)*1/500*106
NIA=209205020
MIPSA=209

tB=1s=NIB*(0.2*1+0.1*2.5+0.7*1)*1/350*106
NIB=304347826
MIPSB=304

b) En la situación del apartado anterior, ¿Cuánto tendría que incrementarse


la frecuencia de reloj del más lento para alcanzar las prestaciones del más
rápido?

tA=3.29NIns=NI*(0.2*1+0.1*3+0.7*2.7)*1/f
f=726.44 MHz
f=726.44-500=226.44 MHz de incremento

3/5
ESTRUCTURA DE COMPUTADORS
CURS 2018-2019 (Novembre-2018)
1er Parcial- Tipus A

c) Si otro programa tiene un 80% de instrucciones ALU, 10% instrucciones de


memoria, y el resto son instrucciones de control, ¿Qué diseño será más
rápido en este caso? Repetir apartados a) y b) con los nuevos datos.

t=NI*CPI*1/f
tA=NI*(0.8*1+0.1*3+0.1*2.7)*1/500*106= 2.74NI ns
tB=NI*(0.8*1+0.1*2.5+0.1*1)*1/350*106= 3.29NI ns

CPIA=1.37
CPIB=1.15

tA=1s=NIA*(0.8*1+0.1*3+0.1*2.7)*1/500*106
NIA=364963503
MIPSA=365

tB=1s=NIB*(0.8*1+0.1*2.5+0.1*1)*1/350*106
NIB=304347826
MIPSB=304

tB=2.74NI ns=NI*(0.8*1+0.1*2.5+0.1*1)*1/f
f=420MHz
f=420-350=70 MHz de incremento

d) Si la expresión que nos da el coste económico de cada opción viene dada


por Coste(en €)=f (en MHz) * CPI (medio), en las condiciones de todos los
apartados anteriores, ¿Cuál presenta mejores prestaciones económicas en
cada caso?

Costea)=500*2.39=1195€
Costea)=350*1.15=402.5€
Costeb)=726.44*2.39=1736.20€
Costec)=500*1.37=685€
Costec)=420*1.15=483€

4/5
ESTRUCTURA DE COMPUTADORS
CURS 2018-2019 (Novembre-2018)
1er Parcial- Tipus A

JUEGO DE INSTRUCCIONES MMX/SSE/AVX


Instrucción Observaciones Descripción
PADD[B/W/D][SB/SW] Los datos de entrada se consideran Suma
[USB/USW] con o sin signo, dependiendo del
tipo de saturación aplicada.
PSUB[B/W/D][SB/SW] Los datos de entrada se consideran Resta
[USB/USW] con o sin signo, dependiendo del
tipo de saturación aplicada.
PMULHW Sólo opera la parte alta del registro Multiplicación
PMULLW Sólo opera la parte baja del registro Multiplicación
PMADDWD Multiplicación y suma
PCMPEQ[B/W/D] Datos con signo Comparación si igual
PCMPGT[B/W/D] Datos con signo Comparación si mayor que
PACK[US/SS][WB/DW] Los valores de entrada se tratan Empaquetado. Vector de salida
siempre como enteros con signo, y de 8xBytes o 4xWords.
los de salida se saturan con [SS] o
sin signo [US].
PUNPCKH[BW/WD/DQ] Desempaqueta y entrelaza elementos de mayor orden
PUNPCKL[BW/WD/DQ] Desempaqueta y entrelaza elementos de menor orden
P[AND/ANDN/OX/XOR] Instr. Lógicas
PSLL[W/D/Q] A izquierda Desplazamiento Lógico
PSRL[W/D/Q] A derechas Desplazamiento Lógico
PSRA[W/D] Desplazamiento aritmético a derechas
MOV[D/Q] Instrucciones de transferencia de datos
EMMS Vaciado de registros MMX para no afectar a los registros de coma
flotante
MOVDQA/MOVDQU Instrucciones de transferencia de datos de 128 bits, alineados [A] o no
alineados [U] en direcciones múltiplo de 16.
Instrucciones de transferencia de datos entre registros MMX [Q] y
MOVDQ2Q/MOVQ2DQ registros XMM [DQ]. Los bits no usados de los XMM se rellenan por
ceros cuando son el operando destino.
PAVG[B][W] Calcula el valor medio de las parejas de datos sin signo de los
operandos, añadiendo 1 a la suma.
PMAX[S][U][B][W] Calcula el máximo de las parejas de valores con signo [S] o sin signo
[U] de los operandos.
PMIN[S][U][B][W] Calcula el mínimo de las parejas de valores con signo [S] o sin signo
[U] de los operandos.
PADDQ Suma los dos operandos de 128 bits como 2 quadwords con signo
PSUBQ Resta los dos operandos de 128 bits como 2 quadwords con signo
PMULUDQ Multiplica 2 palabras dobles sin signo alternas, y almacena los dos
resultados de palabras cuádruples en el operando destino.
Recoloca los bytes en el operando destino según los índices del
PSHUFB operando fuente. Si el índice es mayor de 127 coloca un 0. El índice
comienza a contar a partir de 0.
VPADD[S][US][B][W] Suma los datos empaquetados en registros de 256 bits, con signo, y
almacena los resultados saturados con signo [S] o sin signo [US]
VPSUB[S][US][B][W] Resta los datos empaquetados en registros de 256 bits, con signo, y
[D] almacena los resultados saturados con signo [S] o sin signo [US]
VPMULDQ Multiplica enteros con signo de 32 bits alternos y almacena los 4
resultados de 64 bits en registros YMM

5/5

Вам также может понравиться