es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué -fno-signed-zeros tiene un efecto en la vectorización para la búsqueda mínima?

Vea esta búsqueda mínima simple (Godbolt):

float foo(const float *data, int n) {
    float v = data[0];
    for (int i = 1; i < n; i++) {
        float d = data[i];
        if (d < v) {
            v = d;
        }
    }
    return v;
}

Ni gcc ni clang auto-vectorizan este código con -O3. Si uso -ffinite-math-only, aún no ocurre la auto-vectorización. Necesito usar -ffinite-math-only y -fno-signed-zeros y el compilador auto-vectoriza el código. ¿Por qué se necesita -fno-signed-zeros para que se active la auto-vectorización?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La opción -fno-signed-zeros es necesaria para que la auto-vectorización funcione, ya que permite que el compilador asuma que la aritmética de punto flotante no producirá un cero negativo. Sin esta suposición, el compilador debe generar código para manejar la posibilidad de un cero negativo, lo cual puede evitar la vectorización. La bandera -ffinite-math-only restringe las operaciones de punto flotante a valores finitos solamente, lo cual ayuda a la vectorización. En resumen, ambas banderas permiten que el compilador haga ciertas suposiciones sobre la aritmética de punto flotante que habilitan la auto-vectorización.

Comments are closed.