while usando sentencia que programacion lenguaje for else ejemplos ciclo c++ visual-c++ optimization compiler-construction compiler-optimization

usando - sentencia if else en c++



¿Cómo sugerir al optimizador del compilador de Visual C++ que una rama específica de una sentencia if no se ejecutará? (2)

Habilitar la optimización guiada por perfil . El compilador no solo maximizará la predicción de bifurcaciones, sino que también eliminará completamente el código frío. Este video canal 9 explica las diversas optimizaciones.

Tenemos una macro para la comprobación de errores que va así:

#define CheckCondition( x ) / if( x ) { / //okay, do nothing / } else { / CallFunctionThatThrowsException(); / }

y normalmente la condición tiene que ser true y nos gustaría que la predicción de la rama de la CPU seleccione siempre esta ruta, y si resulta ser false , no nos importa una predicción errónea: lanzar una excepción y el desenrollado masivo de la pila costará una fortuna de todos modos

De acuerdo con las descripciones de CPU hardcore, la predicción de rama tratará los saltos hacia adelante y hacia atrás de manera ligeramente diferente (algo así como un salto hacia atrás siempre se realiza y el salto hacia adelante nunca se realiza) y el compilador podría mejorar la predicción de rama al generar un código que dará pistas correctas CPU predictor de rama.

gcc parece tener pistas likely e unlikely para eso. ¿Hay algo así en Visual C ++? ¿ __assume puede __assume palabra clave __assume para eso?


No en MSVC, desafortunadamente, según su centro de desarrolladores .

Es muy frustrante porque nos gustaría usarlo en un par de casos en los que el intrínseco de GCC equivalente nos ha ahorrado unos pocos microsegundos críticos en los bucles internos, pero lo más cercano que podemos llegar es intercambiar las cláusulas if y else para que más El caso probable está en la rama de salto hacia adelante no tomada.