A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Módulo VIII Intrínsecas WMMX. 2 Funções Intrínsecas  Funções que executam as instruções Wireless MMX  Sintaxe no formato da linguagem “C”  Trabalham.

Apresentações semelhantes


Apresentação em tema: "1 Módulo VIII Intrínsecas WMMX. 2 Funções Intrínsecas  Funções que executam as instruções Wireless MMX  Sintaxe no formato da linguagem “C”  Trabalham."— Transcrição da apresentação:

1 1 Módulo VIII Intrínsecas WMMX

2 2 Funções Intrínsecas  Funções que executam as instruções Wireless MMX  Sintaxe no formato da linguagem “C”  Trabalham principalmente com o tipo __m64  Fácil utilização  Localizadas em “mmintrin.h”  Só funcionam com o compilador Intel  O compilador deve possuir a chave /QTPxsc3 Nem todas as instruções Wireless MMX são suportadas como intrínsecas, para melhor desempenho, escreva seu código em assembly

3 3 Configurando o compilador Intel C:\Program Files\Microsoft eMbedded C++ 4.0\EVC\wce420\bin Nos arquivos fontes que usam intrinsecas WMMX inclua #include “mmintrin.h” No Microsoft IDE, Tools->Options, aba Directories, selecione Include files e inclua o diretório:

4 4 Tipos de dado Wireless MMX™  A tecnologia Intel® Wireless MMX™ define 3 tipos de dados empacotados e uma double-world 64bit (__m64)  Elementos com dados empacotados são inteiros ponto fixo que podem ser com ou sem sinal

5 5 O Tipo _ _m64  Tipo especial de dados WMMX  Somente o compilador Intel reconhece este tipo  Compilador Intel armazena preferencialmente as variáveis desse tipo em registradores WMMX (wRn)  __m64 pode armazenar  oito valores de 1 byte (8 bits)  quatro valores de 2 bytes (16 bits)  dois valores de 4 bytes (32 bits)  um valor de 8 bytes (64 bits)

6 6 O Tipo _ _m64  Só pode ser utilizado nas seguintes situações  Um dos lados de uma atribuição  Como um valor de retorno  Parâmetro  Não pode ser utilizado em outras expressões aritméticas, como “+”, “-”, etc  Pode ser utilizado como objetos em agregações (como unions)  Nas funções intrínsecas é suportado nos dois lados de uma instrução de atribuição, como  Parâmetro de uma chamada a uma função  Valor de retorno de uma chamada a uma função

7 7 Sintaxe das funções intrínsecas data_type intrinsic_name (parameters); É o tipo do retorno, Geralmente void, int, ou __m64. Pode retornar outros tipos de dados É o nome da intrínseca. É como uma função que pode ser usada no código C/C++ Representa os parâmetros requeridos por cada intrínseca

8 8 Nomenclatura das funções _mm_intrin_suffix _intrin: Indica a operação intrínseca, por exemplo, add para adição e sub para subtração Exemplo: _mm_add_pi8 _mm_ror_pi16 _mm_and_si64 Denota o tipo operado pela função. A primeira ou as duas primeiras letras denotam como o dado será empacotado (p), ou escalar (s). As letras remanescentes denotam o tipo: i64 - inteiro 64 bit com sinal u64 - inteiro 64 bit sem sinal i32 - inteiro 32 bit com sinal u32 - inteiro 32 bit sem sinal i16 - inteiro 16 bit com sinal u16 - inteiro 16 bit sem sinal i8 - inteiro 8 bit com sinal u8 - inteiro 8 bit sem sinal

9 9 Exemplo de utilização de Instrínsecas void soma_vetor(INT16* vet1, INT16* vet2, INT16* vet3, int tam_vet) { for(int i=0; i< tam_vet; i+=4) { __m64 &aux = *(__m64*)&vet3[i]; aux = mm_add_pi16( *(__m64*)&vet1[i], *(__m64*)&vet2[i]); } return; } Tenha muito cuidado com o alinhamento dos dados, um percurso desalinhado no vetor gera uma exceção

10 10 Funções intrínsecas Aritméticas  Soma: 8, 16 ou 32 bits com ou sem sinal  Subtração: 8, 16 ou 32 bits com ou sem sinal  Multiplicação: 16 bits com ou sem sinal  Acumulação: 8, 16 ou 32 bits sem sinal  Multiplicação com Acumulador: 16 ou 32 bits com ou sem sinal

