La forma más rápida de calcular el valor absoluto utilizando SSE
Conozco 3 métodos, pero que yo sepa, solo se usan los primeros 2:
Enmascarar el bit de signo usandoandps
oandnotps
.
Reste el valor de cero a negar, y luego obtenga el máximo del original y negado.
Pros: Costo fijo porque no se necesita nada para buscar, como una máscara.Contras: siempre será más lento que el método de máscara si las condiciones son ideales, y tenemos que esperar a quesubps
completar antes de usar elmaxps
instrucción.Similar a la opción 2, reste el valor original de cero para negar, pero luego "a nivel de bits" y el resultado con el original usandoandps
. Realicé una prueba comparando esto con el método 2, y parece comportarse de manera idéntica al método 2, aparte de cuando se trata deNaN
s, en cuyo caso el resultado será diferenteNaN
que el resultado del método 2.
andps
suele ser más rápido quemaxps
.Contras: ¿Esto puede provocar un comportamiento no deseado cuandoNaN
s están involucrados? Quizás no, porque unNaN
sigue siendo unNaN
, incluso si es un valor diferente deNaN
, ¿derecho?Pensamientos y opiniones son bienvenidos.