Convención para mostrar registros vectoriales

¿Existe una convención para mostrar / escribir registros grandes, como los disponibles en el conjunto de instrucciones Intel AVX?

Por ejemplo, si tiene 1 en el byte menos significativo, 20 en el byte más significativo y 0 en otro lugar de unxmm registrarse, para una visualización en bytes es el siguiente preferido (little-endian):

[1, 0, 0, 0, ..., 0, 20]

o se prefiere esto:

[20, 0, 0, 0, ..., 0, 1]

Del mismo modo, cuando se muestran registros como los que se componen de elementos de datos más grandes, ¿se aplica la misma regla? Por ejemplo, para mostrar el registro como DWORD, supongo que cada DWORD todavía se escribe de la manera habitual (big-endian), pero cuál es el orden de las DWORD:

[0x1, 0x0, ..., 0x14]

vs

[0x14, 0x0, ..., 0x1]
Discusión

$7Por ejemplo, si tiene 1 en el byte menos significativo, 20 en el byte más significativo y 0 en otro lugar de un8$long oint o lo que sea en C son independientes de endianness). Endianness aparece en la interfaz de memoria de registro <->, y aquí estoy preguntando acerca de los datos que ya están en un registro.

Es posible que existan otras respuestas, como la salida que depende de la resistencia (y la respuesta de Paul R puede ser una, pero no puedo decirlo).

LSE Primero

$13 registrarse, para una visualización en bytes es el siguiente preferido (little-endian):14$

También es bueno en pequeñas arquitecturas endian ya que la salida coincide con la representación en memoria del mismo vector almacenado en la memoria.

MSE Primero

La principal ventaja aquí parece ser que la salida para elementos más pequeños está en el mismo orden que para tamaños más grandes (solo con agrupación diferente). Por ejemplo, para un vector de 4 bytes en notación MSB[0x4, 0x3, 0x2, 0x1], la salida para los elementos de bytes, los elementos de palabra y dword serían:

[0x4, 0x3, 0x2, 0x1] [0x0403, 0x0201] [0x04030201]

Esencialmente, incluso desde el byte de salida puede simplemente "leer" la salida de word o dword, o viceversa, ya que los bytes ya están en el primer orden habitual de MSB para la visualización de números. Por otro lado, la salida correspondiente para LSE-first es:

[0x1, 0x2, 0x3, 0x4] [0x0201, 0x0403] [0x04030201]

Tenga en cuenta que cada capa sufre intercambios en relación con la fila que se encuentra sobre ella, por lo que es mucho más difícil leer valores más grandes o más pequeños. Debería confiar más en generar el elemento más natural para su problema.

Este formato también tiene la ventaja de que en arquitecturas BE la salida coincide con la representación en memoria del mismo vector almacenado en la memoria3.

Intel usa MSE primero en sus manuales.

1 Menos significanteElemento

2 Dichas numeraciones no son solo para fines de documentación: son arquitectónicamente visibles, por ejemplo, en máscaras de reproducción aleatoria.

3 Por supuesto, esta ventaja es minúscula en comparación con la ventaja correspondiente de LSE-first en plataformas LE, ya que BE está casi muerto en el hardware SIMD básico.

Respuestas a la pregunta(2)

Su respuesta a la pregunta