Pregunta

¿Cómo utilizar las instrucciones de comparación de neón en general?

Este es un caso, quiero utilización, Mayor que o igual a la instrucción?

Actualmente tengo una,

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

}

En neón, me gustaría utilizar x de la misma manera, sólo que esta vez x es un vector.

int32x4_t x;

...
...
...

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

}
¿Fue útil?

Solución

Con SIMD que no es fácil pasar de un solo escalar si / entonces a una prueba en varios elementos. Por lo general, desea probar si cualquier es mayor que o si todos son mayores que, y generalmente existirá diferentes predicados SIMD para cada caso que se puede poner dentro de una if (...). No veo nada como esto en NEON sin embargo, por lo que puede estar fuera de suerte.

A menudo sin embargo desea adoptar un enfoque diferente, ya que las ramas por lo general no son deseables en código optimizado. Lo ideal es que tendrá que usar el resultado de una comparación SIMD como una máscara para las operaciones posteriores (por ejemplo, seleccionar valores diferentes en función de máscara usando operaciones bit a bit).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top