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 primeiro

A 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.

questionAnswers(2)

yourAnswerToTheQuestion