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

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

Intrínsecas WMMX Módulo VIII

Apresentações semelhantes


Apresentação em tema: "Intrínsecas WMMX Módulo VIII"— Transcrição da apresentação:

1 Intrínsecas WMMX Módulo VIII
Wireless MMX: Tecnologia MMX para dispositivos móveis

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 Configurando o compilador Intel
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: C:\Program Files\Microsoft eMbedded C++ 4.0\EVC\wce420\bin

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 7 8 15 16 63 31 32 8 bytes 4 meias words 16 bits 2 words 32 bits 1 valor 64 bits

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 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 Representa os parâmetros requeridos por cada intrínseca
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 Representa os parâmetros requeridos por cada intrínseca É o nome da intrínseca. É como uma função que pode ser usada no código C/C++

8 Nomenclatura das funções
_mm_intrin_suffix 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: _intrin: Indica a operação intrínseca, por exemplo, add para adição e sub para subtração 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 Exemplo: _mm_add_pi8 _mm_ror_pi16 _mm_and_si64

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 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 Funções intrínsecas Aritméticas - Adição
Nome Instrução Sinal Argumento: Resultado: Nº Valores Bits/Valor _mm_add_pi8 WADDB -- 8 _mm_add_pi16 WADDH 4 16 _mm_add_pi32 WADDW 2 32 _mm_adds_pi8 WADDBSS Sim _mm_adds_pi16 WADDHSS _mm_adds_pi32 WADDWSS _mm_adds_pu8 WADDBUS Não _mm_adds_pu16 WADDHUS _mm_adds_pu32 WADDWUS

12 Funções intrínsecas Aritméticas - Subtração
Nome Instrução Sinal Argumento: Resultado: Nº Valores Bits/Valor _mm_sub_pi8 WSUBB -- 8 _mm_sub_pi16 WSUBH 4 16 _mm_sub_pi32 WSUBW 2 32 _mm_subs_pi8 WSUBBSS Sim _mm_subs_pi16 WSUBHSS _mm_subs_pi32 WSUBWSS _mm_subs_pu8 WSUBBUS Não _mm_subs_pu16 WSUBHS _mm_subs_pu32 WSUBWUS

13 Funções intrínsecas Aritméticas - Multiplicação
Nome Instrução Sinal Argumento: Resultado: Nº Valores Bits/Valor _mm_madd_pi16 WMADDS -- 4 16 2 32 _mm_madd_pu16 WMADDU Não _mm_mulhi_pi16 WMULSH Sim _mm_mulhi_pu16 WMULUH _mm_mullo_pi16 WMULSL WMULUL

14 Funções intrínsecas Aritméticas – Multiplicação com acumulação
Nome Instrução Sinal Argumento: Resultado: Nº Valores Bits/Valor _mm_mac_pi16 WMACS Sim 4 16 _mm_mac_pu16 WMACU Não _mm_macz_pi16 WMACSZ _mm_macz_pu16 WMACUZ _mm_mia_si64 TMIA 2 32 1 64 _mm_miaph_si64 TMIAPH _mm_miabb_si64 TMIABB _mm_miabt_si64 TMIABT _mm_miatb_si64 TMIATB _mm_miatt_si64 TMIATT

15 Funções intrínsecas Aritméticas – Acumulação
Nome Instrução Sinal Argumento: Resultado: Nº Valores Bits/Valor _mm_acc_pu8 WACCB Não 8 1 _mm_acc_pu16 WACCH 4 16 _mm_acc_pu32 WACCW 2 32

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 Funções intrínsecas de deslocamento
Nome Direção Tipo Instrução _mm_sll_pi16 Esquerda Lógico WSLLH _mm_slli_pi16 Composto _mm_sll_pi32 WSLLW _mm_slli_pi32 _mm_sll_si64 WSLLD _mm_slli_si64 _mm_sra_pi16 Direita Aritmética WSRAH _mm_srai_pi16 Arithmetic _mm_sra_pi32 WSRAW _mm_srai_pi32 _mm_sra_si64 WSRAD _mm_srai_si64

18 Funções intrínsecas de deslocamento
Nome Direção Tipo Instrução _mm_srl_pi16 Direita Lógico WSRLH _mm_srli_pi16 Composto _mm_srl_pi32 WSRLW _mm_srli_pi32 _mm_srl_si64 WSRLD _mm_srli_si64 _mm_ror_pi16 Rotação Direita WRORH _mm_ror_pi32 WRORW _mm_ror_si64 WRORD _mm_rori_pi16 _mm_rori_pi32 _mm_rori_si64

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 Nome Operação Instrução _mm_and_si64 E binário WAND _mm_andnot_si64 Negação Lógica WANDN _mm_or_si64 OU binário WOR _mm_xor_si64 OU exclusivo binário WXOR

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

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 Funções intrínsecas de empacotamento
Nome Instrução Operação Sinal Saturação _mm_packs_pi16 WPACKHSS Empacotar Sim _mm_packs_pi32 WPACKWSS _mm_packs_pu16 WPACKHUS Não _mm_unpackhi_pi8 WUNPCKIHB Alternar -- _mm_unpackhi_pi16 WUNPCKIHH _mm_unpackhi_pi32 WUNPCKIHW _mm_unpacklo_pi8 WUNPCKILB _mm_unpacklo_pi16 WUNPCKILH _mm_unpacklo_pi32 WUNPCKILW _mm_packs_si64 WPACKDSS _mm_packs_su64 WPACKDUS _mm_packs_pu32 WPACKWUS

