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.

¿Puedo mejorar la predicción de ramificación con mi código?

Esta es una pregunta general ingenua abierta a cualquier plataforma, lenguaje o compilador. Aunque estoy más interesado en Aarch64, C++ y GCC.

Cuando codifico una rama inevitable en el flujo del programa que depende del estado de entrada/salida (el compilador no puede predecir), y sé que un estado es mucho más probable que otro, ¿cómo indico eso al compilador?

¿Es mejor esto?

if(true == get(gpioVal))
    unlikelyFunction();
else
    likelyFunction();

¿que esto?

if(true == get(gpioVal))
    likelyFunction(); // rendimiento crítico, llenar cachés de anticipación desde esta rama
else
    unlikelyFunction(); // predicción fallida no repercute en esta rama

¿Ayuda si el protocolo de comunicación hace que el valor más probable o crítico sea verdadero (alto) o falso (bajo)?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En C++ con GCC, se puede utilizar la función __builtin_expect para indicarle al compilador qué rama es más probable. Esta función toma dos argumentos: la expresión a evaluar y el resultado esperado (0 para falso, 1 para verdadero). Por ejemplo, podrías reescribir tu código de la siguiente manera:

    if(__builtin_expect(get(gpioVal), true))
        likelyFunction();
    else
        unlikelyFunction();
    

    Esto le indica al compilador que la condición del if es más probable que sea verdadera, lo cual puede ayudar a optimizar el código.

    En cuanto a si se debe priorizar la rama crítica o la rama más probable, depende de la aplicación específica y de los requisitos de rendimiento. Si el rendimiento es crítico y llenar las cachés de anticipación es más importante, entonces se debe priorizar la rama probable. Si una predicción incorrecta no es relevante o la rama improbable tiene un impacto mayor, entonces se debe priorizar la rama improbable.

    También puede ser útil diseñar el protocolo de comunicación de tal manera que el valor más crítico o probable sea verdadero o alto, ya que esto puede simplificar el código y mejorar el rendimiento.

Comments are closed.