Domanda

Questa è specificamente legato alla codifica ARM Neon SIMD. Sto usando instrinsics ARM Neon per certo modulo in un video decoder. Ho un dato vectorized come segue:

Ci sono quattro elementi 32 bit in un registro Neon - diciamo, Q0 - che é di dimensioni 128 bit.

3B 3A 1B 1A

Ci sono altri quattro, 32 elementi bit in altro registro Neon esempio Q1 che è di dimensioni 128 bit.

3D 3C 1D 1C

Voglio che i dati definitivi siano in ordine, come illustrato di seguito:

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

instrinsics Cosa Neon può raggiungere l'ordine dei dati desiderato?

È stato utile?

Soluzione

come su qualcosa di simile:

  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);

In teoria questo dovrebbe compilare in soli due istruzioni di movimento per la vget_high e vget_low solo reinterpretano registri Q 128 bit come due registri 64 bit D. vcombine OTOH soli compilazione per una o due mosse (dipende allocazione dei registri).

Oh - e l'ordine dei numeri interi in uscita potrebbe essere esattamente nel modo sbagliato. Se quindi basta scambiare gli argomenti per vcombine_s32.

Altri suggerimenti

Ricordare ogni registro q è costituito da due registri d, ad esempio la parte bassa della q0 è d0 e l'alto d1 parte. Quindi, in realtà, questa operazione è solo scambiando d0 e D3 (o D1 e D2, non è del tutto chiaro dalla presentazione dei dati). C'è anche un'istruzione di swap di farlo in una sola istruzione!

. Disclaimer: Non lo so intrinseci al neon (I direttamente il codice in assembly), anche se mi sarei sorpreso se questo non potrebbe essere fatto utilizzando intrinseche

Sembra che si dovrebbe essere in grado di utilizzare l'istruzione VTRN (ad esempio vtrnq_u32) per questo.

Pierre è giusto.

vswp d0, d3

che farà.

@Pierre: Ho letto il post su NEON sul tuo blog qualche mese fa. Sono stato piacevolmente sorpreso che ci fosse qualcuno come me - scrittura a mano ottimizzati assemblaggio codici, sia ARM e neon. Piacere di vederti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top