Maison > développement back-end > C++ > Comment puis-je empêcher la réorganisation des instructions dans le code C optimisé ?

Comment puis-je empêcher la réorganisation des instructions dans le code C optimisé ?

DDD
Libérer: 2024-12-01 14:26:14
original
663 Les gens l'ont consulté

How Can I Prevent Statement Reordering in Optimized C   Code?

Application de l'ordre des déclarations en C

Question :

Comment peut-on empêcher la réorganisation de instructions en code C, même avec des optimisations activé ?

Réponse :

Malgré l'hypothèse courante, C n'applique pas intrinsèquement l'ordre des instructions, en particulier dans le cadre des optimisations. Certaines instructions peuvent apparaître dans le désordre dans le code optimisé, ce qui peut poser problème dans des scénarios tels que les opérations urgentes.

Solutions :

Fondamentalement, la manipulation des opérations la sémantique des opérations fondamentales comme l'addition pour obtenir un ordre strict n'est pas réalisable. Les optimisations du compilateur et de la conception matérielle reposent sur l'hypothèse que ces opérations n'ont pas de propriétés de synchronisation observables.

Cependant, des techniques efficaces ont émergé pour le micro-benchmarking :

Manipulation de données opaques :

  • Marquer les données d'entrée et de sortie comme "non optimisées" autour du calcul dans question.
  • Cela garantit que le calcul reste limité par les timings tout en permettant l'optimisation dans ses limites.

Support de la bibliothèque :

  • Les bibliothèques comme Google Benchmark fournissent la fonction DoNotOptimize pour marquer les données comme non optimisables.
  • Exemple utilisation :
template <class T>
__attribute__((always_inline)) inline void DoNotOptimize(const T &value) {
  asm volatile("" : "+m"(const_cast<T &&>(value)));
}
Copier après la connexion

Directives du compilateur :

  • Certains compilateurs proposent des directives telles que "__attribute__((optimize("no-reorder")) )" ou "__restrict__" pour empêcher les réorganisations.
  • Cependant, ces directives peuvent ne pas toujours être suffisantes ou portable.

Remarque :

Le comité des normes C étudie la standardisation des API telles que DoNotOptimize pour faciliter davantage l'application de l'ordre des instructions.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal