Frage

Dies ist speziell im Zusammenhang mit ARM Neon SIMD-Codierung. Ich bin mit ARM Neon instrinsics für bestimmte Modul in einem Videodecoder. Ich habe ein vektorisiert Daten wie folgt:

Es gibt vier 32-Bit-Elemente in einem Neon-Register - sagen wir, Q0 - was der Größe 128 Bit ist.

3B 3A 1B 1A

Es gibt noch vier weitere, 32-Bit-Elemente in anderen Neon-Register etwa Q1, die der Größe 128 Bit ist.

3D 3C 1D 1C

Ich mag die letzten Daten, um sein, wie unten dargestellt:

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

Was Neon instrinsics können die gewünschten Daten, um erreichen?

War es hilfreich?

Lösung

Wie wäre es etwa so:

  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 der Theorie dies nur zwei Bewegungsbefehle kompilieren sollte, weil die vget_high und vget_low nur die 128 Q-Bit-Register neu zu interpretieren als zwei 64-Bit-D-Register. vcombine OTOH nur compiliert auf einen oder zwei Züge (abhängig von der Registerzuweisung).

Oh - und die Reihenfolge der ganzen Zahlen in der Ausgabe könnte genau um den falsche Weg. Wenn dies der Fall tauschen nur die Argumente vcombine_s32.

Andere Tipps

Denken Sie daran, jedes Q-Register besteht aus zwei D-Register, zum Beispiel die geringe Teil Q0 ist d0 und der hohe Teil d1. Also in der Tat ist dieser Vorgang nur d0 und d3 Swapping (oder d1 und d2, ist es nicht ganz aus der Datenpräsentation löschen). Es gibt sogar eine Swap-Anweisung in einer Anweisung zu tun!

Disclaimer:. Ich weiß nicht, Neon-Spezifika (I in der Montage direkt Code), obwohl ich überrascht sein würde, wenn dies nicht mit intrinsics getan werden könnte

Es sieht aus wie Sie in der Lage sein sollten, die VTRN Anweisung (z vtrnq_u32) dafür zu verwenden.

Pierre richtig ist.

VSWP d0, d3

, das tun.

@Pierre: Ich lese die Post über NEON auf Ihrem Blog vor einigen Monaten. Ich war angenehm überrascht, dass es jemand wie ich war - das Schreiben von Hand optimiert Montagecodes, ARM und NEON. Schön zu sehen, Sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top