[Reimpreso] Probable e improbable en el kernel de Linux

Prefacio
  Versión del kernel: linux 4.13
  En el kernel de linux, a menudo se puede ver si (probable (x)) o si (improbable (x)) declaraciones, entonces, ¿qué significa "me gusta" y "improbable"? Este artículo discutirá algunos de los posibles e improbables.

probable 和 improbable

Referencia /include/linux/compiler.h * /

# define likely(x)  __builtin_expect(!!(x), 1)
# define unlikely(x)    __builtin_expect(!!(x), 0)

El código fuente anterior usa la función incorporada __builtin_expect para definir, es decir, la función incorporada.
  El prototipo de la función __builtin_expect es largo __builtin_expect (long exp, long c), el valor de retorno es el valor de la expresión completa exp, y su función es esperar que el valor de la expresión exp sea igual a c (si exp == c la condición tiene la mayor probabilidad La mayoría, entonces se mejorará el rendimiento, de lo contrario se reducirá el rendimiento). Tenga en cuenta que el valor de retorno de __builtin_expect (lexp, c) sigue siendo el valor exp en sí mismo y no cambia el valor de exp.
  La función __builtin_expect se usa para guiar a gcc para realizar la predicción de ramificación condicional. Durante la ejecución de una instrucción, debido a la función de la canalización, la CPU puede completar simultáneamente la recuperación de la siguiente instrucción, lo que puede mejorar la utilización de la CPU. Al ejecutar una instrucción de bifurcación condicional, la CPU también captará previamente la próxima ejecución, pero si el resultado de la bifurcación condicional es saltar a otra instrucción, la próxima instrucción captada previamente por la CPU es inútil, lo que reduce la eficiencia de la tubería.
  Además, las instrucciones de salto consumen más tiempo de CPU que las instrucciones ejecutadas secuencialmente. Si puede omitir los saltos tanto como sea posible, también puede mejorar el rendimiento de la CPU.
  Simplemente mire en la superficie if (probable (valor)) == if (valor), if (poco probable (valor)) == if (valor).
Es decir, probable e improbable son lo mismo, pero de hecho la ejecución es diferente, más probable significa que el valor del valor es más probable que sea verdadero, entonces la posibilidad de ejecutar si es mayor e improbable significa que el valor del valor es falso La posibilidad es mayor, y la oportunidad de ejecutar otra cosa es mayor.
  Con esta modificación, cuando se compila en código binario, es posible hacer que la declaración de ejecución siga si sigue inmediatamente al programa anterior, y de manera única, hacer que la declaración que sigue siga inmediatamente al programa anterior, que será previamente leída por el caché y aumentará el programa. Velocidad de ejecución.
  Entonces, ¿por qué usarlo en la definición anterior! ! ¿Qué hay de los símbolos?
  ¡La lógica bool en la computadora es solo 0 y 1, distinta de cero es 1, y puede usarse cuando el parámetro en like (x) no es un valor lógico! ! El signo se convierte en un valor lógico de 1 o 0. Por ejemplo: ! (3) =! (! (3)) =! 0 = 1, de modo que el parámetro 3 se convierte a la lógica 1.
  Entonces, la comprensión simple es:
  probable (x) representa que x es lógicamente verdadero (1) es más probable;
  improbable (x) representa x es lógicamente falso (0) es más probable.

Transferido desde el kernel de Linux probable e improbable

91 artículos originales publicados · 17 elogiados · 50,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_23327993/article/details/105298509
Recomendado
Clasificación