Domanda

Come utilizzare le istruzioni di confronto NEON in generale?

Ecco un caso, voglio usare, più Grande o-uguale-per l'istruzione?

Al momento ho una,

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

}

In NEON, vorrei utilizzare x nello stesso modo, solo che questa volta x è un vettore.

int32x4_t x;

...
...
...

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

}
È stato utile?

Soluzione

Con SIMD non è semplice per passare da un singolo scalare if / then ad un test su più elementi. Di solito si desidera verificare se qualsiasi elemento è maggiore o se tutti elementi sono maggiori di, e ci sarà solitamente diversi predicati SIMD per ciascun caso in cui si può mettere all'interno di un if (...). Non vedo niente di simile in NEON, però, così si può essere fuori di fortuna.

Spesso, se si vuole prendere un approccio diverso, dal momento che i rami di solito non sono desiderabili in codice ottimizzato. Idealmente si desidera utilizzare il risultato di un confronto SIMD come maschera per le operazioni successive (ad esempio selezionare valori diversi sulla base di operazioni bit per bit maschera utilizzando).

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