Title: Conjunto de Instru
1Conjunto de Instruções Multimídia
Instituto de Computação Universidade Estadual de
Campinas
Celso Tetsuo Nagase Suzuki RA 004859 celso.suzuki
_at_ic.unicamp.br Disciplina MO401 Arquitetura de
Computadores
2Introdução
- Acelerar a execução de aplicações multimídia.
- Instruções SIMD.
- Single Instruction, Multiple Data.
3Roteiro
- Histórico
- Instruções Multimídia comuns
- Extensões Multimídia x86
- Exemplo
- Conclusão
4Histó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.
5Histó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.
6Histó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.
7Histó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.
8Instruções Multimídia
9Instruções Multimídia
10Instruções Multimídia
11Instruções Multimídia
12Instruções Multimídia
13Instruções Multimídia
14Instruções Multimídia
15Extensõ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.
16Extensõ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.
17Extensõ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.
18Extensõ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.
19Extensõ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).
20Extensões multimídia x86
- 3DNow! Professional (AMD)
- Lançada com a linha de processadores AthlonXP.
- Enhanced 3DNow! SSE.
21Extensões multimídia x86
- SSE3 (Intel 2004)
- 13 novas instruções.
- Operações horizontais.
22Exemplo
- 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 lt npixels
i) if (imageini gt threshold)
imageouti 255 else imageouti
0
23Exemplo
- 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 (i0 iltnpixels i8, imagein8,
imageout8) 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 gt 120
24Exemplo
- 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 3200 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
C - MPixels/s 297 442 396 335
SSE 1924 (6,5x) 1654 (3,7x) 1592 (4,0x) 723 (2,2x)
SSE2 2069 (7,0x) 1654 (3,7x) sem suporte 722 (2,2x)
25Conclusã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.