11 11 NomeInstruçãoSinal Argumento:Resultado: Nº ValoresBits/ValorNº ValoresBits/Valor _mm_add_pi8WADDB _mm_add_pi16WADDH _mm_add_pi32WADDW _mm_adds_pi8WADDBSSSim 8888 _mm_adds_pi16WADDHSSSim 4164 _mm_adds_pi32WADDWSSSim 2322 _mm_adds_pu8WADDBUSNão 8888 _mm_adds_pu16WADDHUSNão 4164 _mm_adds_pu32WADDWUSNão 2322 Funções intrínsecas Aritméticas - Adição

12 12 NomeInstruçãoSinal Argumento:Resultado: Nº ValoresBits/ValorNº ValoresBits/Valor _mm_sub_pi8WSUBB _mm_sub_pi16WSUBH _mm_sub_pi32WSUBW _mm_subs_pi8WSUBBSSSim 8888 _mm_subs_pi16WSUBHSSSim 4164 _mm_subs_pi32WSUBWSSSim 2322 _mm_subs_pu8WSUBBUSNão 8888 _mm_subs_pu16WSUBHSNão 4164 _mm_subs_pu32WSUBWUSNão 2322 Funções intrínsecas Aritméticas - Subtração

13 13 NomeInstruçãoSinal Argumento:Resultado: Nº ValoresBits/ValorNº ValoresBits/Valor _mm_madd_pi16WMADDS _mm_madd_pu16WMADDUNão _mm_mulhi_pi16WMULSHSim 4164 _mm_mulhi_pu16WMULUHSim 4164 _mm_mullo_pi16 WMULSL WMULUL Funções intrínsecas Aritméticas - Multiplicação

14 14 NomeInstruçãoSinal Argumento:Resultado: Nº ValoresBits/ValorNº ValoresBits/Valor _mm_mac_pi16WMACSSim 4164 _mm_mac_pu16WMACUNão 4164 _mm_macz_pi16WMACSZSim 4164 _mm_macz_pu16WMACUZNão 4164 _mm_mia_si64TMIASim _mm_miaph_si64TMIAPHSim _mm_miabb_si64TMIABBSim _mm_miabt_si64TMIABTSim _mm_miatb_si64TMIATBSim _mm_miatt_si64TMIATTSim Funções intrínsecas Aritméticas – Multiplicação com acumulação

15 15 NomeInstruçãoSinal Argumento:Resultado: Nº ValoresBits/ValorNº ValoresBits/Valor _mm_acc_pu8WACCBNão 8818 _mm_acc_pu16WACCHNão 4161 _mm_acc_pu32WACCWNão 2321 Funções intrínsecas Aritméticas – Acumulação

16 16 Funções intrínsecas de deslocamento  Deslocamento lógico para a esquerda: 16, 32 ou 64 bits  Deslocamento lógico para a direita: 16, 32 ou 64 bits  Deslocamento aritmético para a direita: 16, 32 ou 64 bits  Rotação para a direita: 16, 32 ou 64 bits

17 17 NomeDireçãoTipoInstrução _mm_sll_pi16EsquerdaLógicoWSLLH _mm_slli_pi16EsquerdaLógicoComposto _mm_sll_pi32EsquerdaLógicoWSLLW _mm_slli_pi32EsquerdaLógicoComposto _mm_sll_si64EsquerdaLógicoWSLLD _mm_slli_si64EsquerdaLógicoComposto _mm_sra_pi16DireitaAritméticaWSRAH _mm_srai_pi16DireitaArithmeticComposto _mm_sra_pi32DireitaAritméticaWSRAW _mm_srai_pi32DireitaAritméticaComposto _mm_sra_si64DireitaAritméticaWSRAD _mm_srai_si64DireitaAritméticaComposto Funções intrínsecas de deslocamento

18 18 NomeDireçãoTipoInstrução _mm_srl_pi16DireitaLógicoWSRLH _mm_srli_pi16DireitaLógicoComposto _mm_srl_pi32DireitaLógicoWSRLW _mm_srli_pi32DireitaLógicoComposto _mm_srl_si64DireitaLógicoWSRLD _mm_srli_si64DireitaLógicoComposto _mm_ror_pi16Rotação DireitaLógicoWRORH _mm_ror_pi32Rotação DireitaLógicoWRORW _mm_ror_si64Rotação DireitaLógicoWRORD _mm_rori_pi16Rotação DireitaLógicoComposto _mm_rori_pi32Rotação DireitaLógicoComposto _mm_rori_si64Rotação DireitaLógicoComposto Funções intrínsecas de deslocamento

