1 2.10. instrucciones de duración variable

Anuncio
2.10. INSTRUCCIONES DE DURACIÓN VARIABLE
• Hay operaciones que requieren mayor tiempo de ejecución EX que otras.
• Operaciones como multiplicación y división de enteros, u operaciones de punto
flotante necesitan un tratamiento especial en su etapa de ejecución.
• Mantener 5 etapas en la cadena pipeline implicaría alargar el periodo de reloj, para
amoldarse a las operaciones de larga duración. Por otra parte, si añadimos más fases
para las instrucciones largas, sería poco eficiente que todas las instrucciones tuvieran
todas esas fases, puesto que las instrucciones largas son poco frecuentes.
• Luego se aumenta el número de etapas en la cadena sólo donde se necesita: en las
etapas de ejecución EX de operaciones largas.
• Solución: Se tiene más de una unidad funcional para soportar estas nuevas
instrucciones. Estas nuevas unidades funcionales pueden trabajar en paralelo con las
demás. La cadena pipeline será la misma, pero la etapa EX se repite tantas veces
como la operación lo requiera.
• DLX: Se define con una unidad funcional (U.F.) para operaciones enteras simples,
otra para multiplicaciones de enteros/FP, otra para divisiones de enteros/FP y otra
para suma/resta FP, las cuales necesitan más de un ciclo para concluir su etapa EX.
• Actualmente se disponen de muchas U.F. diferentes para enteros y para FP.
2.10. Instrucciones de duración variable.
Arquitectura de Sistemas Paralelos I.
1
• Típicamente el DLX (1990) tiene una duracion de 1 ciclo para las operaciones de
enteros simples, 5 ciclos para las multiplicaciones, 2 ciclos para sumas FP y 20 ciclos
para divisiones FP.
EX
Enteros
EX
IF
ID
FP/Ent
*
MEM
WB
EX
FP +/-
EX
FP/Ent
/
• Las unidades funcionales pueden estar segmentadas. Es decir, si la suma FP tiene 2
ciclos ⇒ A1 y A2 como etapas de ejecución, las cuales pueden estar ejecutando
instrucciones diferentes. Para permitir esto es necesario añadir latches entre ambas
subetapas para almacenar los valores intermedios. Las no segmentadas pueden
producir bloqueos estructurales.
2.10. Instrucciones de duración variable.
Arquitectura de Sistemas Paralelos I.
2
• Duración de una U.F.: número de ciclos desde que empieza la fase EX hasta que se
produce un dato (como suponemos todos los bypasses en el DLX, entonces el nº
c.bq. por RAW coincide con la Duración-1).
• Intervalo de repetición/iniciación: número de ciclos entre el lanzamiento de 2
instrucciones del mismo tipo. Ej: si está segmentada vale 1.
Unidad Funcional
Fase
Duración % SPEC- Intervalo de
FP
ALU entera simple
Carga de memoria(Ent/FP)
Suma / Resta FP
Multiplicación (Ent/FP)
División (Ent/FP)
EX
EX,MEM
A1, A2
M1,…,M5
D1,…,D20
1
2
2
5
20
7.0 / 3.0
1.0/ 8.0
0.0/ 0.4
iniciación
1
1
1
1
20 (no
segmentada)
Para SPEC-INT el % de instr MUL es 0.02% y de DIV es prácticamente 0%
• Aparecen los riesgos WAW. Ej: MULTU R1, R2, R3 BEQZ... ADD R1, R4, R5
• Los ciclos bloqueo por RAW crecen. Tip. CPIdatos(prog FP) >> CPIdatos(prog INT)
• Aparecen bloqueos estructurales al no haber una duración fija de la cadena pipeline.
En el DLX sin planif dinámica los consideraremos todos (así lo hace WINDLX). Es
decir, los recursos (reg temp) de una fase no pueden estar replicados para 2 instr.
2.10. Instrucciones de duración variable.
Arquitectura de Sistemas Paralelos I.
3
INSTR. PUNTO FLOTANTE EN EL DLX
• Formato instrucciones DLX.
ADDD Dd,Da,Db
ADDF Fd,Fa,Fb
SUBD Dd,Da,Db
SUBF Fd,Fa,Fb
Add double-precision numbers
Add single-precision numbers
Subtract double-precision numbers
Subtract single-precision numbers.
MULTD Dd,Da,Db
MULTF Fd,Fa,Fb
Multiply double-precision Floating point numbers
Multiply single-precision Floating point numbers
DIVD Dd,Da,Db
DIVF Fd,Fa,Fb
Divide double-precision Floating point numbers
Divide single-precision Floating point numbers
CVTF2D Dd,Fs
CVTD2F Fd,Ds
CVTF2I Fd,Fs
CVTI2F Fd,Fs
CVTD2I Fd,Ds
CVTI2D Dd,Fs
Converts from type single-precision to type double-precision
Converts from type double-precision to type single-precision
Converts from type single-precision to type integer
Converts from type integer to type single-precision
Converts from type double-precision to type integer
Converts from type integer to type double-precision
__D Da,Db
Double-precision compares: "__" may be EQ, NE, LT, GT, LE or GE; sets
comparison bit in FP status register
Single-precision compares: "__" may be EQ, NE, LT, GT, LE or GE; sets
comparison bit in FP status register
__F Fa,Fb
BFPT Dest
BFPF Dest
Test comparison bit in the FP status register (true) and branch; 16-bit offset from PC
Test comparison bit in the FP status register(false) and branch;16-bit offset from PC
2.10. Instrucciones de duración variable.
Arquitectura de Sistemas Paralelos I.
4
• Registros de punto flotante en el DLX.
ƒ Hay 32 registros de simple precisión flotante: de F0 a F31. Tamaño 32 bit
según IEEE754 (float de lenguaje C).
ƒ Estos 32 registros se agrupan de 2 en 2 para formar 16 registros de doble
precisión flotante con índice par: F0, F2, … F30. F0(double)=[F0,F1].
Tamaño 64 bit según IEEE754 (double de lenguaje C). NOTA: el tamaño de 64
bits provoca algunas dificultades en la implementación DLX, que no vamos a
considerar.
• Directivas .double y .float para declaración de variables FP en memoria.
Ejemplo: Cronograma del código siguiente:
LD
F4, 0(R2)
MULTD F0, F4, F6
ADDD F2, F0, F8
SD
0(R2), F2
Nota: Cálculo aproximado y rápido de c.bq. de datos: 1 + 4 + (1-1) = 5. (Duración-1
por cada RAW. El -1 último por Store). Es aprox. porque algunos c.bq. pueden
enmascararse. Además pueden aparecer bloqueos estructurales.
2.10. Instrucciones de duración variable.
Arquitectura de Sistemas Paralelos I.
5
Descargar