Frage

Wie die NEON Vergleichsbefehle im Allgemeinen benutzen?

Hier ist ein Fall, ich mag Gebrauch, Größer-als-oder-gleich-zu-Befehl?

Zur Zeit habe ich ein,

int x;
...
...
...
if(x >= 0)
{
....

}

In NEON, ich mag x verwenden, auf die gleiche Weise, nur dass diesmal x ein Vektor ist.

int32x4_t x;

...
...
...

if(vcgeq_s32(x, vdupq_n_s32(0))) // Whats the best way to achieve this effect?
{
....

}
War es hilfreich?

Lösung

Mit SIMD es nicht einfach ist, aus einem einzigen skalare zu gehen, wenn / dann zu einem Test auf mehreren Elementen. Normalerweise sollten Sie testen, ob jeder Element größer oder wenn alle -Elemente sind größer als und es wird in der Regel unterschiedliche SIMD Prädikate für jeden Fall sein, die Sie in einer setzen können if (...). Ich weiß nicht so etwas wie dies in NEON sehen, obwohl, so dass man von Glück heraus kann.

Oft wenn Sie einen anderen Ansatz nehmen möchten, da Zweige sind in der Regel nicht wünschenswert, in optimierten Code. Im Idealfall sollten Sie das Ergebnis eines SIMD-Vergleichs als Maske für nachfolgende Operationen verwendet wird (zum Beispiel unterschiedliche Werte auswählen, basierend auf Maske bitweise Operationen).

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