19 19 Funções intrínsecas lógicas  AND bit a bit com valores __m64  NOT Lógico com valores __m64  OR bit a bit com valores __m64  XOR bit a bit com valores __m64 NomeOperaçãoInstrução _mm_and_si64E binárioWAND _mm_andnot_si64Negação LógicaWANDN _mm_or_si64OU binárioWOR _mm_xor_si64OU exclusivo binárioWXOR

20 20 Funções intrínsecas de comparação  Igualdade: 8, 16 ou 32 bits  Maior: 8, 16 ou 32 bits com ou sem sinal NomeComparação Nº de Elementos Tamanho do Elemento em Bits Instrução _mm_cmpeq_pi8 igualdade 88WCMPEQB _mm_cmpeq_pi16 igualdade 416WCMPEQH _mm_cmpeq_pi32 igualdade 232WCMPEQW _mm_cmpgt_pi8 maior com sinal 88WCMPGTSB _mm_cmpgt_pu8 maior sem sinal 88WCMPGTUB _mm_cmpgt_pi16 maior com sinal 416WCMPGTSH _mm_cmpgt_pu16 maior sem sinal 416WCMPGTUH _mm_cmpgt_pi32 maior com sinal 232WCMPGTSW _mm_cmpgt_pu32 maior sem sinal 232WCMPGTUW

21 21 Funções intrínsecas de empacotamento PACK/UNPACK  Empacotamento: 16, 32 ou 64 bits com ou sem sinal com saturação  Intercalação: 8, 16 ou 32 bits  Desempacotamento: 8, 16 ou 32 bits com propagação do sinal ou de zeros

22 22 Funções intrínsecas de empacotamento NomeInstruçãoOperaçãoSinalSaturação _mm_packs_pi16WPACKHSSEmpacotarSim _mm_packs_pi32WPACKWSSEmpacotarSim _mm_packs_pu16WPACKHUSEmpacotarNãoSim _mm_unpackhi_pi8WUNPCKIHBAlternar-- _mm_unpackhi_pi16WUNPCKIHHAlternar-- _mm_unpackhi_pi32WUNPCKIHWAlternar-- _mm_unpacklo_pi8WUNPCKILBAlternar-- _mm_unpacklo_pi16WUNPCKILHAlternar-- _mm_unpacklo_pi32WUNPCKILWAlternar-- _mm_packs_si64WPACKDSSEmpacotarSim _mm_packs_su64WPACKDUSEmpacotarNãoSim _mm_packs_pu32WPACKWUSEmpacotarNãoSim

23 23 Funções intrínsecas de empacotamento NomeInstruçãoOperaçãoSinalSaturação _mm_unpackeh_pi8WUNPCKEHSBEstender SinalSimNão _mm_unpackeh_pi16WUNPCKEHSHEstender SinalSimNão _mm_unpackeh_pi32WUNPCKEHSWEstender SinalSimNão _mm_unpackeh_pu8WUNPCKEHUBEstender zeroNão _mm_unpackeh_pu16WUNPCKEHUHEstender zeroNão _mm_unpackeh_pu32WUNPCKEHUWEstender zeroNão _mm_unpackel_pi8WUNPCKELSBEstender SinalSimNão _mm_unpackel_pi16WUNPCKELSHEstender SinalSimNão _mm_unpackel_pi32WUNPCKELSWEstender SinalNãoNo _mm_unpackel_pu8WUNPCKELUBEstender SinalNo _mm_unpackel_pu16WUNPCKELUHEstender SinalNo _mm_unpackel_pu32WUNPCKELUWEstender zeroNo

24 24 Funções intrínsecas de ajuste (SET/GET)  Alterar conteúdo de valores __m64:  8 bits, 16 bits, 32 bits e zero  Alterar o valor do registrador diretamente  Pegar o valor do registrador

25 25 Funções intrínsecas de ajuste NomeOperaçãoNº EltosInstruçãoTam. EltoSinalReveso _mm_setzero_si64Zero1WZERO64Não _mm_set_pi32Valores Inteiros2Composite32Não _mm_set_pi16Valores Inteiros4Composite16Não _mm_set_pi8Valores Inteiros8Composite8Não _mm_set1_pi32Valores Inteiros2TBCSTW32SimNão _mm_set1_pi16Valores Inteiros4TBCSTH16SimNão _mm_set1_pi8Valores Inteiros8TBCSTB8SimNão _mm_setr_pi32Valores Inteiros2Composite32NãoSim _mm_setr_pi16Valores Inteiros4Composite16NãoSim _mm_setr_pi8Valores Inteiros8Composite8NãoSim _mm_setwcxRegistrador--TMCR-- _mm_getwcxPega registrador--TMRC--

