Upload
alphonso-natal
View
215
Download
0
Tags:
Embed Size (px)
Citation preview
Microarquitecturas de Sistemas Integrados
“Processing the new world of interactive media”The Trimedia VLIW CPU architecture
Benjamín Pérez Carballo
Efraín Tejera Clavijo
Pablo Santos Arozarena
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Qué es Trimedia?
• Familia de procesadores multimedia de Philips
• Basados en CPU-VLIW de altas prestaciones
• El primer producto Trimedia es el TM-1000
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Elementos del TM-1000
• Núcleo CPU-VLIW de altas prestaciones
• Amplias caches de datos e instrucciones
• Interfaz con memoria principal
• periféricos para vídeo, audio y datos
Se trata de un sistema multimedia “on chip” que implementa aplicaciones de vídeo y audio de alta calidad.
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Estructura funcional del TM-1000 (1)
• Procesador
• Memoria SDRAM síncrona
• Circuitería externa adicional para entrada/salida de datos multimedia
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Estructura funcional del TM-1000 (2)
Audio In
Audio Out
I2C Inteface
VLDCoprocessor
Video Out
Video In
Synchronous Serial Interface
Image Coprocessor
VLIW CPU
Main Memory Interface
PCI Interface
SDRAM
Stereo Digital Audio I2S DC-80 kHz
Huffman decoder Slice-at-a-time MPEG 1&2
CCIR601/656YUV 4:2:2
CCIR601/656YUV 4:2:2I2C Bus to Camera, etc.
2-8 ch. Digital AudioI2S DC-80 kHz
PCI Bus
Down & Up ScallingYUV-RGBYUV-RGB
YUV-RGB
V.34 or ISDNFront End
TM - 1000
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Ejemplo de aplicación
• Entrada de vídeo (CCIR601/656)
• Salida directa vídeo• E/S audio estéreo• Interfaz PCI para
comunic. con PC• Comunicaciones de
datos por interfaz V.34
TM - 1000
SDRAM
DAC
CCIR601/656YUV 4:2:2
CCIR601/656YUV 4:2:2
Stereo
Audio in
JTAGV.34 Modem Front End
Audio out
2-8 ch.
PCI Bus
ADC
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
El núcleo CPU-VLIW
• 27 unidades funcionales
• 128 registros de propósito general de 32 bits
• Banco de registros con 15 puertos de lectura y 5 de escritura
Tabla 1. Unidades funcionales de la CPU
Unidad funcional Cantidad
constant 5
Integer ALU 5
load/store 2
DSP ALU 2
DSP MUL 2
Shifter 2
Branch 3
Int/float mul 2
Float ALU 2
Float compare 1
Float sqrt/div 1
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
La instrucción VLIW
• Agrupa un máximo de 5 operaciones
• Cada operación es equivalente a:– Operación simple de un RISC– Operación SIMD– Operación de saturación– Operación de clipping– Combinación de las anteriores
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Caches
• Las instrucciones son comprimidas en la memoria principal y en la cache de instrucciones.
• El TM-1000 dispone de:– 32 kbytes de cache de instrucciones– 16 kbytes de cache de datos
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Operaciones
• Las operaciones se codifican en tres tipos diferentes que a su vez son de diferente tamaño: 26-bit, 34-bit y 42-bit.
• Las operaciones más empleadas se codifican con los tamaños más pequeños para reducir el tamaño total del código
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Pipeline (1)
1 La unidad de búsqueda de instrucción toma una instrucción de la cache de instrucciones
2 La unidad de descompresión descomprime la inst. Y la expande en operaciones de tamaño fijo.
3 La unidad de lectura de operandos y bypass proporciona los 15 operandos requeridos por las 5 operaciones
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Pipeline (2)
4 Las unidades de ejecución ejecutan las operaciones apropiadas
5 Los resultados son escritos en el banco de registros en la etapa de writeback
Instruction Cache (32 Kb)
Instruction Fetch Buffer
Register File (128 x 32)
Decompression Hardware
Issue Register (5 Ops)
Register Routing and Forwarding Network
Operation Routing Network
Execution Unit (27 functions)
……………
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Cómo se agrupan las operaciones?
• El agrupado de las operaciones es tarea del compilador y no existe ninguna unidad hardware de lógica de agrupado en la CPU-VLIW.
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Instruction pipeline (1)
• Etapa de “fetch”– La unidad de búsqueda de instrucción
selecciona una línea de la cache de 64 bytes.– Cada instrucción tiene una cabecera de 10 bits– La cabecera se añade a la instrucción previa
para simplificar la descompresión
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Instruction pipeline (2)
• Etapa de descompresión– La información de cabecera de la instrucción
previa se emplea para colocar los multiplexores apropiados que permitan expander las operaciones comprimidas (de tamaño variable) en campos de operación de tamaño fijo.
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Instruction pipeline (3)
• Etapa de lectura de registros– Cada slot de emisión tiene unos campos de
operandos en registros fijos.– 2 operandos fuente y un registro de guarda se
leen del banco de registros en cada slot de emisión.
– Hay 5 slots de emisión (15 lecturas en reg. file)– La unidad de bypass adelanta el resultado en
esta etapa si fuese necesario.
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Instruction pipeline (4)
• Etapa de ejecución– Asignadas a un slot de emisión en particular– Decodifica el opcode perteneciente a su slot de
emisión.– Ejecuta las operaciones– Escribe el resultado en el bus de escritura.– Si los resultados se requieren en la siguiente
etapa se adelantan inmediatamente– Las excepciones se registran en el registro
PCSW
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Instruction pipeline (5)
• Etapa de “writeback”– Un máximo de 5 resultados se generan en cada
ciclo.– El banco de registros soporta la escritura
simultánea de los 5 registros.
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Caracteristicas VLIW
• Cada instruccion VLIW del Trimedia contiene 5 operaciones.• Operaciones simples tipo RISC u operaciones adaptadas a algoritmos
multimedia.– Tipo RISC
• imin: rdest:=min(rsrc1,rsrc2)– Tipo Multimedia
• quadavg: Cuatro medias de 4 pares de registros de 8 bits contenidos en rsrc1 y rsrc2
• [a,b,c,d]:=[avg(e,i),avg(f,j),avg(g,k),avg(h,l)] donde rdest=[a,b,c,d], rsrc1=[e,f,g,h] y rsrc2=[i,j,k,l]
• Ejecucion condicional de cada operacion.– Un registro destino no se escribe si no se lo permite el LSB del reg. de
protección.– Se usa para eliminar saltos en los IF y en los slots de retardo de los
saltos.
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Saltos y slots de retardo
• El juego de instrucciones del Trimedia incluye tanto saltos condicinales como incondicionales.
• Se pueden ejecutar hasta un maximo de tres saltos por ciclo, con el cuidado por parte del compilador de conseguir que tan solo una de las condiciones de salto sea cierta en un ciclo.
• Las condiciones de saltos son similares las de guarda, pero en este caso el registro de guarda es el registro fuente.
• Cada salto necesita tres slots de retardo, correpondientes a las tres etapas de pipeline previas a la etapa de ejecucion, que es donde se reconoce la veracidad de la condicion de salto.
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Operaciones multimedia (1)
• La mayor parte de las aplicaciones de audio y video, operan con precision de 8 bits.
• Operaciones del tipo Instrucción Unica-Multiples datos (SIMD) operan con subdivisiones de los registros de 32 bits en campos de 8 o 16 bits.
– Aceleracion de la cantidad de operaciones que se pueden hacer por ciclo.
– Algunas operaciones incluyen saturacion, lo que evita tener que introducir excepciones de overflow o incluso operaciones especiales para realizar la saturacion.
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Operaciones multimedia (2)
• Operaciones de empaquetado (pack), mezcla (merge) y extraccion (extract).
– Se utilizan para la alineacion y colocacion de los datos a tratar por operaciones SIMD.
• La inclusion de este tipo de operaciones permite acelerar de manera espectacular los algoritmos usados en multimedia, por lo que se les denomina operaciones multimedia.
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Operaciones en punto flotante, load/stores
• Punto Flotante
– El Trimedia cumple con la norma de aritmetica de punto flotante de precision simple del IEEE.
– Es capaz de lanzar a ejecucion 2 sumas/restas y dos multiplicaciones en punto flotante por ciclo, ademas de una division/raiz quadrada en background.
– Todas las dependencias de datos deben ser resueltas en tiempo de compilacion.
• Load/store
– Soporta load/store de un RISC y la carga y descarga de bytes y media palabra
– Dos load/store por ciclo.
– Sumadores y recursos adicionales en las unidades de load/store
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Pipeline VLIW
Decom. Reg. Read. Exe. Reg Write.Fetch instr.
Decom. Reg Read. Exe 1. Exe 2. Reg. Write.Fetch instr.
Decom. Reg Read. Exe 1. Exe 2. Exe 3.Fetch instr. Reg Write.
Decom. Reg Read. Address. Data Fetch. Align St. UpdFetch instr. Reg Write.
Decom. Reg Read. Jmp Add. Y cond
Fetch instr.
Fetch instr.
Alu, Shift, Fcomp pipe
DSPAlu pipe
FpAlu, Fpmul pipe
Load/Store pipe
Jump pipe
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Código de reconstrucción de un frame para MPEG
Son necesarios: tres sumadores, un desplazador, dos comparaciones, tres loads, y un store por pixel
Void reconstruct (unsigned char *back, unsigned char *forward, char *idct, unsigned char *destination){
int i, temp;
for (i = 0; i < 64; i += 1){
temp = ((back[i] + forward[i] + 1) >> 1) + idct[i];
if (temp > 255)temp = 255;
else if (temp < 0)temp = 0;
destination[i+0] = temp;}
}
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Código de reconstrucción de un frame para MPEG con el bucle desenrollado
void reconstruct (unsigned char *back, unsigned char *forward, char *idct, unsigned char *destination)
{int i, temp;
for (i = 0; i < 64; i += 4){
temp = ((back[i+0] + forward[i+0] + 1) >> 1) + idct[i+0];if (temp > 255) temp = 255;else if (temp < 0) temp = 0;destination[i+0] = temp;
temp = ((back[i+1] + forward[i+1] + 1) >> 1) + idct[i+1];if (temp > 255) temp = 255;else if (temp < 0) temp = 0;destination[i+1] = temp;
temp = ((back[i+2] + forward[i+2] + 1) >> 1) + idct[i+2];if (temp > 255) temp = 255;else if (temp < 0) temp = 0;destination[i+2] = temp;
temp = ((back[i+3] + forward[i+3] + 1) >> 1) + idct[i+3];if (temp > 255) temp = 255;else if (temp < 0) temp = 0;destination[i+3] = temp;
}}
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Operaciones a medida (1)
• Operación quadavyquadavg rsrc1 rsrc2 -> rdest
• rsrc1 = [abcd], rsrc2 = [wxyz], y rdest = [pqrs]
p = (a + w + 1) >> 1
q = (b + x + 1) >> 1
r = (c + y + 1) >> 1
s = (d + z + 1) >> 1
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Operaciones a medida (2)
• Operación dspuquadadduidspuquadaddui rsrc1 rsrc2 -> rdest
• rsrc1 = [efgh], rsrc2 = [stuv], y rdest = [ijkl]
i = uclipi(e + s, 255)
j = uclipi(f + t, 255)
k = uclipi(g + u, 255)
l = uclipi(h + v, 255)
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Operaciones a medida (3)
• Operación uclipi
uclipi (m, n)
{
if (m < 0) return 0;
else if (m > n) return n;
else return m;
}
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Código de reconstrucción de un frame para MPEG con el bucle desenrollado y reordenado
void reconstruct (unsigned char *back, unsigned char *forward, char *idct, unsigned char *destination)
{int i, temp0, temp1, temp2, temp3;
for (i = 0; i < 64; i += 4){ temp0 = ((back[i+0] + forward[i+0] + 1) >> 1);
temp1 = ((back[i+1] + forward[i+1] + 1) >> 1); temp2 = ((back[i+2] + forward[i+2] + 1) >> 1); temp3 = ((back[i+3] + forward[i+3] + 1) >> 1);
temp0 += idct[i+0];if (temp0 > 255) temp0 = 255;else if (temp0 < 0) temp0 = 0;
temp1 += idct[i+1];if (temp1 > 255) temp1 = 255;else if (temp1 < 0) temp1 = 0;
temp2 += idct[i+2];if (temp2 > 255) temp2 = 255;else if (temp2 < 0) temp2 = 0;
temp3 += idct[i+3];if (temp3 > 255) temp3 = 255;else if (temp3 < 0) temp3 = 0;
destination[i+0] = temp0;destination[i+1] = temp1;destination[i+2] = temp2;destination[i+3] = temp3;
}}
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Uso de las operaciones a medida QUADAVG y DSPUQUADADDUI (1)
void reconstruct (unsigned char *back, unsigned char *forward, char *idct, unsigned char *destination)
{int i, temp;
int *i_back = (int *) back;int *i_forward = (int *) forward;int *i_idct = (int *) idct;int *i_dest = (int *) destination;
for (i = 0; i < 16; i += 1){
temp = QUADAVG(i_back[i], i_forward[i]);
temp = DSPUQUADADDUI(temp, i_idct[i]);
i_dest[i] = temp;
}}
Pablo Santos Arozarena, Efraín Tejera Clavijo, Benjamín Pérez Carballo
Uso de las operaciones a medida QUADAVG y DSPUQUADADDUI (2)
Son necesarios: dos operaciones a medida, tres loads, y un store para cuatro pixeles.
void reconstruct (unsigned char *back, unsigned char *forward, char *idct, unsigned char *destination)
{int i;
int *i_back = (int *) back;int *i_forward = (int *) forward;int *i_idct = (int *) idct;int *i_dest = (int *) destination;
for (i = 0; i < 16; i += 1) i_dest[i] = DSPUQUADADDUI(QUADAVG(i_back[i], i_forward[i]),
i_idct[i]);
}