Instituto de Computação
Universidade Estadual de Campinas
Conjunto de
Instruções
Multimídia
Celso Tetsuo Nagase Suzuki
RA 004859
[email protected]
Disciplina MO401
Arquitetura de Computadores
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
2
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
3
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
4
Instruções Multimídia

Dados empacotados
Novembro de 2005
Conjunto de Instruções Multimídia
8
Instruções Multimídia

Operações aritméticas
Novembro de 2005
Conjunto de Instruções Multimídia
9
Instruções Multimídia

Shift Left

Shift Right
Novembro de 2005
Conjunto de Instruções Multimídia
11
Instruções Multimídia

Empacotamento de dados
Novembro de 2005
Conjunto de Instruções Multimídia
12
Instruções Multimídia

Comparação
Novembro de 2005
Conjunto de Instruções Multimídia
14
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
15
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
16
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
17
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
18
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
19
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
20
Extensões multimídia x86

SSE3 (Intel – 2004)
 13 novas instruções.
 Operações horizontais.
Novembro de 2005
Conjunto de Instruções Multimídia
21
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
22
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
23
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
3200+
Sempron
Mobile 2800+
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)
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)
ICC
GCC
Novembro de 2005
Conjunto de Instruções Multimídia
24
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
25
Download

Conjunto de Instruções Multimídia