26 26 Funções intrínsecas gerais  Extração de valores de uma valor __m64: 8, 16 ou 32 bits  Inserção de valores num valor __m64: 8, 16 ou 32 bits  Cálculo do máximo de valores: 8, 16 ou 32 bits com ou sem sinal  Cálculo do mínimo de valores: 8, 16 ou 32 bits com ou sem sinal  Criação de máscaras: 8, 16 ou 32 bits  Cálculo de médias: 8 ou 16 bits  Cálculo de soma absoluta de diferenças  Conversão de tipos para __m64

27 27 NomeOperaçãoInstruçãoSinal _mm_extract_pi8Extrai um de oito bytesTEXTRMSBSim _mm_extract_pi16Extrai uma de quatro meia-wordsTEXTRMSHSim _mm_extract_pi32Extrai uma of duas wordsTEXTRMSWSim _mm_extract_pu8Extrai um de oito bytesTEXTRMUBNão _mm_extract_pu16Extrai uma de quatro meia-wordsTEXTRMUHNão _mm_extract_pu32Extrai uma de duas wordsTEXTRMUWNão _mm_insert_pi8Insere um byteTINSRB-- _mm_insert_pi16Insere uma meia wordTINSRH-- _mm_insert_pi32Insere uma wordTINSRW-- _mm_max_pi8Calcula o máximoWMAXSB _mm_max_pi16Calcula o máximoWMAXSH _mm_max_pi32Calcula o máximoWMAXSW Funções intrínsecas gerais

28 28 NomeOperaçãoInstruçãoSinal _mm_max_pu8Calcula o máximo, sem sinalWMAXUB _mm_max_pu16Calcula o máximo, sem sinalWMAXUH _mm_max_pu32Calcula o máximo, sem sinalWMAXUW _mm_min_pi8Calcula o mínimoWMINSB _mm_min_pi16Calcula o mínimoWMINSH _mm_min_pi32Calcula o mínimoWMINSW _mm_min_pu8Calcula o mínimo, sem sinalWMINUB _mm_min_pu16Calcula o mínimo, sem sinalWMINUH _mm_min_pu32Calcula o mínimo, sem sinalWMINUW _mm_movemask_pi8Cria uma máscara de 8 bitsTMOVMSKB _mm_movemask_pi16Cria uma máscara de 16 bitsTMOVMSKH _mm_movemask_pi32Cria uma máscara de 32 bitsTMOVMSKW _mm_shuffle_pi16Retorna uma combinaçãod e 4 meia-wordsWSHUFH Funções intrínsecas gerais

29 29 NomeOperaçãoInstruçãoSinal _mm_avg_pu8Calcula a média arredondadaWAVG2BR _mm_avg_pu16Calcula a média arredondadaWAVG2HR _mm_avg2_pu8Calcula a média arredondadaWAVG2B _mm_avg2_pu16Calcula a média sem arredondamentoWAVG2H _mm_sad_pu8Calcula a soma das diferenças absolutasWSADBZ _mm_sad_pu16Calcula a soma das diferenças absolutasWSADHZ _mm_sada_pu8Acumula a soma das diferenças absolutasWSADB _mm_sada_pu16Acumula a soma das diferenças absolutasWSADH _mm_align_si64Extrai um valor 64 bitsWALIGNI/WALIGNR-- _mm_cvtsi64_m64TransfereTMCRR-- _mm_cvtm64_si64TransfereTMRRC-- _mm_cvtsi32_si64Converte de inteiroTMCRR-- _mm_cvtsi64_si32Converte para inteiroTMRRC-- Funções intrínsecas gerais

30 30 Bibliografia  Intel® Wireless MMX™ Technology Developer Guide - Order Number:

31 31 Módulo VIII Laboratório


Carregar ppt "1 Módulo VIII Intrínsecas WMMX. 2 Funções Intrínsecas  Funções que executam as instruções Wireless MMX  Sintaxe no formato da linguagem “C”  Trabalham."

Apresentações semelhantes


Anúncios Google