SSE4

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

SSE4 (streaming SIMD Extensions 4) é um CPU conjunto de instruções usado na Intel microarquitetura Core e AMD K10 (K8L) . Foi anunciado em 27 de setembro de 2006, no outono de 2006 Intel Developer Forum , com detalhes de vagas em um papel branco ; [1] detalhes mais precisos de 47 instruções tornou-se disponível na Primavera de 2007 Intel Developer Forum , em Beijing ., na apresentação [2 ] SSE4 é totalmente compatível com o software escrito para as gerações anteriores do Intel 64 e IA-32 arquitetura microprocessadores. Todo o software existente continua a funcionar correctamente, sem modificação em microprocessadores que incorporam SSE4, bem como na presença de aplicações existentes e novos que incorporam SSE4. [3] A SSE4 referência de programação está disponível na Intel.

Conteúdo[editar | editar código-fonte]

  • 1 subconjuntos SSE4
  • 2 Nome confusão
  • 3 Novas instruções
    • 3.1 SSE4.1
    • 3.2 SSE4.2
    • 3.3 POPCNT e LZCNT
    • 3.4 SSE4a
  • 4 Referências
  • 5 Ligações externas

Subconjuntos SSE4[editar | editar código-fonte]

Intel SSE4 é composto por 54 instruções. Um subconjunto consistindo de 47 instruções, referidos como SSE4.1 em alguma documentação Intel, está disponível em Penryn . Além disso, SSE4.2, um segundo subconjunto constituído pelos sete instruções restantes, é o primeiro disponível em Nehalem baseados Core i7 . Intel credita feedback dos desenvolvedores como tendo um papel importante no desenvolvimento do conjunto de instruções.

Começando com Barcelona processadores baseados, AMD introduziu o conjunto de instruções SSE4a, que tem 4 instruções SSE4 e 4 novas instruções SSE.

Estas instruções não são encontrados em processadores da Intel que 

suportam SSE4.1 e processadores AMD só começaram a apoiar SSE4.1 e SSE4.2 da Intel (o conjunto de instruções SSE4 completo) no Bulldozer baseados em processadores FX.

Foi adicionado suporte para SSE4a para desalinhadas instruções 

load-operação SSE (que antes exigiam o alinhamento de 16 bytes). [4]

Nome confusão[editar | editar código-fonte]

O que agora é conhecido como SSSE3 (Suplementares Transmissão SIMD Extensions 3), introduzida no Intel Core 2 linha de processadores, foi referido como SSE4 por alguns meios de comunicação até Intel veio com o apelido SSSE3. Internamente dublados Merom novas instruções, a Intel originalmente não pretende atribuir um nome especial para eles, o que foi criticado por alguns jornalistas. [5] Intel finalmente esclarecido a confusão e reservado o nome SSE4 para a sua próxima extensão do conjunto de instruções. [6]

Intel está usando a comercialização prazo HD Boost para se referir a SSE4. [7]

Novas instruções[editar | editar código-fonte]

Ao contrário de todas as iterações anteriores do SSE, SSE4 contém instruções que executam operações que não são específicos para aplicações multimídia. Ele apresenta uma série de instruções cuja ação é determinada por um campo constante e um conjunto de instruções que levam XMM0 como um terceiro operando implícito.

Várias dessas instruções são ativados pelo mecanismo aleatório de ciclo único em Penryn. (Operações aleatórias reordenar bytes dentro de um registrador.)

SSE4.1[editar | editar código-fonte]

Estas instruções foram introduzidas com microarquitetura Penryn , o psiquiatra de 45 nm da Intel arquitetura Core . O suporte é indicado através do CPUID.01H: ECX.SSE41 [Bit 19] bandeira.

Instrução Descrição
 MPSADBW
