Pergunta

Isso está especificamente relacionado à codificação do ARM Neon SIMD. Estou usando o ARM Neon Instrinsics para determinado módulo em um decodificador de vídeo. Eu tenho dados vetorizados da seguinte maneira:

Existem quatro elementos de 32 bits em um registro de néon - digamos, Q0 - que é de tamanho 128 bits.

3B 3A 1B 1A

Existem outros elementos de quatro, 32 bits em outro registro de neon, digamos Q1, que é do tamanho de 128 bits.

3D 3C 1D 1C

Eu quero que os dados finais estejam em ordem, como mostrado abaixo:

1D 1C 1B 1A
3D 3C 3B 3A

O que o Neon Instrinsics pode alcançar a ordem de dados desejada?

Foi útil?

Solução

Que tal algo como isso:

  int32x4_t q0, q1;

  /* split into 64 bit vectors */
  int32x2_t q0_hi = vget_high_s32 (q0);
  int32x2_t q1_hi = vget_high_s32 (q1);
  int32x2_t q0_lo = vget_low_s32 (q0);
  int32x2_t q1_lo = vget_low_s32 (q1);

  /* recombine into 128 bit vectors */
  q0 = vcombine_s32 (q0_lo, q1_lo);
  q1 = vcombine_s32 (q0_hi, q1_hi);

Em teoria, isso deve compilar apenas duas instruções de mover, porque o VGET_HIGH e o VGET_LOW apenas reinterpretam os registros Q de 128 bits como dois registros de 64 bits D. O VCombine OTOH apenas compila com um ou dois movimentos (depende da alocação de registro).

Oh - e a ordem dos números inteiros na saída pode ser exatamente a maneira errada. Nesse caso, basta trocar os argumentos para VCombine_S32.

Outras dicas

Lembre -se de que cada registro Q é composto por dois registros D, por exemplo, a parte baixa do Q0 é D0 e a alta parte D1. Portanto, essa operação está apenas trocando D0 e D3 (ou D1 e D2, ela não está totalmente clara na apresentação de dados). Existe até uma instrução de troca para fazê -lo em uma instrução!

Isenção de responsabilidade: não conheço a Intrinsics Neon (codio diretamente a Assembly), embora fique surpreso se isso não pudesse ser feito usando o Intrinsics.

Parece que você deve poder usar o VTRN Instrução (por exemplo vtrnq_u32) por esta.

Pierre está certo.

VSWP D0, D3

que vai fazer.

@Pierre: Eu li o post sobre Neon em seu blog há vários meses. Fiquei agradavelmente surpreso que houvesse alguém como eu - escrevendo códigos de montagem otimizados à mão, tanto braço quanto neon. É bom te ver.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top