Post on 17-Jan-2016
description
Conjunto de Instruções Multimídia
Instituto de ComputaçãoUniversidade Estadual de Campinas
Celso Tetsuo Nagase SuzukiRA 004859
celso.suzuki@ic.unicamp.br
Disciplina MO401Arquitetura de Computadores
Conjunto de Instruções Multimídia 2Novembro de 2005
Introdução
Acelerar a execução de aplicações multimídia.
Instruções SIMD. Single Instruction, Multiple Data.
Conjunto de Instruções Multimídia 3Novembro de 2005
Roteiro
Histórico Instruções Multimídia comuns Extensões Multimídia x86 Exemplo Conclusão
Conjunto de Instruções Multimídia 4Novembro de 2005
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.
Conjunto de Instruções Multimídia 8Novembro de 2005
Instruções Multimídia Dados empacotados
Conjunto de Instruções Multimídia 9Novembro de 2005
Instruções Multimídia Operações aritméticas
Conjunto de Instruções Multimídia 11Novembro de 2005
Instruções Multimídia Shift Left
Shift Right
Conjunto de Instruções Multimídia 12Novembro de 2005
Instruções Multimídia Empacotamento de dados
Conjunto de Instruções Multimídia 14Novembro de 2005
Instruções Multimídia Comparação
Conjunto de Instruções Multimídia 15Novembro de 2005
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.
Conjunto de Instruções Multimídia 16Novembro de 2005
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.
Conjunto de Instruções Multimídia 17Novembro de 2005
Extensões multimídia x86
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.
SSE (Streaming SIMD Extensions – Intel – 1999)
Conjunto de Instruções Multimídia 18Novembro de 2005
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.
Conjunto de Instruções Multimídia 19Novembro de 2005
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).
Conjunto de Instruções Multimídia 20Novembro de 2005
Extensões multimídia x86 3DNow! Professional (AMD)
Lançada com a linha de processadores AthlonXP.
Enhanced 3DNow! + SSE.
Conjunto de Instruções Multimídia 21Novembro de 2005
Extensões multimídia x86 SSE3 (Intel – 2004)
13 novas instruções. Operações horizontais.
Conjunto de Instruções Multimídia 22Novembro de 2005
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;}
Conjunto de Instruções Multimídia 23Novembro de 2005
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
Conjunto de Instruções Multimídia 24Novembro de 2005
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 43GHz HT
Athlon 643200+
Athlon XP3200+
SempronMobile 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)
Conjunto de Instruções Multimídia 25Novembro de 2005
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.