Question

Comment utiliser les instructions de comparaison NEON en général?

Voici un cas, je veux utiliser, Grand-que ou égal à l'instruction?

Actuellement, j'ai,

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

}

Dans NEON, je voudrais utiliser x de la même façon, juste que cette fois-x est un vecteur.

int32x4_t x;

...
...
...

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

}
Était-ce utile?

La solution

Avec SIMD ce n'est pas facile de passer d'un scalaire si / alors à un test sur plusieurs éléments. Habituellement, vous voulez tester si any est supérieur ou si tous éléments sont supérieurs, et il y aura généralement différents prédicats SIMD pour chaque cas que vous pouvez mettre à l'intérieur d'un if (...). Je ne vois pas quelque chose comme ça dans NEON, donc vous pouvez être hors de la chance.

Souvent, si vous voulez prendre une approche différente, car les branches ne sont généralement pas souhaitable dans le code optimisé. Idéalement, vous voulez utiliser le résultat d'une comparaison SIMD comme masque pour les opérations suivantes (par exemple sélectionner des valeurs différentes en fonction de masque en utilisant des opérations de manipulation de bits).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top