Conjunto de Instruções Multimídia Instituto de Computação Universidade Estadual de Campinas Conjunto de Instruções Multimídia Celso Tetsuo Nagase Suzuki RA 004859 celso.suzuki@ic.unicamp.br Disciplina MO401 Arquitetura de Computadores
Conjunto de Instruções Multimídia Introdução Acelerar a execução de aplicações multimídia. Instruções SIMD. Single Instruction, Multiple Data. Novembro de 2005 Conjunto de Instruções Multimídia
Conjunto de Instruções Multimídia Roteiro Histórico Instruções Multimídia comuns Extensões Multimídia x86 Exemplo Conclusão Novembro de 2005 Conjunto de Instruções Multimídia
Conjunto de Instruções Multimídia Histórico MAX (Multimedia Acceleration eXtensions) PA-RISC 1.1 (HP) – Primeira arquitetura de processadores de uso geral com instruções multimídia, lançado em Janeiro de 1994. Processador de 80MHz toca vídeos MPEG-1 em tempo real (30 frames por segundo), sem hardware adicional. Novembro de 2005 Conjunto de Instruções Multimídia
Conjunto de Instruções Multimídia Histórico VIS (Visual Instruction Set) SPARC (Sun Microsystems) - Linha de processadores UltraSPARC, em 1994. MDMX (MIPS Digital Media eXtensions) Instruções multimídia para a arquitetura MIPS V (SGI), em Outubro de 1996. Novembro de 2005 Conjunto de Instruções Multimídia
Conjunto de Instruções Multimídia Histórico MMX x86 (Intel) – Linha de processadores Pentium MMX, em Outubro de 1996. MVI (Motion Video Instructions) PCA56 (DEC) – Processador 21164PC, lançado em Março de 1997. Novembro de 2005 Conjunto de Instruções Multimídia
Conjunto de Instruções Multimídia Histórico AltiVec PowerPC (Apple-IBM-Motorola) – Extensão multimídia lançada em 1999 com o processador MPC7400 fabricado pela Motorola. ARMv6 Em 2001 a ARM anunciou instruções multimídia incluídas na arquitetura ARMv6. Novembro de 2005 Conjunto de Instruções Multimídia
Instruções Multimídia Dados empacotados Novembro de 2005 Conjunto de Instruções Multimídia
Instruções Multimídia Operações aritméticas Novembro de 2005 Conjunto de Instruções Multimídia
Instruções Multimídia Operações aritméticas Novembro de 2005 Conjunto de Instruções Multimídia
Instruções Multimídia Shift Left Shift Right Novembro de 2005 Conjunto de Instruções Multimídia
Instruções Multimídia Empacotamento de dados Novembro de 2005 Conjunto de Instruções Multimídia
Instruções Multimídia Permutação Novembro de 2005 Conjunto de Instruções Multimídia
Instruções Multimídia Comparação Novembro de 2005 Conjunto de Instruções Multimídia
Extensões multimídia x86 MMX (Intel - 1996) 57 instruções. Usa os 8 registradores de ponto flutuante já existentes. Somente operações com números inteiros. 8 Packed Bytes, 4 Packed Words, 2 Packed Doublewords e 1 Packed Quadword. Novembro de 2005 Conjunto de Instruções Multimídia
Extensões multimídia x86 3DNow! (AMD - 1998) 21 instruções. Complementa a extensão MMX com operações em números de ponto flutuante de 32 bits. Instrução de prefetch que carrega uma linha do cache L1 com dados do endereço. Novembro de 2005 Conjunto de Instruções Multimídia
Extensões multimídia x86 SSE (Streaming SIMD Extensions – Intel – 1999) Corrige algumas limitações da extensão MMX. 8 novos registradores de 128 bits para operações em números de ponto flutuante de 32 bits. Instruções de prefetch e gravação de dados não temporais. Novembro de 2005 Conjunto de Instruções Multimídia
Extensões multimídia x86 Enhanced 3DNow! (AMD – 1999) Complementa a extensão 3DNow! com 24 novas instruções. Instruções para gravação de dados não temporais, conversão entre dados inteiros e de ponto flutuante e operações matemáticas. Novembro de 2005 Conjunto de Instruções Multimídia
Extensões multimídia x86 SSE2 (Intel – 2001) 144 novas instruções. Suporte a operações com números inteiros nos registradores de 128 bits. 2 números de ponto flutuante de 64 bits empacotados, 16 Packed Bytes, 8 Packed Words, 4 Packed Doublewords, 2 Packed Quadwords. Nos processadores AMD64, o número de registradores de 128 bits foi aumentado para 16 (XMM0 a XMM15). Novembro de 2005 Conjunto de Instruções Multimídia
Extensões multimídia x86 3DNow! Professional (AMD) Lançada com a linha de processadores AthlonXP. Enhanced 3DNow! + SSE. Novembro de 2005 Conjunto de Instruções Multimídia
Extensões multimídia x86 SSE3 (Intel – 2004) 13 novas instruções. Operações horizontais. Novembro de 2005 Conjunto de Instruções Multimídia
Conjunto de Instruções Multimídia Exemplo Threshold de uma imagem em níveis de cinza. void Threshold(u_int16_t imagein[], u_int16_t imageout[], int npixels, u_int16_t threshold) { int i; for (i = 0; i < npixels; i++) if (imagein[i] > threshold) imageout[i] = 255; else imageout[i] = 0; } Novembro de 2005 Conjunto de Instruções Multimídia
Conjunto de Instruções Multimídia Exemplo Threshold de uma imagem em níveis de cinza. void ThresholdSSE2(u_int16_t imagein[], u_int16_t imageout[], int npixels, u_int16_t thr) { int i; max = 255; xmm0 xmm1 for (i=0; i<npixels; i+=8, imagein+=8, imageout+=8) { asm ("movdqa (%0), %%xmm2 \n" : : "r" (imagein)); asm ("pcmpgtw %xmm0, %xmm2 \n"); asm ("pand %xmm1, %xmm2 \n"); asm ("movntdq %%xmm2, (%0) \n" : : "r" (imageout)); } xmm2 > 120 Novembro de 2005 Conjunto de Instruções Multimídia
Conjunto de Instruções Multimídia Exemplo Threshold de uma imagem em níveis de cinza. Compiladores Intel ICC 9.0.021 e GCC 3.4.4. S.O. GNU/Linux CPU Pentium 4 3GHz HT Athlon 64 3200+ Athlon XP Sempron Mobile 2800+ ICC C - MPixels/s 464 465 470 368 SSE 1940 (4,2x) 1655 (3,6x) 1592 (3,4x) 725 (2,0x) SSE2 2069 (4,5x) 1650 (3,6x) sem suporte 723 (2,0x) GCC 297 442 396 335 1924 (6,5x) 1654 (3,7x) 1592 (4,0x) 723 (2,2x) 2069 (7,0x) 722 (2,2x) Novembro de 2005 Conjunto de Instruções Multimídia
Conjunto de Instruções Multimídia Conclusão O uso de instruções SIMD é importante para melhorar a velocidade de aplicações multimídia. Compiladores atuais não otimizam trechos críticos com o mesmo desempenho que a codificação direta usando instruções SIMD. Novembro de 2005 Conjunto de Instruções Multimídia