23 Funções intrínsecas de empacotamento
Nome Instrução Operação Sinal Saturação _mm_unpackeh_pi8 WUNPCKEHSB Estender Sinal Sim Não _mm_unpackeh_pi16 WUNPCKEHSH _mm_unpackeh_pi32 WUNPCKEHSW _mm_unpackeh_pu8 WUNPCKEHUB Estender zero _mm_unpackeh_pu16 WUNPCKEHUH _mm_unpackeh_pu32 WUNPCKEHUW _mm_unpackel_pi8 WUNPCKELSB _mm_unpackel_pi16 WUNPCKELSH _mm_unpackel_pi32 WUNPCKELSW No _mm_unpackel_pu8 WUNPCKELUB _mm_unpackel_pu16 WUNPCKELUH _mm_unpackel_pu32 WUNPCKELUW

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 Funções intrínsecas de ajuste
Nome Operação Nº Eltos Instrução Tam. Elto Sinal Reveso _mm_setzero_si64 Zero 1 WZERO 64 Não _mm_set_pi32 Valores Inteiros 2 Composite 32 _mm_set_pi16 4 16 _mm_set_pi8 8 _mm_set1_pi32 TBCSTW Sim _mm_set1_pi16 TBCSTH _mm_set1_pi8 TBCSTB _mm_setr_pi32 _mm_setr_pi16 _mm_setr_pi8 _mm_setwcx Registrador -- TMCR _mm_getwcx Pega registrador TMRC

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 Funções intrínsecas gerais
Nome Operação Instrução Sinal _mm_extract_pi8 Extrai um de oito bytes TEXTRMSB Sim _mm_extract_pi16 Extrai uma de quatro meia-words TEXTRMSH _mm_extract_pi32 Extrai uma of duas words TEXTRMSW _mm_extract_pu8 TEXTRMUB Não _mm_extract_pu16 TEXTRMUH _mm_extract_pu32 Extrai uma de duas words TEXTRMUW _mm_insert_pi8 Insere um byte TINSRB -- _mm_insert_pi16 Insere uma meia word TINSRH _mm_insert_pi32 Insere uma word TINSRW _mm_max_pi8 Calcula o máximo WMAXSB _mm_max_pi16 WMAXSH _mm_max_pi32 WMAXSW

28 Funções intrínsecas gerais
Nome Operação Instrução Sinal _mm_max_pu8 Calcula o máximo, sem sinal WMAXUB _mm_max_pu16 WMAXUH _mm_max_pu32 WMAXUW _mm_min_pi8 Calcula o mínimo WMINSB _mm_min_pi16 WMINSH _mm_min_pi32 WMINSW _mm_min_pu8 Calcula o mínimo, sem sinal WMINUB _mm_min_pu16 WMINUH _mm_min_pu32 WMINUW _mm_movemask_pi8 Cria uma máscara de 8 bits TMOVMSKB _mm_movemask_pi16 Cria uma máscara de 16 bits TMOVMSKH _mm_movemask_pi32 Cria uma máscara de 32 bits TMOVMSKW _mm_shuffle_pi16 Retorna uma combinaçãod e 4 meia-words WSHUFH

29 Funções intrínsecas gerais
Nome Operação Instrução Sinal _mm_avg_pu8 Calcula a média arredondada WAVG2BR _mm_avg_pu16 WAVG2HR _mm_avg2_pu8 WAVG2B _mm_avg2_pu16 Calcula a média sem arredondamento WAVG2H _mm_sad_pu8 Calcula a soma das diferenças absolutas WSADBZ _mm_sad_pu16 WSADHZ _mm_sada_pu8 Acumula a soma das diferenças absolutas WSADB _mm_sada_pu16 WSADH _mm_align_si64 Extrai um valor 64 bits WALIGNI/WALIGNR -- _mm_cvtsi64_m64 Transfere TMCRR _mm_cvtm64_si64 TMRRC _mm_cvtsi32_si64 Converte de inteiro _mm_cvtsi64_si32 Converte para inteiro

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

31 Módulo VIII Laboratório


Carregar ppt "Intrínsecas WMMX Módulo VIII"

Apresentações semelhantes


Anúncios Google