varias usar switch sirve sintaxis sentencia que programar para opciones lenguaje instruccion ejemplos con como gcc switch-statement branch-prediction

gcc - sirve - ¿Puedes usar builtin_expect con la instrucción switch?



sintaxis de la sentencia switch en c++ (2)

Ambas ramas de case (y, por lo tanto, todos los casos) hacen lo mismo, por lo que el compilador puede reemplazar toda la instrucción de conmutación con v=7 . Incluso si no lo hace (sin optimización), ¿esperaría una diferencia real en el tiempo?

Pero más al grano, __builtin_expect evalúa como (v == EXPT) , ya sea (0) o (1) , por lo que el case 7: nunca se tomará.

Tengo una declaración de switch en algún código de tiempo crítico. Estaba tratando de optimizarlo con __builtin_expect , pero parece que no funciona. Me pregunto si alguien me puede decir si me faltan algunos detalles, o si el compilador simplemente no se optimiza para eso. He intentado lo siguiente en mi máquina host:

int main() { volatile int v=0; long i = 0; for (i=0; i<1000000000L; i++) { switch(__builtin_expect(v, EXPT)) { case 7: v=7; break; default: v=7; break; } } return v; }

Luego compilo y corro de la siguiente manera:

~/code/builtinexpect> gcc bie.c -o bie -D EXPT=0 && time ./bie real 0m2.092s user 0m2.086s sys 0m0.000s ~/code/builtinexpect> gcc bie.c -o bie -D EXPT=7 && time ./bie real 0m2.092s user 0m2.086s sys 0m0.000s

Estoy usando la versión 4.5.1 de GCC.


GCC no admite esto en ninguna arquitectura de la que tenga conocimiento. Si tiene una declaración de switch que favorece fuertemente un caso particular, su mejor recurso es hacer una declaración if ... else switch ... Esto daría como resultado la optimización que está buscando.