Calcule oito somas compensação das diferenças absolutas, quatro de cada vez (ou seja, | x 0 -y 0 | + | x 1 -y 1 | + | x 2-y 2 | + | x 3 -y 3 |, | x 0 -y 1 | + | x-y 1 2 | + | x-y 2 3 | + | x-y 3 4 |, ..., | x-y 7, 0 | + | x-y 8 1 | + | x 2 9-y | + | x 3 10-y |); esta operação é importante para alguns HD codecs e permite um 8 × 8 diferença bloco a ser calculado em menos de sete ciclos. [8] Um pouco mais de um operando imediato de três bits indica se y 0 .. y 10 ou y 4. . y 14 deve ser usado a partir do operando destino, os outros dois se x 0 ..x 3 x 4 ..x 7 x 8 ..x 11 ou 15 x 12 ..x deve ser utilizado a partir da fonte.
 PHMINPOSUW
Define o unsigned 16-bit palavra inferior do destino para a palavra de

16 bits sem sinal menor na fonte, e no próximo-de-fundo para o índice da

palavra na fonte. 
 PMULDQ
Embalado multiplicação assinado em dois conjuntos de dois dos quatro

inteiros embalados, o primeiro e terceiro por embalado 4, dando dois embalado resultados de 64 bits.

 PMULLD
Multiplicação assinado Embalado, quatro conjuntos embalados de inteiros
de 32 bits multiplicado para dar 4 embalado resultados de 32 bits. 
 DPPS, DPPD
Produto escalar para AOS (matriz de estruturas) de dados.
Isso leva um operando imediato composta por quatro (ou dois para DPPD) 

bits para selecionar qual das entradas na entrada para se multiplicar e se acumular, e outros quatro (ou dois para DPPD) para selecionar se para

colocar 0 ou o produto escalar em o campo apropriado da saída. 
 BLENDPS, BLENDPD, BLENDVPS,
 BLENDVPD, PBLENDVB, PBLENDW
Cópia condicional de elementos em um local com outro, (para forma

não-V) sobre os bits de um operando imediato, e (para V forma) sobre os bits no registrador XMM0.

 PMINSB, PMAXSB, PMINUW, 
 PMAXUW, PMINUD, PMAXUD, 
 PMINSD, PMAXSD
Embalado mínima / máxima para os diferentes tipos de operando inteiro
 ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD
Valores redondos em um registro de ponto flutuante para números

inteiros, utilizando um dos quatro modos de arredondamento especificados

por um operando imediato 
 INSERTPS, PINSRB, PINSRD / PINSRQ,
 EXTRACTPS, PEXTRB, PEXTRD / PEXTRQ
As instruções INSERTPS e PINSR ler 8, 16 ou 32 bits a partir de uma

localização x86 memória de registo e inseri-lo em um campo no registo destino por um operando imediato, EXTRACTPS e PEXTR ler um campo do registo de origem e inseri-lo em um x86 registrar ou posição de memória. Por exemplo, PEXTRD eax, [XMM0], 1; EXTRACTPS [addr + 4 * eax], XMM1, 1 armazena o primeiro campo de XMM1 no endereço dado pelo primeiro campo de XMM0.

 PMOVSXBW, PMOVZXBW, PMOVSXBD, 
 PMOVZXBD, PMOVSXBQ, PMOVZXBQ, 
 PMOVSXWD, PMOVZXWD, PMOVSXWQ, 
 PMOVZXWQ, PMOVSXDQ, PMOVZXDQ
Embalado sinal / extensão zero a tipos mais amplos
 Ptest
Isto é semelhante à instrução de teste, na medida em que define o

sinalizador Z para o resultado de um AND entre seus operadores: ZF está definido, se DEST E SRC é igual a 0 Além disso, ele define o sinalizador

C se (não DEST) E SRC é igual a zero. 

Isto é equivalente a configurar a bandeira Z se nenhum dos bits mascarados pelo SRC estão definidas, ea bandeira C, se todos os bits mascarados pelo SRC estão definidos.

 PCMPEQQ
