Convenção para exibição de registros vetoriais
Existe uma convenção para exibir / gravar registros grandes, como os disponíveis no conjunto de instruções do Intel AVX?
Por exemplo, se você tiver 1 no byte menos significativo e 20 no byte mais significativo e 0 em outro lugar de umxmm
registre, para uma exibição em bytes é o seguinte preferido (little-endian):
[1, 0, 0, 0, ..., 0, 20]
ou é o preferido:
[20, 0, 0, 0, ..., 0, 1]
Da mesma forma, ao exibir registros como compostos de itens de dados maiores, a mesma regra é aplicada? Por exemplo, para exibir o registro como DWORDs, suponho que cada DWORD ainda seja escrito da maneira usual (big-endian), mas qual é a ordem dos DWORDS:
[0x1, 0x0, ..., 0x14]
vs
[0x14, 0x0, ..., 0x1]
Discussão$7Por exemplo, se você tiver 1 no byte menos significativo e 20 no byte mais significativo e 0 em outro lugar de um8$long
ouint
ou o que quer que em C seja independente de endianness). Endianness aparece na interface de memória do registrador <->, e aqui estou perguntando sobre os dados já registrados.
É possível que existam outras respostas, como saída que depende de endianness (e a resposta de Paul R pode ser uma, mas não sei dizer).
LSE First$13 registre, para uma exibição em bytes é o seguinte preferido (little-endian):14$
Também é interessante em arquiteturas little endian, pois a saída corresponde à representação na memória do mesmo vetor armazenado na memória.
MSE primeiroA principal vantagem aqui parece ser que a saída para elementos menores está na mesma ordem que para tamanhos maiores (somente com agrupamentos diferentes). Por exemplo, para um vetor de 4 bytes na notação MSB[0x4, 0x3, 0x2, 0x1]
, a saída para elementos de byte, word e dword seria:
[0x4, 0x3, 0x2, 0x1] [0x0403, 0x0201] [0x04030201]
Essencialmente, mesmo a partir da saída de bytes, você pode simplesmente "ler" a saída da palavra ou dword, ou vice-versa, pois os bytes já estão na ordem usual do MSB de primeira exibição de números. Por outro lado, a saída correspondente para o LSE-first é:
[0x1, 0x2, 0x3, 0x4] [0x0201, 0x0403] [0x04030201]
Observe que cada camada passa por trocas em relação à linha acima, por isso é muito mais difícil ler valores maiores ou menores. Você precisaria confiar mais na saída do elemento mais natural para o seu problema.
Esse formato também tem a vantagem de que, nas arquiteturas BE, a saída corresponde à representação na memória do mesmo vetor armazenado na memória3.
A Intel usa o MSE primeiro em seus manuais.
1 Menos significativoElemento
2 Essas numerações não são apenas para fins de documentação - elas são arquitetonicamente visíveis, por exemplo, em máscaras aleatórias.
3 É claro que essa vantagem é minúscula em comparação com a vantagem correspondente do LSE-first nas plataformas LE, já que o BE está quase morto em hardware SIMD de commodity.