200 likes | 309 Views
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.
E N D
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. • Single Instruction, Multiple Data. Conjunto de Instruções Multimídia
Roteiro • Histórico • Instruções Multimídia comuns • Extensões Multimídia x86 • Exemplo • Conclusão 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. Conjunto de Instruções Multimídia
Instruções Multimídia • Dados empacotados Conjunto de Instruções Multimídia
Instruções Multimídia • Operações aritméticas Conjunto de Instruções Multimídia
Instruções Multimídia • Shift Left • Shift Right Conjunto de Instruções Multimídia
Instruções Multimídia • Empacotamento de dados Conjunto de Instruções Multimídia
Instruções Multimídia • Comparação 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. 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. 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. 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. 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). 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. Conjunto de Instruções Multimídia
Extensões multimídia x86 • SSE3 (Intel – 2004) • 13 novas instruções. • Operações horizontais. 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; } Conjunto de Instruções Multimídia
Exemplo 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 • Threshold de uma imagem em níveis de cinza. 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 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. Conjunto de Instruções Multimídia