Onde está o VPERMB no AVX2?

O AVX2 tem muitas coisas boas. Por exemplo, ele possui muitas instruções estritamente mais poderosas que seus precursores. TomaVPERMD: permite transmitir / embaralhar / permutar totalmente arbitrariamente de um vetor de 256 bits de valores de 32 bits para outro, com a permutação selecionável em tempo de execução1. Funcionalmente, isso obsoleta toda uma série de instruções antigas de desempacotamento, transmissão, permuta, reprodução aleatória e troca existentes3.

Feijão fresco.

Então, onde estáVPERMB? Ou seja, a mesma instrução, mas trabalhando em elementos do tamanho de bytes. Ou, nesse caso, onde estáVPERMW, para elementos de 16 bits? Tendo se envolvido com a montagem x86 por algum tempo, é bastante claro que o SSEPSHUFB instrução está praticamente entre as instruções mais úteis de todos os tempos. Pode fazer qualquer permutação possível, transmissão ou shuffle de bytes. Além disso, ele também pode ser usado para realizar 16 pesquisas de tabela paralelas de 4 bits -> 8 bits2.

Infelizmente,PSHUFB não foi estendido para ser uma faixa cruzada no AVX2, portanto, está restrito ao comportamento dentro da faixa. oVPERM as instruções são capazes de fazer o cruzamento aleatório (de fato, "perm" e "shuf" parecem ser sinônimos nos mnemônicos de instruções?) - mas as versões de 8 e 16 bits foram omitidas?

Nem parece haver uma boa maneira de emular esta instrução, enquanto você pode emular facilmente os embaralhamentos de largura maior com embaralhamentos de largura menor (geralmente, é até gratuito: você só precisa de uma máscara diferente).

Não tenho dúvidas de que a Intel está ciente do uso amplo e pesado dePSHUFB, então surge naturalmente a pergunta sobre por que a variante de bytes foi omitida no AVX2. A operação é intrinsecamente mais difícil de implementar em hardware? Existem restrições de codificação forçando sua omissão?

1Por selecionável em tempo de execução, quero dizer que a máscara que define o comportamento de reprodução aleatória vem de um registro. Isso torna a instrução em uma ordem de magnitude mais flexível do que as variantes anteriores que usam uma máscara aleatória imediata, da mesma maneira queadd é mais flexível queinc ou um turno variável é mais flexível que um turno imediato.

2Ou 32 dessas pesquisas no AVX2.

3As instruções mais antigas são ocasionalmente úteis se tiverem uma codificação mais curta ou evitarem carregar uma máscara da memória, mas, funcionalmente, elas são substituídas.

questionAnswers(1)

yourAnswerToTheQuestion