Peut probable/peu probable macros être utilisé dans l'espace utilisateur code?
Je suis tombé sur ces 2 macros dans le code du noyau de Linux. Je sais qu'ils sont des instructions pour le compilateur (gcc) pour des optimisations dans le cas de la ramification. Ma question est, peut-on utiliser ces macros dans l'espace utilisateur code? Cela donne tout de l'optimisation? Un exemple sera très utile.
- kerneltrap.org/node/4705
- en double? stackoverflow.com/questions/109710/...
- J'ai vérifié ces postes, mais les deux à nouveau en parle dans le noyau des choses. Je voulais savoir si même peut être utilisée dans le code de l'utilisateur.
- Si vous êtes à la programmation de tout raisonnablement puissant processeur, vous êtes peu probable d'obtenir un quelconque avantage en matière de performances. Dynamique moderne de la branche, les indicateurs sont plutôt bonnes.
- Je pense que le programmeur ne devrait pas assumer la puissance du processeur. Dynamique de la branche de détection serait plus facile si le programmeur de prévoir explicitement l'information.
- j'ai créer un vecteur aléatoire(de 0 à 100, la branche est plus grand que 0 ou pas) pour mesurer la "probable" apporte gain de performance par rapport direction de la prévision du CPU. Le résultat montre qu'il est similaire coût du temps avec ou sans.
Vous devez vous connecter pour publier un commentaire.
Oui ils le peuvent. Dans le noyau Linux, ils sont définis comme
L' __builtin_attendent les macros sont GCC spécifiques des macros qui utilisent la direction de la prévision; ils disent que le processeur si une condition est susceptible d'être vrai, de sorte que le processeur peut prefetch instructions sur le bon "côté" de la branche.
Vous devez envelopper la définit dans un ifdef pour assurer la compilation sur d'autres compilateurs:
Il va certainement vous donner des optimisations si vous l'utilisez pour la bonne branche des prédictions.
Prendre un coup d'oeil dans Ce Que Chaque Programmeur Doit Savoir À Propos De La Mémoire sous "6.2.2 l'Optimisation de Niveau 1 mode d'Accès au Cache" - il y a une section sur exactement cela.
Le probable() et rare() les macros sont jolis noms définis dans les en-têtes du noyau pour quelque chose qui est un réel gcc fonctionnalité