Conjunto de Instruções Multimídia

Preview:

DESCRIPTION

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. Introdução. Acelerar a execução de aplicações multimídia. Instruções SIMD. - PowerPoint PPT Presentation

Citation preview

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.

Recommended