Quadword (64 bits) para comparar a igualdade
 PACKUSDW
Converta DWORDs assinados em palavras não assinados com saturação.
 MOVNTDQA
Leia eficiente da área de memória que combina gravação em SSE cadastro; isto é útil para recuperar resultados de periféricos conectados ao barramento de memória.

SSE4.2[editar | editar código-fonte]

SSE4.2 adicionado STTNI (String e texto New Instructions), [9] várias novas instruções que realizam pesquisas de caráter e comparação de dois operandos de 16 bytes de cada vez. Estes foram desenhados (entre outras coisas) para acelerar a análise de XML documentos. [10] É também adicionada uma instrução CRC32 para calcular os controlos de redundância cíclica tal como utilizado em certos protocolos de transferência de dados. Estas instruções foram implementadas pela primeira vez no Nehalem baseados em Intel Core i7 linha de produtos e completar o conjunto de instruções SSE4. O suporte é indicado através do CPUID.01H: ECX.SSE42 [Bit 20] bandeira.

Instrução Descrição
 CRC32
Acumule CRC32 valor C usando o 0x11EDC6F41 polinomial (ou, sem o bit de alta ordem, 0x1EDC6F41). [11] [12]
 PCMPESTRI
Embalado Comparar seqüências explícitas de comprimento, índice de retorno
 PCMPESTRM
Embalado Comparar seqüências explícitas comprimento, Máscara de Retorno
 PCMPISTRI
Embalado Comparar seqüências de comprimento implícita Return Index
 PCMPISTRM
Embalado Comparar seqüências de comprimento implícitas, Máscara de Retorno
 PCMPGTQ
Comparar dados assinados Pacotes de 64 bits para mais de

POPCNT e LZCNT[editar | editar código-fonte]

Estas instruções de operação no número inteiro, em vez de registos SSE, e embora tenha sido introduzido, ao mesmo tempo, não são considerados como fazendo parte do conjunto de instruções SSE4.2; em vez disso, eles têm seus próprios pedaços CPUID dedicado a mostrar o seu apoio. Intel implementa POPCNT começando com o Nehalem microarquitetura e LZCNT começando com o Haswell microarquitetura. AMD implementa tanto início com a microarquitetura Barcelona .

AMD chama este par de instruções avançados Bit Manipulation (ABM) .

Instrução Descrição
 POPCNT
Contagem da população (número de contagem de bits definidos como 1). O suporte é indicado através do CPUID.01H:. ECX.POPCNT [Bit 23] bandeira [13]
 LZCNT
Liderando contagem zero . O suporte é indicado através do CPUID.80000001H:. ECX.ABM [Bit 5] bandeira [14]

O resultado da lzcnt é 31 menos o resultado da BSR (scan reverter bit), exceto quando a entrada é 0. lzcnt produz um resultado de 32, enquanto BSR produz um resultado indefinido (e define a flag zero ). A codificação de lzcnt é semelhante o suficiente para BSR que se lzcnt é realizada em um CPU não apoiá-lo, como processadores da Intel antes de Haswell, ele irá executar a operação de BSR em vez de elevar um erro instrução inválida.

Zeros à direita podem ser contados utilizando a instrução BSF existente.

SSE4a[editar | editar código-fonte]

O grupo instrução SSE4a foi introduzido em AMD Barcelona microarquitetura . Estas instruções não estão disponíveis em processadores Intel. O suporte é indicado através do CPUID.80000001H:. ECX.SSE4A [Bit 6] bandeira [14]

Instrução Descrição
 EXTRQ / INSERTQ
Instruções máscara do turno combinados. [15]
 MOVNTSD / MOVNTSS
Scalar loja streaming de instruções. [16]

Ligações externas[editar | editar código-fonte]

Instruções x86
FPU: FDIV
SIMD: MMXEMMX3DNow!3DNow!+SSE (MMX+) – SSE2SSE3SSSE3SSE4