A veces, un bucle donde la CPU pasa la mayor parte del tiempo tiene algunas fallas de predicción de ramificaciones (error de predicción) muy a menudo (probabilidad de cerca de .5). He visto algunas técnicas en hilos muy aislados pero nunca en una lista. Los que conozco ya arreglan situaciones donde la condición se puede convertir en un bool y que 0/1 se usa de alguna manera para cambiar. ¿Hay otras ramas condicionales que se pueden evitar?¿Qué técnicas para evitar la ramificación condicional, sabes?
p. Ej. (Pseudocódigo)
loop() {
if (in[i] < C)
out[o++] = in[i++]
...
}
pueden reescribirse, podría decirse que perder algo de lectura, con algo como esto:
loop() {
out[o] = in[i] // copy anyway, just don't increment
inc = in[i] < C // increment counters? (0 or 1)
o += inc
i += inc
}
También he visto técnicas en el cambio de &&
-&
en condicional en ciertos contextos salvaje escapando de mi mente ahora mismo. Soy un novato en este nivel de optimización, pero seguro que se siente como si tuviera que haber más.
Mal ejemplo. Incluso si el código sin sucursales se puede ver como equivalente al original, eso es solo si el código original no tenía ningún sentido en primer lugar. – AnT
¿Por qué tanta gente responde con una respuesta que no responde realmente? – jasonk